Created
March 20, 2023 04:27
-
-
Save TERNION-1121/c2fed2fc9d197bad594dc5ca5bd6c42e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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