#include "rover.h"
#include "Servo.h"
-#define dEBUG
int rotPausa = 500; // Pausa per una rotazione di ~90'
void setup()
{
abilita();
-#ifdef DEBUG
- Serial.begin(9600);
- Serial.println("Attivazione sketch");
-#endif
}
delay(10); // Movimento minimo, per stabilizzare
// l'input del sensore
if (distanceCheck()) {
-#ifdef DEBUG
-Serial.println("\t ###### Ostacolo! ######");
-#endif
stato = check ;
}
// Inversione
servoMiddle();
stato = inversione ;
-#ifdef DEBUG
-Serial.print("Stato: ");
-Serial.println(stato);
-#endif
break;
case sx:
-#ifdef DEBUG
-Serial.print("Stato: ");
-Serial.println(stato);
-#endif
giraSX();
delay(giroPausa);
stato = forward ;
break;
case dx:
-#ifdef DEBUG
-Serial.print("Stato: ");
-Serial.println(stato);
-#endif
giraDX();
delay(giroPausa);
stato = forward ;
break;
case inversione:
-#ifdef DEBUG
-Serial.print("Stato: ");
-Serial.println(stato);
-#endif
stop();
indietro(); // Why not? :)
delay(giroPausa * 1);
break;
}
-#ifdef DEBUG
-//Serial.print("Stato: ");
-//Serial.println(stato);
-//Serial.print("Distanza: ");
-//Serial.println(distanceMonitor());
-#endif
}
--- /dev/null
+/* FSM Base
+
+Prototipo rozzo per il movimento utilizzando le funzioni
+di base della libreria Rover e una FSM.
+
+
+Schema: https://lab.piffa.net/schemi/2wd_car_bb.png
+Codice: http://git.andreamanni.com/web?p=rove
+
+*/
+
+
+#include "rover.h"
+#include "Servo.h"
+#define dEBUG
+
+int rotPausa = 500; // Pausa per una rotazione di ~90'
+
+void setup()
+{
+ abilita();
+#ifdef DEBUG
+ Serial.begin(9600);
+ Serial.println("Attivazione sketch");
+#endif
+}
+
+
+// FSM
+enum { // Stati della FMS
+ forward,
+ check, // Cerca percorso libero
+ sx, // sx
+ dx, // dx
+ ferma,
+ inversione
+} stato = forward;
+
+const int giroPausa = 630 ; // Tempo necessario per rotazione
+void loop()
+{
+ switch (stato) {
+ case forward:
+ servoMiddle();
+ avanti();
+ delay(10); // Movimento minimo, per stabilizzare
+ // l'input del sensore
+ if (distanceCheck()) {
+#ifdef DEBUG
+Serial.println("\t ###### Ostacolo! ######");
+#endif
+ stato = check ;
+ }
+
+ break;
+
+ case check:
+ if (!distanceCheck()) {
+ stato = forward ;
+ break;
+ }
+ stop();
+// check dx
+ servoDX();
+ if (!distanceCheck()) {
+ stato = dx ;
+ servoMiddle();
+ break;
+ }
+
+// check sx
+ servoSX();
+ if (!distanceCheck()) {
+ stato = sx ;
+ servoMiddle();
+ break;
+ }
+// Inversione
+ servoMiddle();
+ stato = inversione ;
+#ifdef DEBUG
+Serial.print("Stato: ");
+Serial.println(stato);
+#endif
+ break;
+
+ case sx:
+#ifdef DEBUG
+Serial.print("Stato: ");
+Serial.println(stato);
+#endif
+ giraSX();
+ delay(giroPausa);
+ stato = forward ;
+ break;
+
+ case dx:
+#ifdef DEBUG
+Serial.print("Stato: ");
+Serial.println(stato);
+#endif
+ giraDX();
+ delay(giroPausa);
+ stato = forward ;
+ break;
+
+ case ferma:
+ stop();
+ delay(1000);
+ stato = check ;
+ break;
+
+ case inversione:
+#ifdef DEBUG
+Serial.print("Stato: ");
+Serial.println(stato);
+#endif
+ stop();
+ indietro(); // Why not? :)
+ delay(giroPausa * 1);
+ giraDX();
+ delay(giroPausa * 3);
+ stato = check ;
+ break;
+
+ default:
+ stop();
+ delay(2000);
+ stato = check ;
+ break;
+ }
+
+#ifdef DEBUG
+//Serial.print("Stato: ");
+//Serial.println(stato);
+//Serial.print("Distanza: ");
+//Serial.println(distanceMonitor());
+#endif
+}
+++ /dev/null
-/* FSM Base
-
-Prototipo rozzo per il movimento utilizzando le funzioni
-di base della libreria Rover e una FSM.
-
-
-Schema: https://lab.piffa.net/schemi/2wd_car_bb.png
-Codice: http://git.andreamanni.com/web?p=rove
-
-*/
-
-
-#include "rover.h"
-#include "Servo.h"
-
-int rotPausa = 500; // Pausa per una rotazione di ~90'
-
-void setup()
-{
- abilita();
- servoMiddle();
-}
-
-
-// FSM
-enum { // Stati della FMS
- forward,
- check, // Cerca percorso libero
- sx, // sx
- dx, // dx
- ferma,
- inversione
-} stato = forward;
-
-const int giroPausa = 500 ; // Tempo necessario per rotazione
-void loop()
-{
- switch (stato) {
- case forward:
- servoMiddle();
- avanti();
- delay(50); // Movimento minimo, per stabilizzare
- // l'input del sensore
- if (distanceCheck()) {
- stato == check ;
- }
-
- break;
-
- case check:
- if (!distanceCheck()) {
- stato == forward ;
- break;
- }
- stop();
-// check dx
- servoDX();
- if (!distanceCheck()) {
- stato == dx ;
- servoMiddle();
- break;
- }
-
-// check sx
- servoSX();
- if (!distanceCheck()) {
- stato == sx ;
- servoMiddle();
- break;
- }
-// Inversione
- servoMiddle();
- stato == inversione ;
- break;
-
- case sx:
- giraSX();
- delay(giroPausa);
- break;
-
- case dx:
- giraDX();
- delay(giroPausa);
- break;
-
- case ferma:
- stop();
- delay(1000);
- stato == check ;
- break;
-
- case inversione:
- stop();
- indietro(); // Why not? :)
- delay(1000);
- delay(giroPausa * 2);
- stato == check ;
- break;
-
- default:
- stop();
- delay(2000);
- stato == check ;
- break;
- }
-}