diff --git a/roomba/roomba.ino b/roomba/roomba.ino new file mode 100644 index 0000000..e4f73d2 --- /dev/null +++ b/roomba/roomba.ino @@ -0,0 +1,90 @@ +#include + + + +MeDCMotor motorL(M1); //positive go backward + +MeDCMotor motorR(M2); //positive go forward + +MeUltrasonicSensor ultraSensor(PORT_3); + +uint8_t motorSpeed = 255; +bool turning = false; +unsigned long turnTimer = 0; +int ranMin = 200;//in ms +int ranMax = 2000; +unsigned long turnTimerDuration = random(ranMin, ranMax); +bool directionLeft = true; +int MinDistance = 20;//in cm + +/* + * if turning, keep turning until turn timer is over and kill turning + * if not turning, check sensor and carry on moving forward + * if sensor within threshold, set turn timer random, direction random, set turning + * + * + */ + +void setup() +{ + Serial.begin(9600); +} + +void loop() +{ + if (turning){ + //timercheck + if(millis()- turnTimer >= turnTimerDuration){ + //reset timer + turning = false; + motorL.run(-motorSpeed); + motorR.run(motorSpeed); + }else{ + //keep on turning + } + }else{ + //not turning + if(ultraSensor.distanceCm() < MinDistance)//sensorcheck + { + turnTimerDuration = random(ranMin, ranMax); + directionLeft = random(2); + + if(directionLeft){ + motorL.run(motorSpeed); + motorR.run(motorSpeed); + }else{ + motorL.run(-motorSpeed); + motorR.run(-motorSpeed); + } + + turning = true; + turnTimer = millis(); + } + + + } + + /* + Serial.print("Distance : "); + Serial.print(ultraSensor.distanceCm() ); + Serial.println(" cm"); + //delay(100);//docs say at least that timer + */ + /*motorL.run(motorSpeed); // value: between -255 and 255. + /motorR.run(motorSpeed); // value: between -255 and 255. + + delay(2000); + motorL.stop(); + motorR.stop(); + + delay(100); + motorL.run(-motorSpeed); + motorR.run(-motorSpeed); + + delay(2000); + motorL.stop(); + motorR.stop(); + + delay(2000); + */ +}