We have the code and i has worked a couple of times after that it goes different paths every time we run it .
this is the road: -----I------I-------I------
int rightMotorPin1 = 9;
int rightMotorPin2 = 6;
int leftMotorPin1 = 5;
int leftMotorPin2 = 3;
int leftSensorPin = 7; // black == high
int leftSensor ;
int rightSensor ;
int middleSensor;
int rightSensorPin = 4;
int middleSensorPin = 13;
int clawMotorPin1 = 2;
int clawMotorPin2 = 8;
int armMotorPin1 = 10;
int armMotorPin2 = 11;
int ultratrigPin1 = 12;
int ultraechoPin2 = 1;
long duration, inches;
int C1 = 0;
int C2 = 1;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(rightMotorPin1, OUTPUT);
pinMode(rightMotorPin2, OUTPUT);
pinMode(leftMotorPin1, OUTPUT);
pinMode(leftMotorPin2, OUTPUT);
pinMode(leftSensorPin, INPUT);
pinMode(rightSensorPin,INPUT);
pinMode(middleSensorPin, INPUT);
pinMode(clawMotorPin1, OUTPUT);
pinMode(clawMotorPin2, OUTPUT);
pinMode(armMotorPin1, OUTPUT);
pinMode(armMotorPin2, OUTPUT);
pinMode(ultratrigPin1, OUTPUT);
pinMode(ultraechoPin2, INPUT);
pinMode(12, OUTPUT);
pinMode(A0, INPUT);
}
void loop() {
sensorCheck();
//
//Serial.println(leftSensor);
//Serial.println(rightSensor);
//Serial.println(middleSensor);
while (leftSensor == LOW && middleSensor == HIGH && rightSensor == LOW )
{
driveForward(100);
Serial.println("Drive forward");
sensorCheck();
}
while (leftSensor == HIGH && middleSensor == HIGH && rightSensor == HIGH )
{
if(C1==0){
stopMoving();
Serial.println("GO FORWARD");
driveForward(100);
delay(230);
stopMoving();
delay(500);
Serial.println("STOP");
sensorCheck();
turnLeft90();
if (leftSensor == LOW && middleSensor == HIGH && rightSensor == LOW ){
Serial.println("Took turn");
driveForward(50);
delay(200);
stopMoving();
delay(500);
}
else
{
turnLeft90();
// ultraSensorcheck();
}
C1=1;
}
else if(C1==1)
{
driveForward(100);
delay(300);
sensorCheck();
Serial.println("GO STRAIGHT");
C1=2;
}
else
{
stopMoving();
Serial.println("GO FORWARD");
driveForward(100);
delay(230);
stopMoving();
delay(500);
Serial.println("STOP");
sensorCheck();
turnRight90();
Serial.println("GO RIGHT");
if (leftSensor == LOW && middleSensor == HIGH && rightSensor == LOW ){
Serial.println("Took turn");
driveForward(50);
delay(200);
stopMoving();
delay(500);
C1 = 0;
Serial.println(C1);
}
else
{
turnRight90();
// ultraSensorcheck();
}
}
}
while (leftSensor == LOW && middleSensor == LOW && rightSensor == LOW )
{
turnLeft180();
sensorCheck();
}
while (leftSensor == HIGH && middleSensor == LOW && rightSensor == HIGH )
{
stopMoving();
Serial.println("Stop");
sensorCheck();
}
while (leftSensor == HIGH && middleSensor == HIGH && rightSensor == LOW)
{
stopMoving();
//delay(10);
leftMotorBackward(170);
rightMotorForward(170);
Serial.println("Turn Left");
sensorCheck();
}
while (leftSensor == HIGH && middleSensor == LOW && rightSensor == LOW)
{
stopMoving();
//delay(10);
leftMotorBackward(170);
rightMotorForward(170);
Serial.println("turn left");
sensorCheck();
}
while (leftSensor == LOW && middleSensor == LOW && rightSensor == HIGH )
{
stopMoving();
//delay(10);
rightMotorBackward(170);
leftMotorForward(170);
Serial.println("TURN RIGHT");
sensorCheck();
}
while (leftSensor == LOW && middleSensor == HIGH && rightSensor == HIGH )
{
stopMoving();
//delay(10);
rightMotorBackward(170);
leftMotorForward(170);
Serial.println("TURN RIGHT");
sensorCheck();
}
}
void rightMotorForward(int x){
analogWrite(rightMotorPin1, x);
analogWrite(rightMotorPin2, 0);
}
void rightMotorBackward(int x){
analogWrite(rightMotorPin1, 0);
analogWrite(rightMotorPin2, x);
}
void leftMotorForward(int x){
analogWrite(leftMotorPin1, x);
analogWrite(leftMotorPin2, 0);
}
void leftMotorBackward(int x){
analogWrite(leftMotorPin1, 0);
analogWrite(leftMotorPin2, x);
}
void rotateClockwise(int x){
rightMotorBackward(x);
leftMotorForward(x);
}
void rotateCounterClockwise(int x){
rightMotorForward(x);
leftMotorBackward(x);
}
void turnLeft90(){
rotateCounterClockwise(150);
delay(600);
}
void turnLeft180(){
turnLeft90();
turnLeft90();
delay(850);
}
void turnRight90(){
rotateClockwise(150);
delay(800);
}
void rightslowDown(){
analogWrite(rightMotorPin1, 150);
analogWrite(rightMotorPin2, 0);
}
void leftslowDown(){
analogWrite(leftMotorPin1, 0);
analogWrite(leftMotorPin2, 150);
}
void rightspeedUp(){
analogWrite(rightMotorPin1, 170);
analogWrite(rightMotorPin2, 0);
}
void leftspeedUp(){
analogWrite(leftMotorPin1, 170);
analogWrite(leftMotorPin2, 0);
}
void leftStop(){
analogWrite(leftMotorPin1, 0);
analogWrite(leftMotorPin2, 0);
}
void rightStop(){
analogWrite(rightMotorPin1, 0);
analogWrite(rightMotorPin2, 0);
}
void grabCup(){
stopMoving();
openClaw();
driveForward(50);
delay(500);
stopMoving();
closeClaw();
}
void openClaw(){
analogWrite(clawMotorPin1, 0);
analogWrite(clawMotorPin2, 150);
delay(500);
stopMoving();
}
void closeClaw(){
analogWrite(clawMotorPin1, 150);
analogWrite(clawMotorPin2, 0);
delay(500);
}
void driveBackward(int x){
rightMotorBackward(x);
leftMotorBackward(x);
}
void stopMoving(){
rightMotorForward(0);
leftMotorForward(0);
}
void driveForward(int x){
rightMotorForward(x);
leftMotorForward(x);
}
void sensorCheck(){
leftSensor = digitalRead(leftSensorPin);
rightSensor = digitalRead(rightSensorPin);
middleSensor = digitalRead(middleSensorPin);
}
void ultraSensorcheck(){
digitalWrite(12, LOW);
delayMicroseconds(2);
digitalWrite(12, HIGH);
delayMicroseconds(5);
digitalWrite(12, LOW);
duration = pulseIn(A0, HIGH);
inches = duration / 74 / 2;
Serial.print(inches);
Serial.print("in ");
Serial.println();
}