In attesa dei comandi seriali i servo del mio robot DIY si muovono a caso

Da poco ho realizzato un robot su ruote mossi da due servomotori a rotazione continua, il problema è che per i primi test ho usato la comunicazione seriale... Ma mentre aspetta gli ordini i motori si vuovono inspiegabilmente a caso >:( !
Non credo che sia un problema dello sketch ma credo sia dei servo...
Sketch Arduino:

#include <Servo.h>
#include <IRremote.h>

Servo myservosx;
Servo myservodx;

int RECV_PIN = 2;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup() {
  myservosx.attach(8);
  myservodx.attach(7);
  irrecv.enableIRIn(); // Start the receiver
  Serial.begin(9600);

}

void loop()
    {
    if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
    
  if (results.value == 0xE0E0A05F){
    myservosx.write(360);
    myservodx.write(0);
    Serial.println("Sto andando avanti....");
  }
  if (results.value == 0xE0E050AF){
    myservosx.write(360);
    myservodx.write(360);
    Serial.println("Sto andando a destra....");
  }
  if (results.value == 0xE0E010EF){
    myservosx.write(0);
    myservodx.write(0);
    Serial.println("Sto andando a sinistra....");
  }
  if (results.value == 0xE0E0B04F){
    myservosx.write(0);
    myservodx.write(360);
    Serial.println("Sto andando indietro....");
  }
  if (results.value == 0x1002C2D){
    digitalWrite(4, HIGH);
    Serial.println("Luce ON");
  }
  if (results.value == 0x100ACAD){
    digitalWrite(4, LOW);
  }
}

}

Grazie in anticipo per le risposte! :slight_smile: :slight_smile:

Prima di tutto, nella sezione dove avevi messo il post c'è chiaramente scritto, in grassetto, di non postare nulla ... quindi, per favore, la prossima volta presta più attenzione, poi, essendo questo il tuo primo post, ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione) e di leggere con attenzione il REGOLAMENTO ... Grazie.

Guglielmo

@fmatt stai scherzando vero ? Nello sketch che posti usi la libreria IRRemote e lavori in base ai valori spediti da un telecomendo, cosa c'entrano i comandi inviati da seriale ?

La libreria IRRemote e la servo si basano sui timer interni della MCU.
La libreria servo non la puoi cambiare, usa il timer1 su Arduino Uno e il timer5 su Mega, ma la libreria IRRemote si.
Mi pare che di base la IRRemote utilizza proprio lo stesso timer.
Devi modificare a mano delle impostazioni dentro la libreria IRRemote.

Nella cartella della IRRemote c'e' il file IRRemoteInt.h
all'inizio c'e' un #define che verifica quale MCU hai, il primo è per la mega,
la parte #else finale è per Arduino Uno: e di solito è attivo timer1, puoi usare invece timer2 spostando i commenti //

#else
 #define IR_USE_TIMER1   // tx = pin 9-10
 //#define IR_USE_TIMER2     // tx = pin 3-11
#endif

scusate mi sono sbagliato io, ma quando il mio robot riceve i comandi via IR nelle direzioni di avanti e dietro funziona ma a destra e a sinistra no, non credo che ci sia un problema con lo sketch....
Se, invece lo collego al computer funziona a meraviglia!! Credete che sia un problema della batteria, uso una 9V della Duracell.

Se, invece lo collego al computer funziona a meraviglia!!

Se per collegato al computer intendi dire che prende l'alimentazione da USB, allora si, è un problema di batteria