This is my code:
#include <IRremote.h>
//Line Following
int Sensor_1 = 0, Sensor_2 = 0, Sensor_3 = 0; //sensors
int Flag = 0, Current_Flag = 0, Counter = 0; //used to count how many times the car reverses.
String patch = ""; //Used to counter a Int to string error later on.
String Line_Value = ""; //String value that combines(not adds) the sensor values to then give us cases. This is also where the patch comes in.
//Pin Assigment.
int receiverpin = 12; //the pin for the IR
unsigned long RED; //Used to store incoming commands.
//
#define A 16736925 //Down to ----->
#define B 16754775
#define X 16712445
#define C 16720605
#define D 16761405
#define E 5316027
#define F 2747854299
#define Y 3622325019
#define G 1386468383
#define H 553536955 // this is just to make the car go forward, back, left, right and stop.
#define I 16738455 // code # related to number 1 on the remote
#define J 16750695 // code # related to number 2 on the remote
#define K 16756815 //code # related to number 3 on the remote
#define L 16724175 // code # related to number 4 on the remote
// the ABC...'s are cases for the Red Value.
IRrecv irrecv(receiverpin); //recive
decode_results results; //decode
//the pin identication was put into the setup, because it made to code neater.
void setup()
{
Serial.begin(9600); // Set Up for Serial Communication
pinMode(receiverpin, INPUT); // IR stuff
irrecv.enableIRIn();
pinMode(10, INPUT); // Line Follower s1
pinMode(4, INPUT); // Line Follower s2
pinMode(2, INPUT); // Line Follower s3
pinMode(6, OUTPUT); // Wheel 1
pinMode(7, OUTPUT); // Wheel 2
pinMode(8, OUTPUT); // Wheel 3
pinMode(9, OUTPUT); // Wheel 4
pinMode(5, OUTPUT); // Enable A
pinMode(11, OUTPUT); // Enable B
analogWrite(5, 120); //change the speed of motors.(0~255)
analogWrite(11, 120);
}
void loop()
{
if (irrecv.decode(&results))
{
int RED = results.value;
Serial.println(RED);
irrecv.resume();
delay(150);
switch (RED) {
case A:
DForward();
break;
case B:
DBack();
break;
case C:
DLeft();
break;
case D:
DRight();
break;
case E:
DForward();
break;
case F:
DBack();
break;
case G:
DLeft();
break;
case H:
DRight();
break;
case X:
DStop();
break;
case Y:
DStop();
break;
case I:
_shake();
DStop();
break;
case J:
_rod();
DStop();
break;
case K:
_Stayng(); //Wrong song name but the car dances to the verses "Slide to the left, slide to the right, criss cross".
DStop();
break;
case L: // now with this new code This is what will be excuted when 4 on the remote is pressed.
//Forward_Move();
Sensors_Testing();
Black_Line_Check();
}
}
}
void Forward_Move()
{
digitalWrite(6, 1); // Forward Right
digitalWrite(7, 0); // Reverse Right
digitalWrite(8, 0); // Reverse Left
digitalWrite(9, 1); // Forward Left
// If you did Reverse before this Forward_Move ..... Increment 1
if (Current_Flag == 1)
{
Counter++;
Current_Flag = 0;
}
if (Counter == 15)
{ Serial.println("180 Degrees");
Rotate_Right();
delay(5000);
Counter = 0;
}
}
//These movements are for the Line Following.
void Reverse_Move()
{
digitalWrite(6, 0); // Forward Right
digitalWrite(7, 1); // Reverse Right
digitalWrite(8, 1); // Reverse Left
digitalWrite(9, 0); // Forward Left
}
void Rotate_Right()
{
digitalWrite(6, 0); // Forward Right
digitalWrite(7, 1); // Reverse Right
digitalWrite(8, 0); // Reverse Left
digitalWrite(9, 1); // Forward Left
}
void Rotate_Left()
{
digitalWrite(6, 1); // Forward Right
digitalWrite(7, 0); // Reverse Right
digitalWrite(8, 1); // Reverse Left
digitalWrite(9, 0); // Forward Left
}
void Turn_Right()
{
digitalWrite(6, 0); // Forward Right
digitalWrite(7, 0); // Reverse Right
digitalWrite(8, 0); // Reverse Left
digitalWrite(9, 1); // Forward Left
}
void Turn_Left()
{
digitalWrite(6, 1); // Forward Right
digitalWrite(7, 0); // Reverse Right
digitalWrite(8, 0); // Reverse Left
digitalWrite(9, 0); // Forward Left
}
void Stop()
{ if (Flag == 0)
{
digitalWrite(6, 0); // Forward Right
digitalWrite(7, 0); // Reverse Right
digitalWrite(8, 0); // Reverse Left
digitalWrite(9, 0); // Forward Left
}
if (Flag == 1)
{
Reverse_Move();
Current_Flag = 1;
Serial.println(patch + Counter);
}
}
void Sensors_Testing()
{
Sensor_1 = digitalRead(10); // Left Sensor
Sensor_2 = digitalRead(4); // Center Sensor
Sensor_3 = digitalRead(2); // Right Sensor
Line_Value = patch + Sensor_1 + Sensor_2 + Sensor_3;
Serial.println(Line_Value);
//delay(800);
}
void Black_Line_Check()
{
if (Line_Value == "111")
{
Serial.println("Forward_Move()");
Forward_Move();
Flag = 1;
}
if (Line_Value == "010")
{
Serial.println("Forward_Move()");
Forward_Move();
Flag = 1;
}
if (Line_Value == "100")
{
Serial.println("Rotate_Left()");
Rotate_Left();
Flag = 1;
}
if (Line_Value == "001")
{
Serial.println("Rotate_Right()");
Rotate_Right();
Flag = 1;
}
if (Line_Value == "110")
{
Serial.println("Turn_Left()");
Turn_Left();
Flag = 1;
}
if (Line_Value == "000")
{
Serial.println("Stop()");
Stop();
}
if (Line_Value == "011")
{
Serial.println("Turn_Right()");
Turn_Right();
Flag = 1;
}
//Genaral actions and some functions.
}
void DForward()
{
digitalWrite(5, HIGH);
digitalWrite(11, HIGH);
digitalWrite(6, HIGH); //digital output
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
Serial.println("Forward");
}
void DBack()
{
digitalWrite(5, HIGH);
digitalWrite(11, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
Serial.println("Back");
}
void DLeft()
{
digitalWrite(5, HIGH);
digitalWrite(11, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, LOW);
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
Serial.println("Left");
}
void DRight()
{
digitalWrite(5, HIGH);
digitalWrite(11, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
Serial.println("Right");
}
void DStop()
{
digitalWrite(5, LOW);
digitalWrite(11, LOW);
Serial.println("STOP!");
}
void _snakeR()
{
DRight();
delay(50);
DLeft();
delay(50);
DForward();
delay(50);
DRight();
delay(50);
DLeft();
delay(50);
DRight();
delay(50);
DLeft();
delay(50);
}
void _snake()
{
for (int var2 = 0; var2 <= 20; var2++) {
_snakeR();
if (var2 == 20) {
break;
Serial.println("Rod 1 is done");
}
}
}
void _rodR()
{
DForward();
delay(100);
DBack();
delay(100);
}
void _rod()
{
for (int var1 = 0; var1 <= 5; var1++) {
_rodR();
}
}
void _shakeR()
{
DRight();
delay(40);
DLeft();
delay(40);
}
void _shake()
{
for (int var3 = 0; var3 <= 30; var3++) {
_shakeR();
}
}
void _Stayng() {
DLeft();
delay(200);
DStop();
delay(100);
DForward();
delay(200);
DStop();
delay(700);
DRight();
delay(420);
DStop();
delay(100);
DForward();
delay(300);
DStop();
delay(300);
DLeft();
delay(220);
DStop();
delay(1000);
DRight();
delay(200);
DLeft();
delay(300);
DStop();
delay(1000);
}
What I want is for Line Tracking to be activated by IR and continue looping until stopped by IR. When I pressed 4 on the remote it activates the Line Following case but it just turns to the left endlessly(Until I press Stop).
Any ideas on how to make it work?