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







Zitieren
Lesezeichen