[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 }