Ciao a tutti, ho scritto questo piccolo codice ma blynk si disconntette usando delay. il programma continua a funzionare ma sull'app blynk mi da disconnesso.consigli?
*************************************************************/
/* Comment this out to disable prints and save space */
#define BLYNK_PRINT Serial
/* Fill-in your Template ID (only if using Blynk.Cloud) */
//#define BLYNK_TEMPLATE_ID "YourTemplateID"
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
BlynkTimer timer;
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "gudvIfJQWQmakqB8xFN2LRo16y-LiXcb";
// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "*******";
char pass[] = "*******";
int minutipersettore = 0;
int settore1 = D1;
int minutipersettoresec = 0;
void setup()
{
// Debug console
Serial.begin(9600);
//server da cambiare in base a cosa si usa
Blynk.begin(auth,ssid,pass,"iot.serangkota.go.id",8080);
}
BLYNK_WRITE(V2){
minutipersettore = param.asInt();
}
void loop()
{
minutipersettoresec = map(minutipersettore, 1, 60, 60000, 3600000);
int sensorumid = analogRead(A0);
int orario = digitalRead(D8);
Blynk.virtualWrite(V0, sensorumid);
if (sensorumid > 500 && orario == 1 ){
digitalWrite (D1, LOW);
delay ( minutipersettoresec );
digitalWrite (D1, HIGH);
digitalWrite (D2, LOW);
delay ( minutipersettoresec );
digitalWrite (D2, HIGH);
digitalWrite (D3, LOW);
delay ( minutipersettoresec );
digitalWrite (D3, HIGH);
digitalWrite (D4, LOW);
delay ( minutipersettoresec );
digitalWrite (D4, HIGH);
digitalWrite (D5, LOW);
delay ( minutipersettoresec );
digitalWrite (D5, HIGH);
digitalWrite (D6, LOW);
delay ( minutipersettoresec );
digitalWrite (D6, HIGH);
}
Serial.print(sensorumid);
Blynk.run();
}
Buonasera,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentartiIN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il succitato REGOLAMENTO ... Grazie.
Guglielmo
P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nel rispetto del suddetto regolamento nessuno ti risponderà (eventuali risposte verrebbero cancellate), quindi ti consiglio di farla al più presto.
Scherzi a parte, non conosco nel dettaglio blynk, ma immagino che ogni volta che metti un delay così lungo come fai tu, il server disconnette il client per timeout.
Al posto di delay si usa millis(), ma nel tuo caso ciò avrà conseguenze sul comportamento del programma, comportamento che non sarà quello desiderato,
Guarda l'esempio blinkwithoutdelay tra gli esempio di arduino IDE.
Prendi confidenza e familiarità con millis e il suo uso e poi studia anche come funziona lo switch case.
Purtroppo il problema è quello che ha ipotizzato @cotestatnt e cioè che la funzione Blynk.run() non viene eseguita per il tempo dato dalla somma di tutti i delay. Prova per verificare ad imporre delay di 1 secondo o meno per ogni settore.
Pultroppo mi serve azionare un relè e tenerlo acceso per minuti no secondi quindi non posso scendere il delay provo a vedere millis. Se avete altre idee resto qua
Capisco ma è solo per verificare che non si disconnetta.
In ogni caso con millis() dovrai averci averci a che fare prima o poi e non sei il primo ne l'ultimo che scopre il lato non desiderato di delay,
Se crei una Seriale Virtuale avari due pin reali che sono dedicati uno per il TX ed uno per il RX e, in tal caso, certamnete puoi andare a leggere il valore dalla seriale e poi usarlo per il valore da passare a millis(); ricorda solo che è un valore espresso in millesimi diu secondo
Si, ma la domanda non è chiara. Per adesso usi la variabile
minutipersettore, ma che valore ha, tipo 4, 10 minuti?
Es. 4 minuti in millesimi di secondo eqivale a 4 x 60000 = 240000.
PS: pin virtuale è un concetto specifico di Blynk. link
Al momento il dalay è uguale al valore del pin v2 in minuti. Se v2 è impostato a 3 sarà 3 minuti se dall'app lo imposto a 1 sarà 1 minuto. Questo dalay è il tempo in cui l'elettrovalvola sarà alimentata e quindi aperta.