LinkedIn YouTube Facebook
Szukaj

Wstecz
SoM / SBC

[PROJEKT] Sterowanie diodą RGB za pomocą joysticka w Arduino

Na listingu 2 znajduje się program do testowania pracy joysticka analogowego z modułu modJOY2. Po zaprogramowaniu Arduino Nano tym kodem zostanie otworzona komunikacja pomiędzy płytką a komputerem. Aby zaobserwować wysyłane wartości, można wykorzystać Monitor portu szeregowego uruchamiany po naciśnięciu ikony wskazanej czarną strzałką na rysunku 3.

 

Rys. 3. Wskazany strzałką przycisk uruchamia Monitor Portu Szeregowego

 

Rys. 4. Komunikaty odczytywane przez Monitor Portu Szeregowego

 

Na rysunku 4 można zobaczyć wartości sygnału wygenerowanego przez potencjometr X oraz Y. Widzimy także zliczane takty przycisku. W momencie zmiany położenia drążka joysticka wartości powinny ulegać zmianie w zakresie od 0 do 1023.

 

Rys. 5. Przykładowy schemat podłączenia diody RGB oraz modułu modJOY2 do Arduino Nano

 

Po pomyślnym przetestowaniu poszczególnych podzespołów naszego sterownika możemy przejść do wykonania kompletnego urządzenia. Aby prawidłowo je wykonać, zachęcamy do skorzystania ze schematu pokazanego na rysunku 5. Zbudowane według tego schematu urządzenie pokazano na rysunku 6. Kompletny program sterownika znajduje się na listingu 3.

 

Rys. 6. Sterownik wykonany zgodnie ze schematem z rysunku 5

 

List. 3. Program sterownika diody RGB

int red = 9, green = 10, blue = 11; //przypisanie portów PWM jako wyjścia na diodę RGB
int inx=A0, iny=A1; //zmienne położenia potencjometrów xosi x i y
int button=13; //przypisanie portu jako wejście przycisku
int x,y; //zmienne położenia potencjometrów
int stan=1; //tryb pracy

void setup()
{
pinMode(red, OUTPUT); //przypisanie systemowe portów jako wyjścia
pinMode(green, OUTPUT);
pinMode(blue, OUTPUT);
pinMode(button, INPUT);//przypisanie systemowe portów jako wejście
Serial.begin(9600); //ustalenie komunikacji poprzez port USB
}

void loop()
{
x=analogRead(inx); //przypisanie wartości analogowych napięcia z potencjometrów
y=analogRead(iny);


Serial.print("Pozycja X = " ); //wysłanie informacji poprzez port USB                      
Serial.print(x);      
Serial.print("\t Pozycja Y = ");      
Serial.print(y);   
Serial.print("\t Stan Button  = ");      
Serial.println(stan);


if(digitalRead(button)==HIGH){ //funkcja zależna przejścia między trybami pracy
  stan+=1;
  delay(1000);
  if(stan==4) //zapętlenie liczby trybów pracy
  {
    stan=1; 
  }
}
switch (stan) {
    case 1:
      analogWrite(blue,x/4); //tryb pracy niebieski
      break;
    case 2:
      analogWrite(green,x/4); //tryb pracy zielony
      break;
    case 3:
      analogWrite(red,x/4); //tryb pracy czerwony
      break;
  }
delay(100); //opóźnienie
}