Problema due microswitch bumper robot
buongiorno tutti. sto costruendo un piccolo robot 4 ruote motrici, ogni ruota è azionata da un motore. ho posizionato due bumper su lati opposti in moto che quando colpisce qualcosa inverte la direzione e comincia ad andare nel verso opposto. ogni bumper è collegato due microswitc.
da qui il problema se colpisce un ostacolo e si schiaccia un solo switch tutto posto se invece l'ostacolo schiaccia entrambi gli switch il robottino continua ad andare avanti. suppongo che sia una cosa smplice ma io non riesco risolvere il problema. se qualcuno riuscisse risolvere il problema mi farebbe un grande favore. grazie mille.
il codice è più corto di quanto sembra
da qui il problema se colpisce un ostacolo e si schiaccia un solo switch tutto posto se invece l'ostacolo schiaccia entrambi gli switch il robottino continua ad andare avanti. suppongo che sia una cosa smplice ma io non riesco risolvere il problema. se qualcuno riuscisse risolvere il problema mi farebbe un grande favore. grazie mille.
il codice è più corto di quanto sembra
code: [select]
#define dir_1 46
#define pwm_1 3
#define dir_2 47
#define pwm_2 2
#define ant1 23
#define ant2 25
#define post1 22
#define post2 24
int val1 = 0;
int vval1 = 0;
int val2 = 0;
int vval2 = 0; //pwmmax 256
int val3 = 0;
int vval3 = 0;
int val4 = 0;
int vval4 = 0;
int stato1 = 0;
byte speed = 50;
void setup() {
serial.begin(9600);
pinmode(ant1, input);
pinmode(ant2, input);
pinmode(post2, input);
pinmode(post1, input);
pinmode(pwm_1,output);
pinmode(dir_1,output);
pinmode(pwm_2,output);
pinmode(dir_2,output);
}
void loop() {
val1 = digitalread(ant1);
val2 = digitalread (ant2);
val3 = digitalread (post1);
val4 = digitalread (post2);
//switch1
if ((val1 == high) && (vval1 == low)){
stato1 = 1 - stato1;
delay(15);
// attesa di 15 millisecondi
}
vval1 = val1; // ricordiamo il valore precedente di val
if (stato1 == 1) {
digitalwrite(dir_1,low);
digitalwrite(dir_2,high);
analogwrite(pwm_1,speed);
analogwrite(pwm_2,speed);
}
else {
digitalwrite(dir_1,high);
digitalwrite(dir_2,low);
analogwrite(pwm_1,speed);
analogwrite(pwm_2,speed);
}
//switch2
if ((val2 == high) && (vval2 == low)){
stato1 = 1 - stato1;
delay(15); // attesa di 15 millisecondi
}
vval2 = val2; // ricordiamo il valore precedente di val
if (stato1 == 1) {
digitalwrite(dir_1,low);
digitalwrite(dir_2,high);
analogwrite(pwm_1,speed);
analogwrite(pwm_2,speed);
}
else {
digitalwrite(dir_1,high);
digitalwrite(dir_2,low);
analogwrite(pwm_1,speed);
analogwrite(pwm_2,speed);
}
//switch3
if ((val3 == high) && (vval3 == low)){
stato1 = 1 - stato1;
delay(15); // attesa di 15 millisecondi
}
vval3 = val3; // ricordiamo il valore precedente di val
if (stato1 == 1) {
digitalwrite(dir_1,low);
digitalwrite(dir_2,high);
analogwrite(pwm_1,speed);
analogwrite(pwm_2,speed);
}
else {
digitalwrite(dir_1,high);
digitalwrite(dir_2,low);
analogwrite(pwm_1,speed);
analogwrite(pwm_2,speed);
}
//switch4
if ((val4 == high) && (vval4 == low)){
stato1 = 1 - stato1;
delay(15); // attesa di 15 millisecondi
}
vval4 = val4; // ricordiamo il valore precedente di val
if (stato1 == 1) {
digitalwrite(dir_1,low);
digitalwrite(dir_2,high);
analogwrite(pwm_1,speed);
analogwrite(pwm_2,speed);
}
else {
digitalwrite(dir_1,high);
digitalwrite(dir_2,low);
analogwrite(pwm_1,speed);
analogwrite(pwm_2,speed);
}
}
probabilmente ogni switch è indipendente (bump destro e sinistro): ci fai vedere il link del bumper?
comunque, dal punto di vista software devi controllare contemporaneamente due switch e non uno alla volta.
una cosa del tipo:
if (val1 == high || val2 == high) ... // se uno dei due si attiva allora inverti direzione
comunque, dal punto di vista software devi controllare contemporaneamente due switch e non uno alla volta.
una cosa del tipo:
if (val1 == high || val2 == high) ... // se uno dei due si attiva allora inverti direzione
Arduino Forum > International > Italiano > Software (Moderator: leo72) > Problema due microswitch bumper robot
arduino
Comments
Post a Comment