Buonasera a tutti!
Premetto che il sistema è basato su un Arduino Yun.
Sto cercando di creare un software il quale, dopo essersi verificato un evento si ferma entrando in un loop infinito (il classico for( ; ; ){}, per intenderci) attendendo il reset manuale.
il mio codice è questo:
int vacuum1, vacuum2;
void setup() {
Serial.begin(9600);
}
void loop() {
vacuum1 = map(analogRead(A1), 0, 1023, 1023, 0);
vacuum2 = map(analogRead(A2), 0, 1023, 1023, 0);
Serial.print("vacuum1: "); Serial.print(vacuum1);
Serial.print(" ");
Serial.print("vacuum2: "); Serial.print(vacuum2);
Serial.println();
if(vacuum1 > 100 && vacuum2 < 100){
Serial.print("HO SCRITTO NELLA EEPROM ERRORE 1!");
OrangeAlarm();
}
if(vacuum1 < 100 && vacuum2 > 100){
Serial.print("HO SCRITTO NELLA EEPROM ERRORE 2!");
OrangeAlarm();
}
if(vacuum1 > 100 && vacuum2 > 100){
Serial.print("HO SCRITTO NELLA EEPROM ERRORE 3!");
OrangeAlarm();
}
}
void OrangeAlarm(){
for(;;){
Serial.println("ho fermato i relay");
}
}
In sostanza il software dovrebbe leggere 2 livelli analogici e in caso che uno e/o l'altro superi il livello stabilito scrive provvisoriamente sulla seriale il numero del problema in base al quale ne capisco il tipo. Successivamente ho fatto una chiamata a funzione che dovrebbe spegnere un relay (provvisoriamente ho sostituito l'azione con un messaggio seriale) e entrare in un loop infinito affinché non avviene il reset manuale del controllore dall'apposito pulsante o scollegandolo dall'alimentazione.
il problema non sussiste se il sistema parte con condizioni analogiche inferiori al livello stabilito, mentre se invece simulo la partenza del sistema con i livelli analogici superiori a quelli consentiti, il programma va direttamente al loop infinito saltando tutta la parte di codice soprastante (i serial.print per intenderci).
Ho provato con varie forme di loop, come il sopracitato for vuoto, il while(1), e anche con una label e un goto label ma in nessun caso ho ottenuto i risultati sperati.
Sembra proprio che arduino sappia già che al partire con i livelli analogici superiori a quelli consentiti, entri già nel loop infinito saltando tutto il codice precedente.
Vi ringrazio per la vostra attenzione, a presto!!
