Eseguire due programmi contemporaneamente senza che uno interferisca con l'altro

Faccio subito un esempio:

}

//Programma 1:

void loop() {
  digitalWrite(led1, HIGH);   
  delay(1000);               
  digitalWrite(led1, LOW);    
  delay(1000);               


//Programma 2:


buttonState = digitalRead(buttonPin);

  
  if (buttonState == HIGH) {     
      
    digitalWrite(led2, HIGH);  
  } 
  
  delay(1000);
   
    digitalWrite(led2, LOW); 
  }

Questo programma normalmente fa lampeggiare il led 1, ma quando premo il pulsante si accende il led 2 e il led 1 smette di lampeggiare per il tempo che rimane acceso il led 2. Io vorrei invece che indipendentemente da cosa fa il primo programma (lampeggiare led 1)non interferisca in nessun modo con il secondo (leggere il pulsante e accendere per tot secondi). Non voglio una soluzione per questo esempio sopra, è solo una demo per farvi capire cosa voglio fare. Grazie

Dai un'occhiata all'esempio "BlinkWithoutDelay".

Come ti ha consigliato SukkoPera ... ... devi studiarti come si usa la millis() prima QUI, poi QUI ed infine leggi anche QUI e QUI ... vedrai che ti sarà tutto più chiaro ;)

Guglielmo

Ok ma quello sopra è un esempio per farvi capire cosa vorrei fare non mi interessa far lampeggiare un led vorrei solo capire se è possibile eseguire 2 programmi diversi senza che uno mi rallenti l'altro

Una volta che hai capito il metodo, puoi provarci. Vedi l'esempio che ti ho consigliato e i link che ti propone gpb.

danyevo: ... vorrei solo capire se è possibile eseguire 2 programmi diversi senza che uno mi rallenti l'altro

... presa alla lettera la tua domanda, la risposta è NO. Non sei su una macchina dove c'è un sistema operativo che gestisce task e thread quindi niente multitask né multithread. Sei su una piccola MCU che ha solo 2KBytes di SRAM e quindi ...

Se invece intendi simulare in qualche modo l'esecuzione di un pezzo e l'esecuzione di un'altro allora l'utilizzo di millis() o di librerie specializzate a fare da piccolo scheduler è la soluzione.

Guglielmo

Ok mi sono letto tutto e comincio a capire... :) Grazie mille per il supporto..

danyevo: Ok ma quello sopra è un esempio per farvi capire cosa vorrei fare non mi interessa far lampeggiare un led vorrei solo capire se è possibile eseguire 2 programmi diversi senza che uno mi rallenti l'altro

NO, non é possibile che 2 cose sul Arduino vadano in paralello senza interferire uno-l'altro.

Puó nella maggior parte dei casi puó essere scritto uno sketch che fa entrambe le cose e che possano coesistere senza interferire/ interferire piú di tanto entrambe le funzioni. È un problema da risolvere nella progettazione dello sketch e non con qualche funzionalitá misteriosa.

Ciao Uwe