Utilizzo arduino (in realtà è un esp8266) per leggere degli impulsi provenienti da un sensore che mi indica il consumo di casa. Ogni impulso (chiudo a gnd) è 1Wh.
lo sketch è questo:
pinMode(getpulsepin, INPUT_PULLUP);
pinval = digitalRead(getpulsepin); // leggo il valore
if ((state == 1) && (pinval == 0) && (arduino_riavviato == 0)) { // punto di transizione
duration = millis() - startime; // calcola la durata della pulsazione
startime = millis(); // setta il nuovo tempo di partenza
conteggio_impulsi = conteggio_impulsi + 1;
power = 3600.0 / duration * 1000; // calcola consumo
duration3 = duration / 1000.0; //duration in seconds
if ((power > 0) && (power <= 3000)) {
SendToHS(1, power);
SendToHS(2, duration3);
KWh_giornalieri = conteggio_impulsi / 1000.0;
SendToHS(3, KWh_giornalieri);
SendToHS(4, conteggio_impulsi);
allerta = false;
} else {
// se power è > 3000
if (allerta) {
//era > 3000 anche prima
if ((millis() - tempoAllerta) > 3000) {
// sono passati più di 3 secondi
SendToHS(1, power);
SendToHS(2, duration3);
KWh_giornalieri = conteggio_impulsi / 1000.0;
SendToHS(8, KWh_giornalieri);
SendToHS(9, conteggio_impulsi);
// a questo punto non so se devi resettare il conteggio
// allerta = false; // ???
}
} else {
// è la prima volta che è > 3000
allerta = true;
tempoAllerta = millis();
}
}
}
state = pinval; // imposta lo stato uguale alla lettura del pin
Questo sketch funziona senza problemi inviando dati al mio sistema.
Ora il mio dubbio: vorrei aggiungere 5 sensori di temperatura DS18B20 i quali hanno un tempo di conversione di 750ms che bloccherebbero arduino durante questo tempo. Rischierei di perdere informazioni sugli impulsi che arrivano dal sensore di consumo.
Per ovviare, potrei utilizzare la funzione GestInt()? Questo però mi complicherebbe le cose sul lato trasmissione dati al server...
Oppure, c'è un modo per "lasciare lavorare" Arduino mentre avviene la conversione dei dati dei sensori di temperatura?
Un ESP8266 che lavora a 80MHz invece di 16MHz migliora le cose?