Come programmare ARDUINO?

Buon giorno a tutti, siccome è la prima volta che scrivo un programma per arduino che gestisce una motor shield che comanda 4 DC motors, volevo sapere come si fa ad oviare al fatto che la funzione loop in cui metto le istruzioni continua a rifare le istruzioni infinite volte?
In particolare io ho 4 DC motors collegati alla shield, io devo comandare questi motori in modo indipendente, in particolare devo ad oguno di loro dire per quanto tempo girare in un senso, per quanto tempo stare fermi e poi per quanto tempo girare nell'altro senso e poi una volta terminato il ciclo fermasi e restare fermi fino a quando non invio ad arduino dei nuovi valori di tempo. Io ho provato a scrive qualche cosa di prova ma la funzione loop continua a rifarmi le istruzioni...
Vi ringrazio
Domi_t

dunque devi imparare a lavorare a stati e senza usare le delay.
una soluzione potrebbe essere: una struttura dati "motore" che contiene:
stato del movimento attuale(stato) e tra quanto deve smettere per eseguire il prossimo comando(tempoLeft).
una stringa che contiene i comandi (es: "fermo170,destra10,sinistra5" o meglio ancora "f170d10s5")
a questo punto il loop deve solo aggiornare il tempoLeft per ogni motore, e se il tempo è scaduto eseguire il prossimo comando, eliminandolo dalla stringa.
capito? sfrutti delle variabili contatori o funzioni milli() come contatori, e il loop esegue un controllo per vedere se c'è da cambiare lo stato di qualche output

Ciao lesto, ti ringrazio delle info, ora cerco di capire come posso implementare quello che mi hai detto, appena ci sono riuscito ti faccio sapere...Poi ti volevo chiedere se è possibile per esempio tramite tastierino inviare ad arduino dei valori che poi lui utilizza nel ciclo?
Ti ringrazio
Domi_t

per il tastierino non c'è problema, arduino ide ha il serial monitor, quello da cui leggi l'output, che può leggere anche gli input. tu scrivi un numero e premi invio e l'arduino lo legge con una Serial.read() e fa le istruzioni corrispondenti.

come esempio per non usare i delay;
anzichè fare:
loop(){
led1 acceso
delay1000
led1spento
while(1);//blocca il programma per sempre
}
fai:
int stato=1
long tempo;
loop(){
if (stato == 1){
led1 acceso
tempo=millis();
}else
if (tempo +1000>millis() ){
led1 spento
stato=2
}
}

Lesto, grazie mille delle informazioni, spero di riuscire a farlo funzionare comunque ti tengo aggiornato sugli sviluppi...grazie ancora
domi_t