Pe internet, la http://blog.bricogeek.com/noticias/tutoriales/video-tutorial-arduino-led-rgb-y-pulsadores/ am depistat un material scris de Oscar Gonzales in 2009, care prezinta un Arduino care comanda un LED RGB cu ajutorul a 3 taste (una de selectie, una de reducere intensitate si una de crestere a intensitatii).
Este prezentat si un filmulet:
si un sketch (program).
Deoarece ma tot jucasem cu LED-ul RGB si era deja conectat (cu rosu la pin 11, albastru la 10 si verde la 9), am pus o rezistenta de 2k2 (asta am avut la indemana) intre +5V si pinul 7 (acolo a ajuns rezistenta) si cu o bucata de conductor am simulat un buton intre pinul 7 si GND (masa).
Schema de conectare este urmatoarea (fata de cea de comanda, prin program a LED-ului multicolor, doar am mai pus rezistenta si .. intrerupatorul):
Am constatat ca e o mica eroare in program (linia 54 trebuie mutata inainte de 51, altfel, LEd-urile se aprind corespunzator stari si se sting imediat).
Schema de conectare este urmatoarea (fata de cea de comanda, prin program a LED-ului multicolor, doar am mai pus rezistenta si .. intrerupatorul):
Am avut la indemana doar un "buton" (adica o sarmulita), am eliminat partea cu modificarea intensitatii (scadere sau crestere) si am mai adaugat o stare (toate LED-urile stinse), sketch-ul devenind:
Tutorial Diodos LED Tricolor y Pulsadores
Oscar Gonzalez - Marzo 2009
www.BricoGeek.com
original sketch from http://blog.bricogeek.com/noticias/tutoriales/video-tutorial-arduino-led-rgb-y-pulsadores/
adapted sketch by niq_ro ( http://www.tehnic.go.ro/ )
************************************/
// Define los pines a utilizar para cada color
// definire pin unde sunt legate LED-urile din componenta LED-ului RGB
int ledRojo=11; // pin 11 la LED-ul rosu
int ledAzul=10; // pin 10 la LED-ul albastru
int ledVerde=9; // pin 9 la LED-ul verde
// Guarda los valores a signar a cada color (0-255)
// intensitatea fiecarui LED poate avea valori de la 0 la 255 (0 pentru stins si 255 pentru maxim)
int ValorRojo=255; // intensitate luminioasa LED rosu
int ValorVerde=255; // intensitate luminioasa LED verde
int ValorAzul=255; // intensitate luminioasa LED albastru
// Define los pines utilizados por los botones
// definire pin folosit pentru tasta de selectie
int BotonSelect = 7;
int ledSeleccionado = 0;
// initializare stare ca zero
void setup()
{
// Hay que indicar que lo pines utilizados por los botones son de ENTRADA
// se defineste pinul ca intrare pentru tasta
pinMode(BotonSelect, INPUT);
analogWrite(ledRojo, 255);
}
// Valor por defecto: Rojo
// starea initiala va fi cu LED-ul rosu aprins
// 0= Rojo, 1=Verde, 2=Azul
// 0 = rosu, 1 = verde si 2 = albastru 3 = stinse
int pinLed = 0;
int valorLed = 0;
void loop()
{
// in mod normal pinul este in starea logica HIGH (rezistenta de 2..10k intre pin si +5V, contactul facandu-se la masa)
if (digitalRead(BotonSelect) == LOW)
{
pinLed++;
// Para no pasarnos de vueltas
// daca starea e numarul 3 se readuce la 0
if (pinLed > 3) { pinLed=0; }
// Apagamos todos los LED ya qu eluego se mostrará sólo el led seleccionado
// se sting toate LED-urile
analogWrite(ledRojo, 0);
analogWrite(ledVerde, 0);
analogWrite(ledAzul, 0);
// Esperamos a que el boton se suelte
// se asteapta eliberarea tastei
while (digitalRead(BotonSelect) == LOW) { }
delay(10); // Esperamos un poquito más...
}
// Actualiza el valor del color seleccionado
// cele 4 cazuri sunt: LED rosu aprins, LED verde aprins, LED albastru aprins, respectiv toate stinse
if (pinLed == 0) { analogWrite(ledRojo, ValorRojo); }
if (pinLed == 1) { analogWrite(ledVerde, ValorVerde); }
if (pinLed == 2) { analogWrite(ledAzul, ValorAzul); }
if (pinLed == 3) { ledSeleccionado = 0; }
delay (100);
}
Functionarea se poate vedea in urmatorul filmulet:
/***********************************
Tutorial Diodos LED Tricolor y Pulsadores
Oscar Gonzalez - Marzo 2009
www.BricoGeek.com
original sketch from http://blog.bricogeek.com/noticias/tutoriales/video-tutorial-arduino-led-rgb-y-pulsadores/
adapted sketch by niq_ro ( http://www.tehnic.go.ro/ )
************************************/
// Define los pines a utilizar para cada color
// definire pin unde sunt legate LED-urile din componenta LED-ului RGB
int ledRojo=11; // pin 11 la LED-ul rosu
int ledAzul=10; // pin 10 la LED-ul albastru
int ledVerde=9; // pin 9 la LED-ul verde
// Guarda los valores a signar a cada color (0-255)
// intensitatea fiecarui LED poate avea valori de la 0 la 255 (0 pentru stins si 255 pentru maxim)
int ValorRojo=255; // intensitate luminioasa LED rosu
int ValorVerde=255; // intensitate luminioasa LED verde
int ValorAzul=255; // intensitate luminioasa LED albastru
// Define los pines utilizados por los botones
// definire pin folosit pentru tasta de selectie
int BotonSelect = 7;
int ledSeleccionado = 0;
// initializare stare ca zero
void setup()
{
// Hay que indicar que lo pines utilizados por los botones son de ENTRADA
// se defineste pinul ca intrare pentru tasta
pinMode(BotonSelect, INPUT);
analogWrite(ledRojo, 255);
}
// Valor por defecto: Rojo
// starea initiala va fi cu LED-ul rosu aprins
// 0= Rojo, 1=Verde, 2=Azul
// 0 = rosu, 1 = verde si 2 = albastru 3 = stinse
int pinLed = 0;
int valorLed = 0;
void loop()
{
// in mod normal pinul este in starea logica HIGH (rezistenta de 2..10k intre pin si +5V, contactul facandu-se la masa)
if (digitalRead(BotonSelect) == LOW)
{
pinLed++;
// Para no pasarnos de vueltas
// daca starea e numarul 8 se readuce la 0
if (pinLed > 8) { pinLed=0; }
// Apagamos todos los LED ya qu eluego se mostrará sólo el led seleccionado
// se sting toate LED-urile
analogWrite(ledRojo, 0);
analogWrite(ledVerde, 0);
analogWrite(ledAzul, 0);
// Esperamos a que el boton se suelte
// se asteapta eliberarea tastei
while (digitalRead(BotonSelect) == LOW) { }
delay(10); // Esperamos un poquito más...
}
// Actualiza el valor del color seleccionado
// cele 4 cazuri sunt: LED rosu aprins, LED verde aprins, LED albastru aprins, respectiv toate stinse
if (pinLed == 0) { analogWrite(ledRojo, ValorRojo); } // doar LED rosu aprins
if (pinLed == 1) { analogWrite(ledVerde, ValorVerde); } // doar LED verde aprins
if (pinLed == 2) { analogWrite(ledAzul, ValorAzul); } // doar LED albastru aprins
if (pinLed == 3) { analogWrite(ledAzul, ValorAzul); analogWrite(ledRojo, ValorRojo); } // LED albastru si rosu aprinse
if (pinLed == 4) { analogWrite(ledVerde, ValorVerde); analogWrite(ledRojo, ValorRojo); } // LED rosu si verde aprinse
if (pinLed == 5) { analogWrite(ledAzul, ValorAzul); analogWrite(ledVerde, ValorVerde); } // LED albastru si verde aprinse
if (pinLed == 6) { analogWrite(ledAzul, ValorAzul); analogWrite(ledVerde, ValorVerde); analogWrite(ledRojo, ValorRojo); } // toate 3 LED-urile aprinse
if (pinLed == 7) { ledSeleccionado = 0; }
delay (100);
}
Functionarea se vede in urmatorul filmulet:
/***********************************
original sketch from http://blog.bricogeek.com/noticias/tutoriales/video-tutorial-arduino-led-rgb-y-pulsadores/
adapted sketch by niq_ro ( http://www.tehnic.go.ro/ )
************************************/
// definire pin unde sunt legate LED-urile din componenta LED-ului RGB
int ledRojo=11; // pin 11 la LED-ul rosu
int ledAzul=10; // pin 10 la LED-ul albastru
int ledVerde=9; // pin 9 la LED-ul verde
// intensitatea fiecarui LED poate avea valori de la 0 la 255 (0 pentru stins si 255 pentru maxim)
int ValorRojo=255; // intensitate luminoasa LED rosu
int ValorVerde=255; // intensitate luminoasa LED verde
int ValorAzul=255; // intensitate luminoasa LED albastru
// definire pin folosit pentru tasta de selectie
int BotonSelect = 7;
int ledSeleccionado = 0;
// initializare stare ca zero
void setup()
{
// se defineste pinul ca intrare pentru tasta
pinMode(BotonSelect, INPUT);
// prima stare la pornire cu LED-ul rosu aprins
analogWrite(ledRojo, 255);
}
// 0 = rosu, 1 = verde, 2 = albastru, 3 - rosu cu albastru, 4 - rosu cu verde, 5 - verde cu albastru, 6 - toate aprinse, 7 - joc, 8 - toate stinse
int pinLed = 0;
int valorLed = 0;
void loop()
{
// in mod normal pinul este in starea logica HIGH (rezistenta de 2..10k intre pin si +5V, contactul facandu-se la masa)
if (digitalRead(BotonSelect) == LOW)
{
pinLed++;
// Para no pasarnos de vueltas
// daca starea e numarul 8 se readuce la 0
if (pinLed > 8) { pinLed=0; }
// Apagamos todos los LED ya qu eluego se mostrará sólo el led seleccionado
// se sting toate LED-urile
analogWrite(ledRojo, 0);
analogWrite(ledVerde, 0);
analogWrite(ledAzul, 0);
// Esperamos a que el boton se suelte
// se asteapta eliberarea tastei
while (digitalRead(BotonSelect) == LOW) { }
delay(10); // Esperamos un poquito más...
}
// cele 9 cazuri sunt:
if (pinLed == 0) { analogWrite(ledRojo, ValorRojo); } // doar LED rosu aprins
if (pinLed == 1) { analogWrite(ledVerde, ValorVerde); } // doar LED verde aprins
if (pinLed == 2) { analogWrite(ledAzul, ValorAzul); } // doar LED albastru aprins
if (pinLed == 3) { analogWrite(ledAzul, ValorAzul); analogWrite(ledRojo, ValorRojo); } // LED albastru si rosu aprinse
if (pinLed == 4) { analogWrite(ledVerde, ValorVerde); analogWrite(ledRojo, ValorRojo); } // LED rosu si verde aprinse
if (pinLed == 5) { analogWrite(ledAzul, ValorAzul); analogWrite(ledVerde, ValorVerde); } // LED albastru si verde aprinse
if (pinLed == 6) { analogWrite(ledAzul, ValorAzul); analogWrite(ledVerde, ValorVerde); analogWrite(ledRojo, ValorRojo); } // toate 3 LED-urile aprinse
if (pinLed == 7) {
analogWrite(ledAzul, 0);
analogWrite(ledVerde, 0);
analogWrite(ledRojo, ValorRojo);
analogWrite(ledAzul, ValorAzul);
analogWrite(ledVerde, 0);
analogWrite(ledRojo, 0);
delay (1000);
analogWrite(ledAzul, 0);
analogWrite(ledVerde, ValorVerde);
analogWrite(ledRojo, 0);
delay (1000);
analogWrite(ledAzul, 0);
analogWrite(ledVerde, ValorVerde);
analogWrite(ledRojo, ValorRojo);
delay (1000);
analogWrite(ledAzul, ValorAzul);
analogWrite(ledVerde, 0);
analogWrite(ledRojo, ValorRojo);
delay (1000);
analogWrite(ledAzul, ValorAzul);
analogWrite(ledVerde, ValorVerde);
analogWrite(ledRojo, 0);
delay (1000);
analogWrite(ledAzul, ValorAzul);
analogWrite(ledVerde, ValorVerde);
analogWrite(ledRojo, ValorRojo);
delay (1000);
}
// se apasa lung tasta pana se termina ciclul jocului, dupa care se sting toate (starea a 9-a), la o noua apsare apare iar rosu
delay (100);
}
Modul de functionare este prezentat in urmatorul filmulet:
Niciun comentariu:
Trimiteți un comentariu