Buongiorno
Sto facendo un progetto con una scheda Arduino Uno R3 che deve gestire una gara di riflessi tra due concorrenti, A e B che utilizzano un pulsante e un LED rosso per ogni concorrente, un pulsante di start con un LED verde, un buzzer e uno schermo LCD.
Il funzionamento del circuito è:
- Il LED verde si accende
- Quando si preme il pulsante di start il LED verde si spegne per un tempo di durata casuale (3 - 8 secondi)
- Al termine del tempo suona il buzzer e si riaccende il LED verde
- Il primo concorrente che preme il proprio pulsante vince: il suo LED lampeggia e il buzzer suona sincrono col LED per 5 volte
- Se alla fine del tempo casuale uno dei due concorrenti sta già premendo il pulsante, vince l'altro, se ha premuto correttamente
- Quando uno dei due concorrenti raggiunge 5 punti, lampeggiano 10 volte il display e il LED e il buzzer alterna due note
Lo schermo LCD serve per far vedere il punteggio dei due concorrenti e far vedere chi ha vinto.
Ho scritto lo sketch e ho costruito il circuito sulla Bread Board stando attento ai collegamenti, ma durate l'esecuzione del programma c'è un problema
- Premo il pulsante di start
- Non fa quasi tempo a riaccendersi il LED verde che in automatico assegna il punto al concorrente B
Ho provato a cambiare il pulsante e i cavi verificando che tutto funzionasse ma il problema è rimasto; facendo una simulazione su un programma e rifacendo gli stessi collegamenti tutto funzionava.
Quindi non saprei cosa fare
grazie, buona giornata
#include <LiquidCrystal.h>
LiquidCrystal lcd(12 ,11 ,5 ,4 ,3 ,2 );
const int pinPulsA = 0;
const int pinPulsB = 6;
const int pinPuls_Start = 13;
const int pinLedA = 8;
const int pinLedB = 10;
const int pinLed_Start = 9;
const int buzzer = 7;
const int maxPunti = 5;
bool pulsA;
bool pulsB;
bool puls_Start;
int puntiA;
int puntiB;
int nota;
void setup() {
lcd.begin(16, 2);
pinMode(pinPulsA, INPUT_PULLUP);
pinMode(pinPulsB, INPUT_PULLUP);
pinMode(pinPuls_Start, INPUT_PULLUP);
pinMode(pinLedA, OUTPUT);
pinMode(pinLedB, OUTPUT);
pinMode(pinLed_Start, OUTPUT);
pinMode(buzzer, OUTPUT);
randomSeed(analogRead(0));
lcd.setCursor(0, 0);
lcd.print("Winner");
lcd.setCursor(9, 0);
lcd.print("A=");
lcd.setCursor(9, 1);
lcd.print("B=");
}
void loop() {
digitalWrite(pinLed_Start, HIGH);
do {
puls_Start = digitalRead(pinPuls_Start);
} while (puls_Start == 1);
digitalWrite(pinLed_Start, LOW);
delay(random(3000, 8000));
pulsA = digitalRead(pinPulsA);
pulsB = digitalRead(pinPulsB);
tone(buzzer, 262);
digitalWrite(pinLed_Start, HIGH);
if(pulsA == 0 || pulsB == 0) {
if(pulsA == 0 && pulsB == 1) vincitore(pinLedB);
if(pulsA == 1 && pulsB == 0) vincitore(pinLedA);
if(pulsA == 0 && pulsB == 0) {
lcd.setCursor(2, 1);
lcd.print("NULL");
delay(4000);
lcd.setCursor(2, 1);
lcd.print(" ");
}
}
else {
do {
pulsA = digitalRead(pinPulsA);
pulsB = digitalRead(pinPulsB);
} while(pulsA && pulsB);
if(pulsA == 0) vincitore(pinLedA);
if(pulsB == 0) vincitore(pinLedB);
}
noTone(buzzer);
}
void vincitore(int winner) {
digitalWrite(pinLed_Start, LOW);
if(winner==pinLedA) {
lcd.setCursor(3, 1);
lcd.print("A");
puntiA++;
nota=440;
}
if(winner==pinLedB) {
lcd.setCursor(3, 1);
lcd.print("B");
puntiB++;
nota=587;
}
lcd.setCursor(11, 0);
lcd.print(puntiA);
lcd.setCursor(11, 1);
lcd.print(puntiB);
if(puntiA == maxPunti || puntiB == maxPunti) {
for(int cont = 1; cont<=10; cont++) {
tone(buzzer, 587);
digitalWrite(winner, HIGH);
lcd.noDisplay();
delay(500);
tone(buzzer, 440);
digitalWrite(winner, LOW);
lcd.display();
delay(500);
}
lcd.setCursor(3, 1);
lcd.print(" ");
lcd.setCursor(11, 0);
lcd.print("0");
lcd.setCursor(11, 1);
lcd.print("0");
puntiA = 0;
puntiB = 0;
}
else {
for(int cont = 1; cont<=5; cont++) {
tone(buzzer, nota);
digitalWrite(winner, HIGH);
delay(500);
noTone(buzzer);
digitalWrite(winner, LOW);
delay(500);
}
}
}
