#include<AFMotor.h>
AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
int IR1=A3;
int IR2=A2;
int IR3=A1;
int IR4=A0;
int h=80;
int m=60;
int k=0;
int count=0;
boolean state = true;
const int buttonPins1 = 9;
const int buttonPins2 = 10;
const int buttonPins3 = 2;
int buttonStates1 =0; // Store button states
int buttonStates2 =0;
int buttonStates3 =0;
int button;
void setup() {
pinMode(IR1, INPUT);
pinMode(IR2, INPUT);
pinMode(IR3, INPUT);
pinMode(IR4, INPUT);
pinMode(buttonPins1, INPUT_PULLUP); // Enable internal pull-up
pinMode(buttonPins2, INPUT_PULLUP);
pinMode(buttonPins3, INPUT_PULLUP);
Serial.begin(9600);
motor1.setSpeed(h); motor1.run(FORWARD);
motor2.setSpeed(h); motor2.run(FORWARD);
delay(500);
}
void loop() {
buttonStates1 = digitalRead(buttonPins1);
buttonStates2 = digitalRead(buttonPins2);
buttonStates3 = digitalRead(buttonPins3);
int s1 = digitalRead(IR1);
int s2 = digitalRead(IR2);
int s3 = digitalRead(IR3);
int s4 = digitalRead(IR4);
//Serial.println(s1);
if (buttonStates1 == LOW) { // Tovchluur 1-iin code
button=1; }
while(button){
shugamDagah();
tooloh1();
}
if (buttonStates2 == LOW) { // Tovchluur 1-iin code
button=2; }
while(button){
shugamDagah();
tooloh2();
}
if (buttonStates3 == LOW) { // Tovchluur 1-iin code
button=3; }
while(button){
shugamDagah();
tooloh3();
}
}
void shugamDagah()
{
//if(digitalRead(IR1)==0 && digitalRead(IR2)==0 && digitalRead(IR3)==0 && digitalRead(IR4)==0){uragshaa();}
//if(digitalRead(IR1)==1 && digitalRead(IR2)==1 && digitalRead(IR3)==1 && digitalRead(IR4)==1){ motor1.setSpeed(150);motor1.run(FORWARD);motor2.setSpeed(150);motor2.run(FORWARD); } //1111
if(digitalRead(IR1)==0 && digitalRead(IR2)==1 && digitalRead(IR3)==1 && digitalRead(IR4)==0){ motor1.setSpeed(h);motor1.run(FORWARD); motor2.setSpeed(h); motor2.run(FORWARD); }//0110
else if(digitalRead(IR1)==1 && digitalRead(IR2)==0 && digitalRead(IR3)==0 && digitalRead(IR4)==0){ motor1.setSpeed(k); motor1.run(FORWARD);motor2.setSpeed(h); motor2.run(FORWARD); }//1000
else if(digitalRead(IR1)==1 && digitalRead(IR2)==1 && digitalRead(IR3)==0 && digitalRead(IR4)==0){ motor1.setSpeed(m);motor1.run(FORWARD);motor2.setSpeed(h);motor2.run(FORWARD);} //1100
else if(digitalRead(IR1)==0 && digitalRead(IR2)==0 && digitalRead(IR3)==0 && digitalRead(IR4)==1){motor1.setSpeed(h); motor1.run(FORWARD);motor2.setSpeed(k); motor2.run(FORWARD); }//0001
else if(digitalRead(IR1)==0 && digitalRead(IR2)==0 && digitalRead(IR3)==1 && digitalRead(IR4)==1){ motor1.setSpeed(h);motor1.run(FORWARD);motor2.setSpeed(m);motor2.run(FORWARD);} //0011
else if(digitalRead(IR1)==0 && digitalRead(IR2)==1 && digitalRead(IR3)==0 && digitalRead(IR4)==0){ motor1.setSpeed(m); motor1.run(FORWARD);motor2.setSpeed(h);motor2.run(FORWARD); } //0100
else if(digitalRead(IR1)==0 && digitalRead(IR2)==0 && digitalRead(IR3)==1 && digitalRead(IR4)==0){motor1.setSpeed(h); motor1.run(FORWARD);motor2.setSpeed(m);motor2.run(FORWARD); }//0010
}
void tooloh1()
{
if (digitalRead(IR1) && digitalRead(IR2) && digitalRead(IR3) && digitalRead(IR4) && state){
count++;
state = false;
Serial.print("Count: ");
Serial.println(count);
if(count==5) {uragshaa();delay(200);baruun1();delay(430);}
if(count==7) {uragshaa();delay(200);baruun1();delay(430);}
if(count==10) {zogs();delay(20000000);}
}
if (!digitalRead(IR1) && !digitalRead(IR2) && !digitalRead(IR3) && !digitalRead(IR4)) //0000
{
state = true;
}
else if (!digitalRead(IR1) && digitalRead(IR2) && digitalRead(IR3)&& !digitalRead(IR4)) //0110
{
state = true;
}
else if (digitalRead(IR1) && digitalRead(IR2) && !digitalRead(IR3)&& !digitalRead(IR4)) //1100
{
state = true;
}
else if (!digitalRead(IR1) && !digitalRead(IR2) && digitalRead(IR3)&& digitalRead(IR4)) //0011
{
state = true;
}
else if (!digitalRead(IR1) && !digitalRead(IR2) && !digitalRead(IR3)&& digitalRead(IR4)) //0001
{
state = true;
}
else if (digitalRead(IR1) && !digitalRead(IR2) && !digitalRead(IR3)&& !digitalRead(IR4)) //1000
{
state = true;
}
else if (!digitalRead(IR1) && digitalRead(IR2) && !digitalRead(IR3)&& !digitalRead(IR4)) //0100
{
state = true;
}
else if (!digitalRead(IR1) && !digitalRead(IR2) && digitalRead(IR3)&& !digitalRead(IR4)) //0010
{
state = true;
}
}
//------------------------------------------------------------------------------------------------------------------
void tooloh2()
{
if (digitalRead(IR1) && digitalRead(IR2) && digitalRead(IR3) && digitalRead(IR4) && state){
count++;
state = false;
Serial.print("Count: ");
Serial.println(count);
if(count==5) {uragshaa();delay(200);baruun1();delay(430);}
if(count==7) {uragshaa();delay(200);baruun1();delay(430);}
if(count==10) {zogs();delay(20000000);}
}
if (!digitalRead(IR1) && !digitalRead(IR2) && !digitalRead(IR3) && !digitalRead(IR4)) //0000
{
state = true;
}
else if (!digitalRead(IR1) && digitalRead(IR2) && digitalRead(IR3)&& !digitalRead(IR4)) //0110
{
state = true;
}
else if (digitalRead(IR1) && digitalRead(IR2) && !digitalRead(IR3)&& !digitalRead(IR4)) //1100
{
state = true;
}
else if (!digitalRead(IR1) && !digitalRead(IR2) && digitalRead(IR3)&& digitalRead(IR4)) //0011
{
state = true;
}
else if (!digitalRead(IR1) && !digitalRead(IR2) && !digitalRead(IR3)&& digitalRead(IR4)) //0001
{
state = true;
}
else if (digitalRead(IR1) && !digitalRead(IR2) && !digitalRead(IR3)&& !digitalRead(IR4)) //1000
{
state = true;
}
else if (!digitalRead(IR1) && digitalRead(IR2) && !digitalRead(IR3)&& !digitalRead(IR4)) //0100
{
state = true;
}
else if (!digitalRead(IR1) && !digitalRead(IR2) && digitalRead(IR3)&& !digitalRead(IR4)) //0010
{
state = true;
}
}
//----------------------------------------------------------------------------------------------------------------
void tooloh3()
{
if (digitalRead(IR1) && digitalRead(IR2) && digitalRead(IR3) && digitalRead(IR4) && state){
count++;
state = false;
Serial.print("Count: ");
Serial.println(count);
if(count==5) {uragshaa();delay(200);baruun1();delay(430);}
if(count==7) {uragshaa();delay(200);baruun1();delay(430);}
if(count==10) {zogs();delay(20000000);}
}
if (!digitalRead(IR1) && !digitalRead(IR2) && !digitalRead(IR3) && !digitalRead(IR4)) //0000
{
state = true;
}
else if (!digitalRead(IR1) && digitalRead(IR2) && digitalRead(IR3)&& !digitalRead(IR4)) //0110
{
state = true;
}
else if (digitalRead(IR1) && digitalRead(IR2) && !digitalRead(IR3)&& !digitalRead(IR4)) //1100
{
state = true;
}
else if (!digitalRead(IR1) && !digitalRead(IR2) && digitalRead(IR3)&& digitalRead(IR4)) //0011
{
state = true;
}
else if (!digitalRead(IR1) && !digitalRead(IR2) && !digitalRead(IR3)&& digitalRead(IR4)) //0001
{
state = true;
}
else if (digitalRead(IR1) && !digitalRead(IR2) && !digitalRead(IR3)&& !digitalRead(IR4)) //1000
{
state = true;
}
else if (!digitalRead(IR1) && digitalRead(IR2) && !digitalRead(IR3)&& !digitalRead(IR4)) //0100
{
state = true;
}
else if (!digitalRead(IR1) && !digitalRead(IR2) && digitalRead(IR3)&& !digitalRead(IR4)) //0010
{
state = true;
}
}
void uragshaa()
{
motor1.setSpeed(h);
motor1.run(FORWARD);
motor2.setSpeed(h);
motor2.run(FORWARD);
}
void hoishoo()
{
motor1.setSpeed(150);
motor1.run(BACKWARD);
motor2.setSpeed(150);
motor2.run(BACKWARD);
}
void baruun()
{
motor1.setSpeed(255);
motor1.run(FORWARD);
motor2.setSpeed(0);
motor2.run(FORWARD);
}
void zuun()
{
motor1.setSpeed(0);
motor1.run(FORWARD);
motor2.setSpeed(255);
motor2.run(FORWARD);
}
void baruun1()
{
motor1.setSpeed(h);
motor1.run(FORWARD);
motor2.setSpeed(h);
motor2.run(BACKWARD);
}
void zuun1()
{
motor1.setSpeed(255);
motor1.run(BACKWARD);
motor2.setSpeed(255);
motor2.run(FORWARD);
}
void zogs()
{
motor1.setSpeed(0);
motor1.run(RELEASE);
motor2.setSpeed(0);
motor2.run(RELEASE);
}