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  ;) 


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


Arduino Forum > International > Italiano > Software (Moderator: leo72) > Problema due microswitch bumper robot


arduino

Comments

Popular posts from this blog

Valutazione Template - Joomla! Forum - community, help and support

SD Datastring Convention

First use of Arduino Uno : avrdude error on Blink uploading