Semaforo Complesso OK-Flip Flop Semplice ( e non ci salto fuori).

docsavage:
Se vogliamo replicare il funzionamento di un circuito a relè e timer elettromeccanici si può fare, ma non è così che si programma arduino

Io sono quello che ne sa meno di tutti, qui, ma vedo che la strada non è quella giusta

Torno a dire che un test su millis, che legge da un array di strutture ed esegue le istruzioni codificate è un approccio modulare, semplice, espandibile

L' OP ha detto di essere alle prime armi con la programmazione e di conoscere un po' di elettrotecnica. Gli array di strutture sono cose che secondo me arrivano tra molti mesi. D'altra parte in questo thread si è proposto di tutto, i relé simulati sono solo una delle varie possibilità, che ho usato come spunto "familiare" in quanto il punto esame in questo momento mi sembra che non sia tanto come fare qualcosa, ma come fare diverse cose contemporaneamente.

Puso:
orso
me lo riscrivi per favore la differenza tra delay e millis.....utulizzando le uscite digitali.....se no leggo solo numeri e non capisco cosa fanno

Quei numeri indicano quante volte è girato il loop principale ogni secondo trascorso. Nel primo caso la parte che scrive sulla seriale blocca tutto con delay, nel secondo no e nel loop principale si potrebbero fare altre cose "in parallelo".

Un esempio di tre LED che lampeggiano ciascuno per i fatti propri:

#define LED1_PIN  2
#define LED2_PIN  3
#define LED3_PIN  4
#define TEMPO1    500
#define TEMPO2    240
#define TEMPO3    1300


unsigned long t1 = millis();
unsigned long t2 = millis();
unsigned long t3 = millis();
unsigned long actualTime;


void setup() {
    pinMode(LED1_PIN, OUTPUT);
    pinMode(LED2_PIN, OUTPUT);
    pinMode(LED3_PIN, OUTPUT);
}


void loop() {
    actualTime = millis();
    
    if (actualTime - t1 >= TEMPO1) {
        t1 += TEMPO1;
        digitalWrite(LED1_PIN, !digitalRead(LED1_PIN));
    }

    if (actualTime - t2 >= TEMPO2) {
        t2 += TEMPO2;
        digitalWrite(LED2_PIN, !digitalRead(LED2_PIN));
    }

    if (actualTime - t3 >= TEMPO3) {
        t3 += TEMPO3;
        digitalWrite(LED3_PIN, !digitalRead(LED3_PIN));
    }
}