Skip to content

Instantly share code, notes, and snippets.

@TERNION-1121
Created March 20, 2023 04:27
Show Gist options
  • Save TERNION-1121/c2fed2fc9d197bad594dc5ca5bd6c42e to your computer and use it in GitHub Desktop.
Save TERNION-1121/c2fed2fc9d197bad594dc5ca5bd6c42e to your computer and use it in GitHub Desktop.
enum INFRARED_SENSORS{IR_1 = 2, IR_2 = 3};
enum MOTORS{M1_enA = 5, M1_in1 = 9, M1_in2 = 10, M2_enB = 6, M2_in3 = 11, M2_in4 = 12};
// -------------------------------- defining pins -----------------------------------
extern int M1[3] = {M1_enA, M1_in1, M1_in2};
extern int M2[3] = {M2_enB, M2_in3, M2_in4};
// DC motor pins (motor driver pins)
int IR1_reading, IR2_reading;
int LEFT, RIGHT;
void moveLEFT(int motor1[3], int motor2[3]);
void moveRIGHT(int motor1[3], int motor2[3]);
void moveFORWARD(int motor1[3], int motor2[3]);
void moveBACKWARD(int motor1[3], int motor2[3]);
void STOP(int motor1[3], int motor2[3]);
void setup(){
Serial.begin(9600);
pinMode(IR_1, INPUT);
pinMode(IR_2, INPUT);
for (int i = 0; i < 3; ++i){ // setting each Motor Driver pin as OUTPUT
pinMode(M1[i], OUTPUT);
pinMode(M2[i], OUTPUT);
}
for (int i = 1; i < 3; ++i){ // setting Motor Driver's output pins as LOW
digitalWrite(M1[i], LOW);
digitalWrite(M2[i], LOW);
}
analogWrite(M1[0], 180);
analogWrite(M2[0], 180); // Maximum speed for both DC Motors
IR1_reading = IR2_reading = 0;
LEFT = RIGHT = 0;
TCCR0B = TCCR0B & B11111000 | B00000010 ;
}
void loop(){
IR1_reading = digitalRead(IR_1);
IR2_reading = digitalRead(IR_2);
LEFT = IR1_reading;
RIGHT = IR2_reading;
while (LEFT || RIGHT){ // absence of light is detected
if (LEFT && RIGHT){
moveFORWARD(M1, M2);
}
else if(!LEFT && RIGHT){ // absence of light on LEFT and presence of light on RIGHT
moveLEFT(M1, M2);
}
else if(LEFT && !RIGHT){ // presence of light on LEFT and absence of light on RIGHT
moveRIGHT(M1, M2);
}
IR1_reading = digitalRead(IR_1);
IR2_reading = digitalRead(IR_2);
LEFT = IR1_reading;
RIGHT = IR2_reading;
// re-take the readings
}
STOP(M1, M2); // STOP if no strip is detected
}
void moveFORWARD(int leftMotor[3], int rightMotor[3]){
/* setting Left and Right motors to move forward*/
digitalWrite(leftMotor[1], HIGH);
digitalWrite(leftMotor[2], LOW);
digitalWrite(rightMotor[1], HIGH);
digitalWrite(rightMotor[2], LOW);
Serial.println("Black Strip! Move Forward!");
}
void moveBACKWARD(int leftMotor[3], int rightMotor[3]){
/* setting Left and Right motors to move backward */
// has no use currently
digitalWrite(leftMotor[1], LOW);
digitalWrite(leftMotor[2], HIGH);
digitalWrite(rightMotor[1], LOW);
digitalWrite(rightMotor[2], HIGH);
Serial.println("Obstacle! Move Backword!");
}
void STOP(int motorPins1[3], int motorPins2[3]){
for (int i = 1; i < 3; ++i){
digitalWrite(motorPins1[i], LOW);
digitalWrite(motorPins2[i], LOW);
}
Serial.println("Stop!");
}
void moveLEFT(int leftMotor[3], int rightMotor[3]){
/* set Left motor on reverse and Right motor on forward to move Left */
digitalWrite(leftMotor[1], LOW);
digitalWrite(leftMotor[2], LOW);
digitalWrite(rightMotor[1], LOW);
digitalWrite(rightMotor[2], HIGH);
Serial.println("Move Left!");
}
void moveRIGHT(int leftMotor[3], int rightMotor[3]){
/* set Left motor on forward and Right motor on reverse to move Right */
digitalWrite(leftMotor[1], LOW);
digitalWrite(leftMotor[2], HIGH);
digitalWrite(rightMotor[1], LOW);
digitalWrite(rightMotor[2], LOW);
Serial.println("Move Right!");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment