Ciao a tutti,
sto usando con buoni risultati il codice sotto per far fare ad arduino azioni diverse tenendo premuto per tot secondi un pulsante. dico solo buoni risultati perchè spesso capita che anche conteggiando i lampeggi del led installato appositamente per calcolare quanti secondi sono passati dall'inizio della pressione del pulsante che il risultato che ottengo non rispecchia quello che dovrebbe essere...(per esempio faccio 15 lampeggi ma me ne conta meno) il problema si presenta solo sui tempi lunghi...
qualche consiglio o cmq qualche errore che sto commettendo di cui non mi sto rendendo conto!?
il codice completo è lo stesso che si trova in questo topic(se non per la parte di gestione della pioggia... ma questo centra poco con il problema)
buttonPICCOLA = digitalRead(BUTTONPICCOLA);
if (buttonPICCOLA == LOW && cambiopulsantePICCOLA == 0 ) {
cambiopulsantePICCOLA = 1;
conteggioseconditendapiccola = millis();
}
if (buttonPICCOLA == LOW && cambiopulsantePICCOLA == 1) {
if (((millis() - conteggioseconditendapiccola) < 30000) && accensionespegnimentoLEDpiccola == false) {
accensioneLEDpiccola = millis();
digitalWrite (LED, HIGH );
accensionespegnimentoLEDpiccola = true;
}
if ((millis() - accensioneLEDpiccola) > 1000) {
if ((digitalRead(LED) == HIGH ) && accensionespegnimentoLEDpiccola == true) {
digitalWrite (LED, LOW );
accensionespegnimentoLEDpiccola = false;
}
}
}
if (buttonPICCOLA == HIGH && cambiopulsantePICCOLA == 1 && (((millis() - conteggioseconditendapiccola) >= 1000) && ((millis() - conteggioseconditendapiccola) <= 1999)) ) {
stato_pulsantePICCOLA = 1;
digitalWrite (LED, LOW );
accensionespegnimentoLEDpiccola = false;
cambiopulsantePICCOLA = 0;
}
if (buttonPICCOLA == HIGH && cambiopulsantePICCOLA == 1 && (((millis() - conteggioseconditendapiccola) >= 2000) && ((millis() - conteggioseconditendapiccola) <= 2999))) {
stato_pulsantePICCOLA = 0;
digitalWrite (LED, LOW );
accensionespegnimentoLEDpiccola = false;
cambiopulsantePICCOLA = 0;
}
if (buttonPICCOLA == HIGH && cambiopulsantePICCOLA == 1 && (((millis() - conteggioseconditendapiccola) >= 3000) && ((millis() - conteggioseconditendapiccola) <= 4999))) {
count_chiusureSX = 0;
count_chiusureCENTRO = 0;
count_chiusurePICCOLA = 0;
verificariavvioWD = true;
count_problemibme = 0;
lcd.setCursor(13, 1); campovuoto();
lcd.setCursor(12, 1); campovuoto();
digitalWrite (LED, LOW );
accensionespegnimentoLEDpiccola = false;
cambiopulsantePICCOLA = 0;
}
if (buttonPICCOLA == HIGH && cambiopulsantePICCOLA == 1 && (((millis() - conteggioseconditendapiccola) >= 5000) && ((millis() - conteggioseconditendapiccola) <= 7999))) {
ricordavalorestatopioggia = 0;
attiva_ricordavalorestatopioggia = false;
digitalWrite (LED, LOW );
accensionespegnimentoLEDpiccola = false;
cambiopulsantePICCOLA = 0;
}
if (buttonPICCOLA == HIGH && cambiopulsantePICCOLA == 1 && (((millis() - conteggioseconditendapiccola) >= 8000) && ((millis() - conteggioseconditendapiccola) <= 10999))) {
CHIUDITENDAGRANDESX = true;
CHIUDITENDAGRANDECENTRO = true;
digitalWrite (LED, LOW );
accensionespegnimentoLEDpiccola = false;
cambiopulsantePICCOLA = 0;
}
if (buttonPICCOLA == HIGH && cambiopulsantePICCOLA == 1 && (((millis() - conteggioseconditendapiccola) >= 11000) && ((millis() - conteggioseconditendapiccola) <= 13999))) {
CHIUDITENDAGRANDEPICCOLA = true;
digitalWrite (LED, LOW );
accensionespegnimentoLEDpiccola = false;
cambiopulsantePICCOLA = 0;
}
if (buttonPICCOLA == HIGH && cambiopulsantePICCOLA == 1 && (((millis() - conteggioseconditendapiccola) >= 14000) && ((millis() - conteggioseconditendapiccola) <= 16999))) {
stapiovendo = true;
Rotations = 50;
digitalWrite (LED, LOW );
accensionespegnimentoLEDpiccola = false;
cambiopulsantePICCOLA = 0;
}
if (buttonPICCOLA == HIGH && cambiopulsantePICCOLA == 1 && (((millis() - conteggioseconditendapiccola) >= 17000) && ((millis() - conteggioseconditendapiccola) <= 21999))) {
wdt_disable();
connessioneinternet();
digitalWrite (LED, LOW );
accensionespegnimentoLEDpiccola = false;
cambiopulsantePICCOLA = 0;
wdt_enable(WDTO_8S);
}
if (buttonPICCOLA == HIGH && cambiopulsantePICCOLA == 1 && ((millis() - conteggioseconditendapiccola) >= 22000)) {
avvio_ventola_per_check = true;
digitalWrite (LED, LOW );
accensionespegnimentoLEDpiccola = false;
cambiopulsantePICCOLA = 0;
}