Sono ancora alle prese con il mio sistemino di automazione casa ed aggiornando la parte di gestione dei consumi, mi sono imbattuto in un piccolo problemino legato probabilmente alla logica di ragionamento per identificare i decimali.
Questo è il mio codice che funziona perfettamente verificando i dati via seriale:
// Pin impulso
const int getpulsepin = 2;
// variabili
int assorbimento = 0;
unsigned long startime = 0;
unsigned long durata = 0;
int stato = 0;
int pinval = 0;
void setup() {
Serial.begin(9600);
pinMode(getpulsepin, INPUT); // pin del sensore
digitalWrite (getpulsepin, HIGH);//abilito resistenza pull up
}
void loop() {
pinval = digitalRead(getpulsepin); // legge il pin del sensore
if ((stato == 1) & (pinval == 0)) { // punto di transizione
durata = millis() - startime; // calcola la durata della pulsazione
startime = millis(); // setta il nuovo tempo di partenza
assorbimento = 3600.0/durata*1000; // calcola consumo
//SendToHS(1,assorbimento);
Serial.print("Assorbimento");
Serial.println(assorbimento);
Serial.print("durata millis");
Serial.println(durata);
float durata2 = durata / 1000.0;
Serial.print("durata in secondi");
Serial.println(durata2);
//SendToHS(2,durata2);
}
stato = pinval; // imposta lo stato uguale alla lettura del pin
}
Quando si tratta di inviare la durata in secondi al server, nasce appunto il problema dovuto al fatto che io invio qualcosa del tipo "3.25", mentre lui si aspetta "3,25".
Il problema non è assolutamente bloccante, il tempo che intercorre tra un impulso e l'altro è irilevante ai fini del funzionamento di tutto, era un dato che mi sarebbe piaciuto comunque avere. Ovviamente se passo il valore come intero (millisecondi) non ho alcun problema.
Come da titolo, è possibile sostituire il "." con la ","?
Grazie!