Ciao a tutti,
Ultimamente ho realizzato una piccola tastiera composta da 5 pulsanti, il mio intento era quello di avviare un relè all'inserimento di una sequenza specifica.
il codice l'ho realizzato e funziona, il problema è che se per esempio la sequenza è 2 2 3 3 1 indifferentemente che io parta dal primo o dall'ultimo pulsante il codice viene accettato.
io invece voglio che il codice venga decodificato seguendo una scala, pulsante 1, 2, 3, 4, 5
il codice è:
byte stato=1;
int LED_ROSSO = 8;
int LED_VERDE = 10;
int LED_BIANCO = 9;
int SW1 = 2;
int SW2 = 3;
int SW3 = 4;
int SW4 = 5;
int SW5 = 6;
int Buzzer = 12;
int a, b, c, d, e, code1, code2, code3, code4, code5, resetTimer = 0;
void setup() {
pinMode (LED_BIANCO, OUTPUT);
pinMode(LED_ROSSO, OUTPUT);
pinMode(LED_VERDE, OUTPUT);
pinMode(Buzzer, OUTPUT);
pinMode(SW1, INPUT);
digitalWrite(SW1, HIGH);
pinMode(SW2, INPUT);
digitalWrite(SW2, HIGH);
pinMode(SW3, INPUT);
digitalWrite(SW3, HIGH);
pinMode(SW4, INPUT);
digitalWrite(SW4, HIGH);
pinMode(SW5, INPUT);
digitalWrite(SW5, HIGH);
Clr_Code();
}
void loop()
{
// Button1 = 5 presses
if (!digitalRead(SW1))
{
delay(50);
if (!digitalRead(SW1))
{
Stand();
Blink();
a++;
if (a == 2)
{
code1 = true;
} else code1 = false;
do {
} while (!digitalRead(SW1));
}
}
// button 2
if (!digitalRead(SW2))
{
delay(50);
if (!digitalRead(SW2))
{
Stand();
Blink();
b++;
if (b == 2)
{
code2 = true;
} else code2 = false;
do {
} while (!digitalRead(SW2));
}
}
//button 3
if (!digitalRead(SW3))
{
delay(50);
if (!digitalRead(SW3))
{
Stand();
Blink();
c++;
if (c == 1)
{
code3 = true;
} else code3 = false;
do {
} while (!digitalRead(SW3));
}
}
//button 4
if (!digitalRead(SW4))
{
delay(50);
if (!digitalRead(SW4))
{
Stand();
Blink();
d++;
if (d == 5)
{
code4 = true;
} else code4 = false;
do {
} while (!digitalRead(SW4));
}
}
// pulsante 5
if (!digitalRead(SW5))
{
delay(50);
if (!digitalRead(SW5))
{
Blink();
Stand();
e++;
if (e == 3)
{
code5 = true;
} else code5 = false;
do {
delay(50);
resetTimer++;
if (resetTimer > 50)
{
Clr_Code();
break;
}
} while (!digitalRead(SW5));
resetTimer = 0;
}
}
if (code1 == true && code2 == true && code3 == true && code4 == true && code5 == true)
{
digitalWrite(LED_VERDE, HIGH);
digitalWrite(LED_BIANCO, LOW);
delay(5000);
Clr_Code();
digitalWrite(LED_VERDE, LOW);
}
else
{
digitalWrite(LED_VERDE, LOW);
}
}
void Blink(void)
{
digitalWrite(LED_ROSSO, HIGH);
tone(Buzzer, 520, 150);
delay(250);
digitalWrite(LED_ROSSO, LOW);
}
void Stand (void)
{
digitalWrite(LED_BIANCO, HIGH);
}
void Clr_Code (void) {
a = 0;
b = 0;
c = 0;
d = 0;
e = 0;
code1 = 0;
code2 = 0;
code3 = 0;
code4 = 0;
code5 = 0;
resetTimer = 0;
}
spero di essere stato abbastanza chiaro , grazie.