Salve a tutti,
Sono un neofita di arduino e nonostante sia uno studente di ingegneria elettrica mi trovo qui a chiedere il vostro aiuto.
Non conosco bene i linguaggi di programmazione e i loro termini perciò mi scuso anticipatamente se alla fine il tutto dovesse rivelarsi una sciocchezza.
Il problema è il seguente:
Ho un recipiente con 4 sensori, posti ad altezze diverse, per controllare il livello del liquido che fluisce all'interno del contenitore.
Dai sensori ricevo un segnale analogico.
Appena il liquido raggiunge la sonda 4(la più bassa) inizia il conteggio dei tempi.
Appena il liquido arriverà alla sonda 3 dovrò memorizzare il tempo che è trascorso dal punto 4 al punto 3.
Così sarà per tutte le sonde, sempre riferendosi al punto di partenza 4(4-2 e 4-1).
Arrivato al punto 1 il liquido smetterà di fluire nel contenitore e i tempi rilevati dovranno essere memorizzati e scritti su un lcd.
Riporto di seguito la mia soluzione, so che è sbagliata per un mio errore di comprensione della funzione millis(), in quanto pensavo che essa iniziasse il conteggio solamente dopo che si fosse entrati nel ciclo in cui è posta (se così fosse non avrei nessun problema).
void loop() {
tempo = millis();
const int BOTTON_Start_State = digitalRead (Start);
const int BOTTON_Print_State = digitalRead (Print);
if (digitalRead (Start) == HIGH && enable_print == 0);{ // Verifico il pulsante di start
digitalWrite (Ele_V, HIGH); // Attivo l'elettrovalvola e il liquido fluisce nel contenitore
enable_time = 1;
enable_print = 0;
}
if (digitalRead (Print) == HIGH && enable_time == 0 );{ // Verifico il comando di print-stop
digitalWrite (Ele_V, LOW);
enable_time = 0;
enable_print = 1;
}
while ((analogRead (sonda4) >= 1000) && (enable_time == 1)){ // Ciclo raccolta tempi
T3 = (millis()-tempo)/1000;
if (digitalRead (Print) == HIGH);{
enable_time = 0;
}
if (analogRead (sonda3) >= 900){
T2 = (millis()-T3)/1000;
if (analogRead (sonda2) >= 900){
T1 = (millis()-T2)/1000;;
if (analogRead (sonda1) >= 900){
digitalWrite (Ele_V, LOW);
enable_time = 0;
}
}
}
lcd.setCursor(4, 1);
lcd.print("T1 =");
lcd.setCursor(10, 1);
lcd.print(T1/1000);
lcd.setCursor(0, 2);
lcd.print("T2 =");
lcd.setCursor(6, 2);
lcd.print(T2/1000);
lcd.setCursor(0, 3);
lcd.print("T3 =");
lcd.setCursor(6, 3);
lcd.print(T3/1000);
}
Ringrazio fin da ora tutti quelli che avranno la pazienza di aiutarmi.
Damiano
Edit by mod: Per favore includi il codice usando l'apposito tag code (pulsante "#")