char sensorbytes[10]; #define trigPin 3 //definhe triger pin #define echoPin 2 //define echipin #define bumpright (sensorbytes[0] & 0x01) #define bumpleft (sensorbytes[0] & 0x02) void setup() { Serial.begin(9600); pinMode(trigPin, OUTPUT); //define trigpin as Input pinMode(echoPin, INPUT); //define echopin as Output Serial.begin(57600); Serial.print(char(128)); // START Roomba delay(50); Serial.print(char(131)); // CONTROL delay(50); } void loop() { long duration, distance; //define duration and distance as long digitalWrite(trigPin, LOW); //give a low pulse signal to trigger pin delayMicroseconds(2); //give a little delay digitalWrite(trigPin, HIGH); //give a high pulse to trigger pin delayMicroseconds(10); // give a delay digitalWrite(trigPin, LOW); // give a low pulse again duration = pulseIn(echoPin, HIGH); //digital read received echo pin to duration distance = (duration/2) / 29.1; //divided duration by 2 and multiply by 29.1 to conver to distance in cm Serial.print(distance); // serial print distance Serial.println(" cm"); //serial print units as cm delay(500); updateSensors(); //call update function if(bumpleft) { spinRight(); //call spin right function song(); //call song function } else if(bumpright) { spinLeft(); //call spin right function song(); //call song function } goforward(); //call goforward function if(distance<50) // if distance less than 50 enter loop { zero(); //call zero function jinglebells(); //calls jingle bells song } } void goforward() //goforward function { Serial.print(char(137)); // DRIVE op code 137 0 100 128 0 Serial.print(char(0)); Serial.print(char(100)); Serial.print(char(128)); Serial.print(char(0 )); } void song() //song function { Serial.print(char(128)); //starting communication with roomba Serial.print(char(131)); // putting roomba in safe mode delay(500); Serial.print(char(140)); //putting in song mode Serial.print(char(0)); Serial.print(char(3)); //op code for song 140 0 3 12 66 12 69 12 74 36 141 0 Serial.print(char(12)); Serial.print(char(66)); Serial.print(char(12)); Serial.print(char(69)); Serial.print(char(12)); Serial.print(char(74)); Serial.print(char(36)); delay(500); Serial.print(char(141)); Serial.print(char(0)); } void goBackward() //backward function { Serial.print(char(137)); // DRIVE backword 137 255 156 128 0 Serial.print(char(255)); Serial.print(char(156)); Serial.print(char(180)); Serial.print(char(0)); } void spinLeft() //spin left funtion { Serial.print(char(137)); //Op code for spinning left 137 0 200 0 1 Serial.print(char(0)); Serial.print(char(200)); Serial.print(char(0)); Serial.print(char(1)); } void spinRight() //spin right function { Serial.print(char(137)); Serial.print(char(0)); //Op code for spinning left 137 0 200 255 255 Serial.print(char(200)); Serial.print(char(255)); Serial.print(char(255)); } void zero(){ //backward function Serial.print(char(137)); // DRIVE 137 0 0 128 0 Serial.print(char(0)); Serial.print(char(0)); Serial.print(char(128)); Serial.print(char(0)); } void updateSensors() //updatesensors function { Serial.print(char(142)); //changing to sensors mode Serial.print(char(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 ++ ) { // say we had an error via the LED /*digitalWrite(ledPin, HIGH); // we can put an led to show the eriir delay(50); digitalWrite(ledPin, LOW); delay(50);*/ } } sensorbytes[i++] = c; } }