Arduino YUN non esegue parte di codice

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!!

Arduino Yún è l'insieme di due cose ...

image

... una parte che è come un Arduino Leonardo (ATmega32U4) ed una parte Linux.

Ora, se ti vai a studiare il reference per la Serial, scopri che su Arduino Leonardo (che ha la USB nativa) DEVI aspettare che la porta sia pronta (e richiede un certo tempo), altrimenti ... ti perdi le Serial.print().

Guglielmo

Prima di tutto la ringrazio per la risposta!
Quindi se non ho capito male il problema non sta nel fatto che Arduino Yun non esegua il codice ma il tutto è relativo al tempo che richiede la seriale in questo sistema, giusto?
In caso un delay o un timer non bloccante come il millis sarebbero sufficienti a risolvere il problema?

Ma perché non studiate mai il reference?

Eppure ti ho anche dato il link esatto a cosa si deve fare ... :roll_eyes:

void setup() {
  //Initialize serial and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB
  }
}

... è chiaramente riportato.

Guglielmo

La ringrazio infinitamente per l'aiuto che mi ha dato e per il link al reference! :blush: