Skip to content

Instantly share code, notes, and snippets.

@suadanwar
Last active February 14, 2019 16:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save suadanwar/4c3805fdb63d9e6647925fb916b88c61 to your computer and use it in GitHub Desktop.
Save suadanwar/4c3805fdb63d9e6647925fb916b88c61 to your computer and use it in GitHub Desktop.
This is a sample code for Line Following Robot using Arduino.
#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