Ciao a tutti, premetto che prima di rivolgermi qui ho cercato é letto molto riguardo al mio problema.
Spero di non averlo fatto male
Ho preparato hardware (ESP8266 - NomdeMCU) e sketch per gestire alcne automazioni garage
La funzione che mi da noie é, al premere di un pulsante il led resta acceso per X tempo impostato nella variabile (millis e non delay)
Funziona tutto OK, ma da quando ho introdotto la funzione di un countdown la luce del LED non rimane più fissa mentre il countdown conta.
Mi pare che durante lo scorrere dei millis ci sia una interferenza come delle impercettibile interruzioni di tensione sul pin out che generano questo blynk talmente veloce che sembra uno sfarfallio
Se elimino il countdown nessun problema
Ho anche provato in uscita sul pin ad utilizzare un fotoaccoppiatore ma il risultato é naturalmente identico
Qui di seguuito parte del codice
Grazie per un aiuto
void setup()
{
// Debug console
Serial.begin(9600);
Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,13), 8080);
pinMode(D1,OUTPUT); //GPIO5
pinMode(D2,OUTPUT); //GPIO4
pinMode(D3,OUTPUT); //GPIO0
pinMode(2,INPUT_PULLUP); //GPIO2 modificato
pinMode(13,OUTPUT);
pinMode(12,OUTPUT);
digitalWrite(D1,HIGH);
digitalWrite(D2,HIGH);
digitalWrite(D3,LOW);
//digitalWrite(D4,LOW);
digitalWrite(13,LOW);
//digitalWrite(12,LOW);
}
unsigned long t1, dt, count;
bool RUN = false;
long hold_1 = 500;
long hold_2 = 8000; // <--- inserisci il valore del tempo di HOLD TIME-OUT in millisecondi
long hours = 0;
long mins = 0;
long secs = 0;
String secs_o = ":";
String mins_o = ":";
void loop() {
dt = millis() - t1;
count = (hold_2 - dt) / 1000;
secs = count; // set the seconds remaining
mins = secs / 60; //convert seconds to minutes
if (secs < 10) {
secs_o = ":0";
}
if (mins < 10) {
mins_o = ":0";
}
if ((dt >= hold_1) && RUN) {
digitalWrite(13, HIGH);
digitalWrite(12, HIGH);
Serial.println("accendo");
Blynk.virtualWrite(V10, mins + secs_o + secs +"\r\n");
}
dt = millis() - t1;
if ((dt >= hold_2) && RUN) {
Serial.println("fine ciclo");
Blynk.virtualWrite(V10, "** ** **");
RUN = false;
}
//verifica innesco task
if (digitalRead(2)) {
t1 = millis();
Serial.println("pulsante");
delay(100);
RUN = true;
}
Blynk.run();
}