diciamo che un motore lo piloti con un dispositivo collegato ad un pin di arduino.
Se l'uscita è alta il motore parte e se l'uscita è bassa il motore di ferma.
Per attivare e disattivare usi digitalWrite(pin, value);
in testa al programma puoi definire una cosa del tipo:
#define MOTORE 3 // Pin che comanda il motore
#define ACCESO HIGH // Giusto per non incasinarsi con HIGH e LOW
#define SPENTO LOW
nel loop, opportunamente temporizzati metti
digitalWrite(MOTORE, ACCESO);
e
digitalWrite(MOTORE, SPENTO);
Per temporizzare puoi crearti un array dove indicare il tempo che deve trascorrere prima di cambiare lo stato del motore.
byte tempi[]={5,1,2,10,1,10};
Alla fine le due definizioni ACCESO e SPENTO potrebbero anche non servire.
Definisci una variabile globale da usare come l'indice di scorrimento dell'array dei tempi.
byte indice = 0;
Nel loop usando millis, fai una cosa del genere
void loop() {
if (millis() - lastMillis > tempi[indice] * 1000) {
digitalWrite(MOTORE, !digitalRead(MOTORE)); // Inverte il valore dell'uscita
indice++; // Incremento l'indice dell'array così al prossimo giro leggo il valore successivo.
lastMillis = millis(); // Resetto il riferimento per iniziare a contare il nuovo intervallo
}
}
Ho omesso un po' di cose perchè quanto ho scritto ti deve servire come spunto, perchè se dovevo scriverti proprio tutto io...
Ad es. ho omesso la definizione di lastMillis che è un unsigned long e la sua inizializzazione, il controllo per non sforare la dimensione dell'array, parti per attivare la sequenza a comando, ecc.
Spero di averti un po' inquadrato la questione, poi prova a mettere insieme tu il programma definitivo e vedi se ti capisci, in caso contrario chiedi pure.
Maurizio