Puso:
mi da errore....ho fatto copia incolla
Molti esempi danno per scontato che determinati nomi presenti nel codice sono variabili o costanti che vanno definite da altre parti. In particolare previousMillis e ledState sono due variabili globali da definire all'inizio del programma, e ledPin è una costante, che va sempre definita in precedenza. Gli errori del compilatore dovrebbero permettere di capire cosa si è scritto in modo errato e in quale riga.
Quella è comunque la via giusta, il loop cicla continuamente alla massima velocità e testa continuamente il verificarsi di qualche condizione. Solo nell'istante in cui una condizione risulta vera allora si esegue quanto contenuto nell'if (e le operazioni da eseguire a loro volta non devono bloccare o durare molto tempo).
Fare uno schema a relè/temporizzatori/pulsanti "classici", tradurlo in funzioni logiche equivalenti potrei anche riusirci,resta il fatto che il LOOP,legge le righe in fila ed una volta che è partito non posso aggiungere o toglier niente.
Non ho capito cosa intendi con aggiungere/togliere. Lo schema seguente è un classico marcia/arresto, con in più un timer per l'arresto dopo tot (facciamo 5 minuti):
Questo è un esempio di istruzioni da mettere nella funzione loop, che rappresentano pari pari il circuito:
byte STA = digitalRead(STA_PIN);
byte STO = digitalRead(STO_PIN);
A = (A | STA) & !T1out & !STO;
if (!A) { T1time=millis(); T1out=0; } else if (millis() - T1time >= 300000) T1out = 1;
digitalWrite(OUT_PIN, A);
NOTA: si assume che i pulsanti premuti diano un 1 in lettura, e che la luce si accenda con un 1 in scrittura
NOTA2: STA_PIN, STO_PIN, OUT_PIN, sono costanti che indicano i pin usati, mentre A, T1time, T1out, sono variabili di lavoro definite in precedenza:
#define STA_PIN 2
#define STO_PIN 3
#define OUT_PIN 4
byte A = 0;
byte T1out = 0;
unsigned long T1time = millis();
Nonostante il tempo del processo timer sia di cinque minuti (300mila ms), il loop gira alla massima velocità e i pulsanti vengono letti continuamente (ad occhio almeno diecimila volte al secondo).
NOTA3: in un circuito reale con pulsanti/contatti meccanici bisogna anche effettuare il debounce (filtro antirimbalzo) degli ingressi.