Hallo zusammen

Bin ein Neuling und ersuche euch um Rat
Es geht um die Kommunikation zwischen Arduino Uno und einem iRobot Roomba
Das Forum habe ich schon durchsucht, leider keine Infos gefunden.

Folgender Stand meiner Arbeit.
> Die Hardware steht und das Serielle Kabel, ist mit der DIN Buchse des Roomba aud die PINs 0(RX), 1(TX) und 2(Baud) überführt.
> Da dies alles neu für mich ist, habe ich mal gegoogelt und folgendes Demoprogramm auf hackingroomba.com gefunden:

Code:
int rxPin = 0;
int txPin = 1;
int ddPin = 2;
int ledPin = 13;
char sensorbytes[10];

#define bumpright (sensorbytes[0] & 0x01)
#define bumpleft  (sensorbytes[0] & 0x02)

void setup() {
//  pinMode(txPin,  OUTPUT);
  pinMode(ddPin,  OUTPUT);   
  pinMode(ledPin, OUTPUT);   
  Serial.begin(57600);

  digitalWrite(ledPin, HIGH);

  // startet den Roboter
  digitalWrite(ddPin, HIGH);
  delay(100);
  digitalWrite(ddPin, LOW);
  delay(500);
  digitalWrite(ddPin, HIGH);
  delay(2000);
  // das ROI, Befehle zu empfangen
  Serial.print(128, BYTE);  
  delay(50);
  Serial.print(130, BYTE);  
  delay(50);
  digitalWrite(ledPin, LOW);  
}

void loop() {
  digitalWrite(ledPin, HIGH); 
  updateSensors();
  digitalWrite(ledPin, LOW);  
  if(bumpleft) {
    spinRight();
    delay(1000);
  }
  else if(bumpright) {
    spinLeft();
    delay(1000);
  }
  goForward();
}

void goForward() {
  Serial.print(137, BYTE);   // DRIVE
  Serial.print(0x00,BYTE);   // 0x00c8 == 200
  Serial.print(0xc8,BYTE);
  Serial.print(0x80,BYTE);
  Serial.print(0x00,BYTE);
}
void goBackward() {
  Serial.print(137, BYTE);   // DRIVE
  Serial.print(0xff,BYTE);   // 0xff38 == -200
  Serial.print(0x38,BYTE);
  Serial.print(0x80,BYTE);
  Serial.print(0x00,BYTE);
}
void spinLeft() {
  Serial.print(137, BYTE);   // DRIVE
  Serial.print(0x00,BYTE);   // 0x00c8 == 200
  Serial.print(0xc8,BYTE);
  Serial.print(0x00,BYTE);
  Serial.print(0x01,BYTE);   // 0x0001 == spin left
}
void spinRight() {
  Serial.print(137, BYTE);   // DRIVE
  Serial.print(0x00,BYTE);   // 0x00c8 == 200
  Serial.print(0xc8,BYTE);
  Serial.print(0xff,BYTE);
  Serial.print(0xff,BYTE);   // 0xffff == -1 == spin right
}
void updateSensors() {
  Serial.print(142, BYTE);
  Serial.print(1,   BYTE);  
  delay(100); // wait for sensors 
  char i = 0;
  while(Serial.available()) {
    int c = Serial.read();
    if( c==-1 ) {
      for( int i=0; i<5; i ++ ) {   
        digitalWrite(ledPin, HIGH); 
        delay(50);
        digitalWrite(ledPin, LOW);  
        delay(50);
      }
    }
    sensorbytes[i++] = c;
  }    
}

Da aber die Bibliothek nicht mehr unterstützt wird, musste „ serial.print (var, BYTE);“ zu „serial.write (var);“ geändert werden. Zudem habe ich statt den Protokollen, Variabeln eingesetzt, das der Datentyp keine „=“ zulässt.
Hier die geänderte Version:

Code:
int rxPin = 0;
int txPin = 1;
int ddPin = 2;
int ledPin = 13;
char sensorbytes[10];



#define bumpright (sensorbytes[0] & 0x01)
#define bumpleft  (sensorbytes[0] & 0x02)

void setup() {
  //pinMode(txPin,  OUTPUT);
  pinMode(ddPin,  OUTPUT);   
  pinMode(ledPin, OUTPUT);   
  Serial.begin(57600);

  digitalWrite(ledPin, HIGH); 

  // startet den Roboter
  digitalWrite(ddPin, HIGH);
  delay(100);
  digitalWrite(ddPin, LOW);
  delay(500);
  digitalWrite(ddPin, HIGH);
  delay(2000);
  // das ROI, Befehle zu empfangen
  Serial.write (128); 
  delay(50);
  Serial.write(130);  
  delay(50);
  digitalWrite(ledPin, LOW);  
}

void loop() {
  digitalWrite(ledPin, HIGH); 
  updateSensors();
  digitalWrite(ledPin, LOW); 
  if(bumpleft) {
    spinRight();
    delay(1000);
  }
  else if(bumpright) {
    spinLeft();
    delay(1000);
  }
  goForward();
}

void goForward() {
int a=0x00;
int b=0xc8;
int c=0x80;
int d=0xff;
int e=0x38;
int f=0x01;
  
  Serial.write(137);   // DRIVE
  Serial.write(a);   // 0x00c8 == 200
  Serial.write(b);
  Serial.write(c);
  Serial.write(a);
}
void goBackward() {
int a=0x00;
int b=0xc8;
int c=0x80;
int d=0xff;
int e=0x38;
int f=0x01;
  
  Serial.write(137);   // DRIVE
  Serial.write(d);   // 0xff38 == -200
  Serial.write(e);
  Serial.write(c);
  Serial.write(a);
}
void spinLeft() {
int a=0x00;
int b=0xc8;
int c=0x80;
int d=0xff;
int e=0x38;
int f=0x01;  
  
  Serial.write(137);   // DRIVE
  Serial.write(a);   // 0x00c8 == 200
  Serial.write(b);
  Serial.write(a);
  Serial.write(f);   // 0x0001 == spin left
}
void spinRight() {
int a=0x00;
int b=0xc8;
int c=0x80;
int d=0xff;
int e=0x38;
int f=0x01;  
  
  Serial.write(137);   // DRIVE
  Serial.write(a);   // 0x00c8 == 200
  Serial.write(b);
  Serial.write(d);
  Serial.write(d);   // 0xffff == -1 == spin right
}
void updateSensors() {
  Serial.write(142);
  Serial.write(1);  // sensor packet 1, 10 bytes
  delay(100); // wait for sensors 
  char i = 0;
  while(Serial.available()) {
    int c = Serial.read();
    if( c==-1 ) {
      for( int i=0; i<5; i ++ ) {   
        digitalWrite(ledPin, HIGH); 
        delay(50);
        digitalWrite(ledPin, LOW);  
        delay(50);
      }
    }
    sensorbytes[i++] = c;
  }    
}

Leider habe ich noch keinen Erfolg damit
Kann mir da jemand Weiterhelfen?

Vielen Dank

Mike10