'Giorno a tutti, torno ancora qui per l'ultimo grande ostacolo di un progetto semplicissimo.
Ho costruito un progetto costituito da un Arduino Nano che pilota un LED RGB attraverso due pulsanti. In particolare, uno dovrebbe switchare il colore del LED in questione, l'altro dovrebbe accendere e spegnere il LED, facendo in modo che, riaccendendolo, il colore resti lo stesso precedentemente impostato con l'altro pulsante.
Per quanto riguarda lo switching colore ho scritto questo codice, estremamente semplice.
int RED=11;
int GREEN=10;
int BLUE=9;
int P1=2; //primo pulsante
int P2=3; //secondo pulsante
int val1=0;
int val2=0;
int val1a=0;
int val2a=0;
int stato1=0;
int stato2=0; //utili per il debounce
int colore=0; //ordine per switchare il colore
void setup() {
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(BLUE, OUTPUT);
pinMode(P1, INPUT_PULLUP);
pinMode(P2, INPUT_PULLUP); //i pulsanti sono collegati direttamente al GND, usando le resistenze interne
}
void loop() {
val1=digitalRead(P1);
if ((val1==1)&&(val1a==0)) {
stato1 = 1 - stato1;
delay(15); //debounce per P1
if (colore<6) colore=colore+1;
else colore=0; //selezionare tra 7 colori
}
val1a=val1; //utile per il debounce
switch (colore)
{
case 1: //Rosso
digitalWrite(RED, HIGH);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, LOW);
break;
case 2: //Giallo
digitalWrite(RED,HIGH);
digitalWrite(GREEN, HIGH);
digitalWrite(BLUE, LOW);
break;
case 3: //Verde
digitalWrite(RED, LOW);
digitalWrite(GREEN, HIGH);
digitalWrite(BLUE, LOW);
break;
case 4: //Celeste
digitalWrite(RED, LOW);
digitalWrite(GREEN, HIGH);
digitalWrite(BLUE, HIGH);
break;
case 5: //Blu
digitalWrite(RED, LOW);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, HIGH);
break;
case 6: //Viola
digitalWrite(RED, HIGH);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, HIGH);
break;
case 0: //Bianco
digitalWrite(RED,HIGH);
digitalWrite(GREEN, HIGH);
digitalWrite(BLUE,HIGH);
break;
}
}
Qui viene il grosso problema: inspiegabilmente, nel selezionare i colori, i valori di HIGH e LOW sono invertiti. Ovvero, va da Celeste (Stato1) a Verde (Stato6), dopodiché si spegne (Stato 0).
Perché sta cosa? Non riesco a capire dove ho sbagliato.
Inoltre: il secondo pulsante come dovrei programmarlo? Ho provato a mettere un comando uguale al P1 ma con R:LOW, G:LOW, B:LOW, ma il pulsante non si accorge neanche se lo premo.
So che è una cosa mooolto basilare. Mi aiutereste, per favore?