Salve a tutti, ho problemi con un progetto a cui sto lavorando. L'obbiettivo è quello di rappresentare un numero decimale da 0 a 9 in binario con 4 led. Il numero può essere incrementato o decrementato con i pulsante sinistro e destro. Il pulsante centrale serve a spegnere tutti i led o a riaccenderli.
Non riesco a capire perché le lampade si accendano in modo casuale, se invece uso un delay che aumenta il numero ogni tot funziona tutto perfettamente.
Questo è il mio sketch
const int Button1 = 7;
const int Button2 = 6;
const int Button3 = 5;
const int Led1 = 11;
const int Led2 = 10;
const int Led3 = 9;
const int Led4 = 8;
int ButtonState1=0;
int ButtonState2=0;
int ButtonState3=0;
int X=0;
int N=0;
int S=1;
int Y=1;
void setup()
{
// put your setup code here, to run once:
pinMode(Led1, OUTPUT);
pinMode(Led2, OUTPUT);
pinMode(Led3, OUTPUT);
pinMode(Led4, OUTPUT);
pinMode(Button1, INPUT);
pinMode(Button2, INPUT);
pinMode(Button3, INPUT);
}
void loop()
{
// put your main code here, to run repeatedly:
ButtonState1 = digitalRead(Button1);
ButtonState2 = digitalRead(Button2);
ButtonState3 = digitalRead(Button3);
if(ButtonState1 == HIGH)
if(X>0)
X=X-1;
if(ButtonState2 == HIGH)
if(S==0)
S=1;
else
S=0;
if(ButtonState3 == HIGH)
if(X<9)
X=X+1;
//conversione in binario
if(S==1)
{
N=X;
if(N%2==0)
{
N=N/2;
digitalWrite(Led1, LOW);
}
else
{
N=(N-1)/2;
digitalWrite(Led1, HIGH);
}
if(N%2==0)
{
N=N/2;
digitalWrite(Led2, LOW);
}
else
{
N=(N-1)/2;
digitalWrite(Led2, HIGH);
}
if(N%2==0)
{
N=N/2;
digitalWrite(Led3, LOW);
}
else
{
N=(N-1)/2;
digitalWrite(Led3, HIGH);
}
if(N%2==0)
{
N=N/2;
digitalWrite(Led4, LOW);
}
else
{
N=(N-1)/2;
digitalWrite(Led4, HIGH);
}
}
else
{
digitalWrite(Led1, LOW);
digitalWrite(Led2, LOW);
digitalWrite(Led3, LOW);
digitalWrite(Led4, LOW);
}
}
In allegato ho messo lo schema di montaggio.