Ciclo a tempo

Ciao, vengo al punto. Ho un piccolo rover che utilizza 4 motori DC, mi occorre fare in modo che da programma possa far ruotare il rover di 45 o 90 gradi. Non essendo servi, non posso utilizzare la classe servo.
Quindi, ho pensato che l'unico modo sia effettuare una rotazione per un intervallo di tempo prestabilito, per sapere di quanto al fine di raggiungere i 45-90 gradi è un discorso diverso, occorre andare per tentativi.
Quindi la domanda: come faccio ad impostare un ciclo basato su un intervallo temporale? In pratica, impostare un "per tot millisecondi fai questo". Ho controllato ma il delay blocca il programma, mi occorrerebbe qualcosa tipo la classe Timer del .NET Framework.

O al limite, qualcuno ha pensato ad un altro metodo per ruotare le ruote connesse a motori DC di toto gradi?

Grazie!

L'ideale sarebbe mettere degli encoder sul motore ma credo che non ci sia lo spazio.... :slight_smile:

Ciao, premetto che non ho mai avuto a che fare con tempi di motori e quant'altro ma, in questi casi, credo si debba utilizzare la funzione millis() per costruire dei timer.

Qui dovresti trovare qualcosa:

http://arduino.cc/playground/Code/AvoidDelay

Ciao

L' unico modo per fare una rotazione con un angolo preciso é misurare l' angolo con un modulo giroscopio per esempio un http://www.robot-italy.com/product_info.php?products_id=2586

o con un modulo bussola come http://www.robot-italy.com/product_info.php?products_id=2033 oppure http://www.robot-italy.com/product_info.php?products_id=2185

Ci sono anche modulini che uniscono il giroscopio, accelerometro e bussola http://www.robot-italy.com/product_info.php?products_id=2055 .

Il metodo di fare qualcosa per un certo tempo senza uare delay() é usare la funzione millis() e controllare se é passato un certo tempo.

Ciao Uwe

Grazie per le risposte!

Dal punto di vista software ho trovato questa libreria che può fare al caso mio.
Dato che non voglio/posso aggiungere hw ai motori, penso che adotterò una soluzione molto spartana che consiste nell'andare per tentativi giocando sul valore in ms per stabilire +/- in modo molto approssimativo come girare il robot di 45/90 gradi.
Non è il massimo ma se non si tratta di servi e senza hw aggiuntivo, c'è poco da fare...

Non comprendo perché la funzione millis() ti blocca il programma.

Comunque se vuoi un riferimento preciso ti conviene usare un timer di arduino settato per fornirti un interrupt ogni tot millesecondi.

Ettore Massimo Albani