#define EN1 9 // Pin9 (P2.1) : Motor1 speed (PWM) #define M1 10 // Pin10 (P2.2) : Motor1 direction (Left Motor) #define EN2 12 // Pin13 (P2.4) : Motor2 speed (PWM) #define M2 11 // Pin12 (P2.3) : Motor2 direction (Right Motor) int LeftSensor = A4; // Left sensor on A4 - Pin6 (P1.4) int RightSensor = A7; // Right sensor on A7 - Pin15 (P1.7) int leftvalue; // Left sensor value int rightvalue; // Right sensor value int treshold = 720; //sensor treshold value int MotorSpeed = 30; // motor speed void setup() { pinMode(EN1, OUTPUT); // Motor1 speed (PWM) pinMode(EN2, OUTPUT); // Motor2 speed (PWM) pinMode(M1, OUTPUT); // Motor1 direction (Left Motor) pinMode(M2, OUTPUT); // Motor2 direction (Right Motor) MotorLeft(MotorSpeed); // Robot: Forward MotorRight(MotorSpeed); Serial.begin(9600); // set up serial communication with PC } void loop() // infinite loop { leftvalue = analogRead(LeftSensor); // reading Left sensor value (0 - 1023) rightvalue = analogRead(RightSensor); // reading Right sensor value (0 - 1023) // if both sensors over carpet: move forward if (leftvalue>treshold && rightvalue>treshold) { MotorLeft(MotorSpeed); //Left motor: forward MotorRight(MotorSpeed); //Right motor: forward } // If Left sensor is over the line and Right sensor is over the carpet: turn left else if (leftvaluetreshold) { MotorLeft(0); //Left motor: stop MotorRight(MotorSpeed); //Right motor: forward } // If Left sensor is over the carpet and Right sensor is over the line: turn right else if (leftvalue>treshold && rightvaluetreshold && rightvalue>treshold) { MotorLeft(MotorSpeed); //Left motor: forward MotorRight(MotorSpeed); //Right motor: forward } // sending sensor data to PC via serial port // (used for treshold setup and debugging) Serial.print("Left Sensor = " ); Serial.print(leftvalue); Serial.print(" Right Sensor = "); Serial.println(rightvalue); delay(50); // wait for 50ms } void MotorLeft(int speed) { if (speed>0) { digitalWrite(M1,HIGH); analogWrite(EN1,speed*255/100); } else { digitalWrite(M1,LOW); analogWrite(EN1,abs(speed)*255/100); } } void MotorRight(int speed) { if (speed>0) { digitalWrite(M2,HIGH); analogWrite(EN2,speed*255/100); } else { digitalWrite(M2,LOW); analogWrite(EN2,abs(speed)*255/100); } }