Last active
February 14, 2019 16:32
-
-
Save suadanwar/4c3805fdb63d9e6647925fb916b88c61 to your computer and use it in GitHub Desktop.
This is a sample code for Line Following Robot using Arduino.
This file contains 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
#define BUTTON 2 | |
#define PIEZO 8 | |
#define L293N_ENA 5 | |
#define L293N_ENB 6 | |
#define L293N_IN1 7 | |
#define L293N_IN2 9 | |
#define L293N_IN3 10 | |
#define L293N_IN4 11 | |
#define IR_LEFT A0 | |
#define IR_RIGHT A1 | |
#define NOTE_G4 392 | |
#define NOTE_C5 523 | |
#define NOTE_G5 784 | |
#define NOTE_C6 1047 | |
int startMelody[] = {NOTE_G5, NOTE_C6}; | |
int startNoteDurations[] = {12, 8}; | |
int stopMelody[] = {NOTE_C6, NOTE_G5}; | |
int stopNoteDurations[] = {12, 8}; | |
#define playStartMelody() playMelody(startMelody, startNoteDurations, 2) | |
#define playStopMelody() playMelody(stopMelody, stopNoteDurations, 2) | |
char inChar; | |
String inString; | |
void setup() | |
{ | |
pinMode(BUTTON, INPUT_PULLUP); | |
pinMode(L293N_ENA, OUTPUT); | |
pinMode(L293N_ENB, OUTPUT); | |
pinMode(L293N_IN1, OUTPUT); | |
pinMode(L293N_IN2, OUTPUT); | |
pinMode(L293N_IN3, OUTPUT); | |
pinMode(L293N_IN4, OUTPUT); | |
pinMode(IR_LEFT, INPUT); | |
pinMode(IR_RIGHT, INPUT); | |
Serial.begin(9600); | |
delay(1000); | |
} | |
void loop() | |
{ | |
if (digitalRead(BUTTON) == LOW) { | |
playStartMelody(); | |
while (true) { | |
if (digitalRead(IR_LEFT) == LOW && | |
digitalRead(IR_RIGHT) == LOW) { | |
robotForward(150, 150); | |
} | |
else if (digitalRead(IR_LEFT) == HIGH && | |
digitalRead(IR_RIGHT) == LOW) { | |
robotForward(0, 150); | |
} | |
else if (digitalRead(IR_LEFT) == LOW && | |
digitalRead(IR_RIGHT) == HIGH) { | |
robotForward(150, 0); | |
} | |
else if (digitalRead(IR_LEFT) == HIGH && | |
digitalRead(IR_RIGHT) == HIGH) { | |
Serial.println("stop"); | |
robotBreak(); | |
playStopMelody(); | |
break; | |
} | |
} | |
} | |
} | |
void playMelody(int *melody, int *noteDurations, int notesLength) | |
{ | |
pinMode(PIEZO, OUTPUT); | |
for (int thisNote = 0; thisNote < notesLength; thisNote++) { | |
int noteDuration = 1000 / noteDurations[thisNote]; | |
tone(PIEZO, melody[thisNote], noteDuration); | |
int pauseBetweenNotes = noteDuration * 1.30; | |
delay(pauseBetweenNotes); | |
noTone(PIEZO); | |
} | |
} | |
void robotStop() | |
{ | |
digitalWrite(L293N_ENA, LOW); | |
digitalWrite(L293N_IN1, LOW); | |
digitalWrite(L293N_IN2, LOW); | |
digitalWrite(L293N_ENB, LOW); | |
digitalWrite(L293N_IN3, LOW); | |
digitalWrite(L293N_IN4, LOW); | |
} | |
void robotBreak() | |
{ | |
digitalWrite(L293N_ENA, HIGH); | |
digitalWrite(L293N_IN1, HIGH); | |
digitalWrite(L293N_IN2, HIGH); | |
digitalWrite(L293N_ENB, HIGH); | |
digitalWrite(L293N_IN3, HIGH); | |
digitalWrite(L293N_IN4, HIGH); | |
} | |
void robotForward(int motorLeftSpeed, int motorRightSpeed) | |
{ | |
analogWrite(L293N_ENA, motorRightSpeed); | |
digitalWrite(L293N_IN1, LOW); | |
digitalWrite(L293N_IN2, HIGH); | |
analogWrite(L293N_ENB, motorLeftSpeed); | |
digitalWrite(L293N_IN3, HIGH); | |
digitalWrite(L293N_IN4, LOW); | |
} | |
void robotReverse(int motorSpeed) | |
{ | |
analogWrite(L293N_ENA, motorSpeed); | |
digitalWrite(L293N_IN1, HIGH); | |
digitalWrite(L293N_IN2, LOW); | |
analogWrite(L293N_ENB, motorSpeed); | |
digitalWrite(L293N_IN3, LOW); | |
digitalWrite(L293N_IN4, HIGH); | |
} | |
void robotTurnRight(int motorSpeed) | |
{ | |
analogWrite(L293N_ENA, motorSpeed); | |
digitalWrite(L293N_IN1, HIGH); | |
digitalWrite(L293N_IN2, LOW); | |
analogWrite(L293N_ENB, motorSpeed); | |
digitalWrite(L293N_IN3, HIGH); | |
digitalWrite(L293N_IN4, LOW); | |
} | |
void robotTurnLeft(int motorSpeed) | |
{ | |
analogWrite(L293N_ENA, motorSpeed); | |
digitalWrite(L293N_IN1, LOW); | |
digitalWrite(L293N_IN2, HIGH); | |
analogWrite(L293N_ENB, motorSpeed); | |
digitalWrite(L293N_IN3, LOW); | |
digitalWrite(L293N_IN4, HIGH); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment