Motore che si "ferma"

Ciao a tutti, oggi mi è successa una cosa strana!
Ho montato un arduino su di una macchina telecomandata togliendo la ricevente e gestendo tutto con arduino e xbee. Tutto ok.

Da processing mando 1 quando sull’ipod premo il bottone di sinistra, 2 quando per quello di destra e 0 quando ne rilascio uno:

void oscEvent(OscMessage theOscMessage) {   

    if(theOscMessage.checkAddrPattern("/acc")==true){
      x=int((theOscMessage.get(0).floatValue()));; 
    }
    if(theOscMessage.checkAddrPattern("/push1")==true){
      if (int((theOscMessage.get(0).floatValue()))==1){
      dir=1;
      }
      if (int((theOscMessage.get(0).floatValue()))==0){
      dir=0;
      }
    }
    if(theOscMessage.checkAddrPattern("/push2")==true){
      if (int((theOscMessage.get(0).floatValue()))==1){
      dir=2;
      }
      if (int((theOscMessage.get(0).floatValue()))==0){
      dir=0;
      }
    }
     

  print(x);
  print(" ; ");
  println(dir);
 
  arduino.write(x);
  arduino.write(dir);
  

}

Lato arduino invece ho una piccola libreria fatta da me che racchiude alcune funzioni per semplificare i comandi sull’L293D:

void loop(){
  if(my.available()>0){
   val=my.read();
   delay(20);
   dir=my.read();
   val=map(val,0,180,-255,255);
   
      
   Serial.print(val);
   Serial.print(" ");
   Serial.println(dir);
   
   if (val<0){
     val*=-1;
     motore.forward(val);
   }else{
     motore.backward(val);
   }
   
   if (dir==1){
     servo.forward(255);
   }
   else if(dir==2){
     servo.backward(255);
   }
   else if(dir==0){
     servo.stop();
   }

  }
 
}

servo sarebbe un motore che sta nelle ruote anteriori

Ora, tutto sto malloppo per dire che quando voglio fare girare le ruote ci riesco, ma in maniera debole e, se messa la macchina sul pavimento, quasi impercettibile.
Se tolgo lo stop tutto funziona, ma ovviamente quando rilascio il tasto dall’ipod lo sterzo continua ad essere sempre a sinistra o a destra.

Il problema di libreria non è perchè se provo uno sketch con solo servo avanti, delay, servo indietro,delay tutto funziona.

Ho provato a mettere un Serial.println dopo lo stop per vedere quando entrava nell’if ma effettivamente ci entra solo quando rilascio il bottone

Qualche ideuzza??
Grazie in anticipo :smiley:

per caso alimenti i motori da arduino?se si arduino non eroga abbastanza potenza, se no hai collegato il GND dell'alimentazione motori a quello arduino?

lesto: per caso alimenti i motori da arduino?se si arduino non eroga abbastanza potenza, se no hai collegato il GND dell'alimentazione motori a quello arduino?

L'alimentazione la prendo da una batteria esterna e i GND sono collegati. Comunque lo sto provando a parte e così funziona:

void loop(){
  servo.forward(255);   
  delay(2000);
  servo.backward(255);  
  delay(2000);

}

Mentre così da il problema:

void loop(){
  servo.forward(255);   
  delay(2000);
  servo.stop();
  delay(2000);
  servo.backward(255);  
  delay(2000);
  servo.stop();
  delay(2000);
}[

Ora, la funzione stop() setta i 3 pin che uso per l'integrato a 0 ... perchè poi dovrebbe andarmi a modificare le successive funzioni ?

Qui la libreria

Che modulo Xbee hai usato?

Xbee pro. Ragazzi non è per essere presuntuoso ma anche se avessi problemi nella comunicazione sarebbe un'altro fatto. Come ho scritto sopra il problema si presenta comunque anche se scrivo un codice in cui c'è solo il "servo".

Ho provato a mettere un servo.forward(0) al posto dello stop() ma niente..

Ah boh, io te l'ho chiesto perchè sto disegnando un radiocomando a 2.4 ghz e non ero troppo sicuro dei moduli da usare :D

che libreria stai usando? non è la libreria servo! In teoria si usa quella per imitare l'input di una RX

@tobo sono interessato a sapere come si fa una TX/RX, in particolare mi interessa rilevare la potenza del segnale (e quindi la distanza)

Mah lesto, io mi sto ancora documentando e il progetto è in fase molto embrionale, comunque la potenza del segnale dipende dal modulo trasmittente, e sembra che gli Xbee pro arrivino in campo libero a 1 miglio cioè 1.6Km :)

No infatti non è un servo, è un motore che piloto con un L293D. Sulla macchina c'è una meccanica che fa si che quando il motore gira a destra lo sterzo è tutto a destra e viceversa.

La libreria l'ho fatta io e racchiude delle semplici funzioni che avrei potuto mettere anche nello sketch ma per comodità non l'ho fatto. Comunque scusami Tobo, i moduli sono questi e li uso con questi adattatori che posso montare anche sulla breadboard e collegare rx e tx ad arduino

EDIT:Lesto per la potenza segnale tra due xbee devi fare riferimento al pin RSSI..dovrebbe essere il 6 se non ricordo male. Comunque qui c'è un topic aperto da me che però rimane senza una precisa risposta. Se non necessiti averla da codice la puoi guardare da X-CTU