piccolo veicolo

ciao a tutti ! vi spiego brevemente: sto “tentando” di realizzare un semplice veicolo azionato da un motore dc tramite sheld (dk electonic). nella parte anteriore del veicolo ho messo un pulsante collegato al pin A1 (per mancanza di pin digitatli), ed un servo al pin 2( collegato allo sterzo). Il progetto consiste nel far avanzare il veicolo fino ad un ostacolo, quando la tocca dovrebbe retrocedere di un po girare di tot gradi e ripartire. In linea di massima dovrebbe essere semplica ma non capisco dove sbaglio.
i comandi della libreria della shield sono semplici:

AF_DCMotors motor(3) indica motore collegato al terzo morsetto
motor.setSpeed(da 0 a 255) per la velocità
motor.run(fFORWARD\BACKWARD\RELEASE) per la rotazione
questo è il mio semplice sketch:

#‎include‬ <AFMotor.h>
#include <Servo.h>
Servo myservo;
AF_DCMotor motor(3);
int Bottone = A1;
int value;
void setup() {
myservo.attach(2);
motor.setSpeed(100);
}
void loop() {
analogRead(Bottone);
delay(200);
if(analogRead(Bottone)>500){
motor.run(FORWARD);
}
else{
myservo.write(70);
delay(500);
motor.run(BACKWARD);
delay(500);
myservo.write(100);
delay(500);
}
}

in esecuzione il servo continua a girare destra e sinstra di una trentina i gradi e il motore va a scatti. premendo il bottone non succede nulla. Preciso che i collegamenti sono giusti perchè se testo i vari componenti con degli sketch singolarmente funzionano…
Grazie !

Ciao,
myservo.write(70) e myservo.write(100), vanno ad indicare di assumere un angolo di 70° e un angolo di 100°,a cosa ti servono?
Il primoanalogRead(Bottone) senza associazione ad una variabile o all'interno di una condizione, a cosa ti serve?
Se clicchi il Bottone mentre sei in un delay(altissima possibilità), quindi senza possibilità di leggere valori sulle porte, come pensi di leggere lo stato, meglio utilizzare i millis().

Cmq ti consiglio di farti un pò più le ossa su altri progetti, magari dividendo il tuo progetto finale in sottoprogetti,prima di continuare, ad esempio fai uno sketch solo per la lettura analogica del pulsante e così via, sarebbe un suicidio unire già tutte le parti in un progetto unico.

Ciao
M.i.P.studio soluzioni informatiche ed elettroniche

Ciao,
in generale intanto, se colleghi un bottone ad un pin analogico, non c'è bisogno di leggerne lo stato con l'analogRead(), ma va benissimo la digitalRead(), in quanto ogni ingresso analogico può essere utilizzato esattamente come un pin digitale.

Per quanto riguarda il tuo problema io comunque opterei per un interrupt, inserendo quindi il codice per la svolta della macchinina, all'interno della funzione richiamata dall'interrupt.