Ciao, ho un problema, in pratica dovrei passare un valore alla scheda tramite seriale, e in base a questo valore l'azione dovrebbe essere compiuta SOLO QUANDO VIENE INVIATO TALE VALORE, di seguito trovate il codice dello sketch:
// Variabili per il controllo dei motori
int E1 = 5; // Velocità motori a sinistra
int E2 = 6; // Velocità motori a destra
int M1 = 4; // Direzione motori a sinistra
int M2 = 7; // Direzione motori e destra
void sinistra(char a, char b) // Mando il rover a sinistra
{
analogWrite(E1,a); // Muovo i motori di sinistra passndo la velocità "a"
digitalWrite(M1,LOW); // La direzione dei motori di sinistra è "indietro"
analogWrite(E2,b); // Muovo i motori di destra passando la velocità "b"
digitalWrite(M2,HIGH); // La direzione dei motori di destra è "avanti"
}
void fermi(void) // Fermo il rover
{
digitalWrite(E1,LOW); // Motori a sinistra fermi
digitalWrite(E2,LOW); // Motori a destra fermi
}
void setup(void)
{
Serial.begin(9600); // Avvio la comunicazione seriale 19200
// Configuro i pin: 4, 5, 6 e 7 in output
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
}
void loop(void)
{
if (Serial.available()) // Leggo dalla porta seriale
{
char valore = Serial.read(); // Leggo il valore passato
if (valore != -1)
{
switch (valore) // Controllo il valore letto
{
case 'z':
sinistra(255, 255);
delay(3000);
fermi();
delay(5000);
break;
}
}
Serial.flush();
}
}
In pratica l'azione dovrebbe essere eseguita solo quando invio "z" sulla porta seriale, il problema sta nel fatto che l'azione viene eseguita a ciclo continuo. Ho pensato che fosse perchè ad ogni giro viene letto il buffer della seriale e vi rimane il valore "z", così ho aggiunto l'istruzione Serial.flush() per ripulirlo, ma a quanto pare non funziona.
Qualche suggerimento?