










#include <Servo.h>
Servo myservo1;
Servo myservo2;
Servo myservo3;
int pos1 = 90;//คีบ90-140
int pos2 = 170;//ยก170-10
 
const int analogInPin0 = A0; ///เซ็นเซอร์มือคีบ
const int analogInPin1 = A1; //เซ็นเซอร์แทรคเส้นต่อOUT1
const int analogInPin2 = A2; //เซ็นเซอร์แทรคเส้นต่อOUT2
const int analogInPin3 = A3; //เซ็นเซอร์แทรคเส้นต่อOUT3
const int analogInPin4 = A4; //เซ็นเซอร์แทรคเส้นต่อOUT4
const int analogInPin5 = A5; //เซ็นเซอร์แทรคเส้นต่อOUT5
int sensorValue0 = 0;
int sensorValue1 = 0;
int sensorValue2 = 0;
int sensorValue3 = 0;
int sensorValue4 = 0;
int sensorValue5 = 0;
////////////////////
 
char unChar;
const int BZ =4;
 
const int inB1 =12;///////มอเตอร์
const int inA1 =13;//////มอเตอร์
const int PWB  =10;//////มอเตอร์
const int PWA  =11;///////มอเตอร์
 
int Step=0;///ขั้นตอนการทำงาน
int SPEED_A=255;
 
void setup() 
{
  myservo1.attach(6);///เซอรโวคีบ
  myservo3.attach(2);///เซอร์โวยกธง
  myservo2.attach(9);///เซอร์โวยก
  
  myservo1.write(pos1); 
  myservo2.write(pos2);   
  myservo3.write(90);      
Serial.begin(9600);
 pinMode(BZ , OUTPUT);
 pinMode(inA1 , OUTPUT);
 pinMode(PWA , OUTPUT);
 pinMode(inB1 , OUTPUT);
 pinMode(PWB , OUTPUT);
 
}
void loop() 
{
 
  
sensorValue0 = analogRead(analogInPin0);
sensorValue1 = analogRead(analogInPin1);
sensorValue2 = analogRead(analogInPin2);
sensorValue3 = analogRead(analogInPin3);
sensorValue4 = analogRead(analogInPin4);
sensorValue5 = analogRead(analogInPin5);
  
//Serial.print("sensor = ");
//Serial.print(sensorValue0);
//Serial.print("sensor = ");
//Serial.print(sensorValue1);//ซ้าย
//Serial.print("sensor = ");
//Serial.print(sensorValue2);
//Serial.print("sensor = ");
//Serial.print(sensorValue3);
//Serial.print("sensor = ");
//Serial.print(sensorValue4);
//Serial.print("sensor = ");
//Serial.print(sensorValue5);//ขวา
//Serial.println();
 
if(sensorValue0<=500&&Step==0)
{
digitalWrite(BZ ,HIGH);
delay(1000);
digitalWrite(BZ , LOW); 
delay(1000);
digitalWrite(BZ ,HIGH);
delay(1000);
digitalWrite(BZ , LOW); 
delay(100);
KEEP();
digitalWrite(BZ ,HIGH);
delay(1000);
digitalWrite(BZ , LOW); 
delay(1000);
Robot_GO();
Step++;
}
 
else if(Step==1)
{
 LINE(); 
}
else if(Step==2)
{
LL90();
}
else if(Step==3)
{
 LINE(); 
}
else if(Step==4)
{
LL90();
}
else if(Step==5)
{
 LINE(); 
}
else if(Step==6)
{
RR90();
}
else if(Step==7||Step==8||Step==9)
{ 
LINE(); 
}
 
else if(Step==10)
{
RR90();
}
else if(Step==11)
{
 LINE(); 
}
else if(Step==12)
{
RR90();
}
else if(Step==13)
{
 LINE(); 
}
else if(Step==14)
{
 LINE(); 
}
else if(Step==15)
{
Robot_GO1();
 
}
else if(Step==16)
{
YOG();
}
else if(Step==17)
{
WANG();
}
else if(Step==18)
{
YOGTONG();
}
 
else
{
  Robot_STOP();
digitalWrite(BZ , LOW);  
}
 
 
 
////////////////////////////////////////////////////
}//loop
////////////////////////////////////////////////
 
 
void Robot_GO()//เดินหน้า
{
   digitalWrite(inA1 , HIGH);///lowหมุนกลับด้าน
   digitalWrite(PWA ,HIGH);//////lowหยุด
 
   digitalWrite(inB1 , HIGH);///lowหมุนกลับด้าน
   digitalWrite(PWB ,HIGH); //////lowหยุด
 
}
//////////////////////////////////////////////////
void Robot_BACK()//ถอยหลัง
{
   digitalWrite(inA1 , LOW);///lowหมุนกลับด้าน
   digitalWrite(PWA ,HIGH);//////lowหยุด
 
   digitalWrite(inB1 , LOW);///lowหมุนกลับด้าน
   digitalWrite(PWB ,HIGH); //////lowหยุด
 
}
//////////////////////////////////////////////////
void Robot_RIGH()//ซ้าย
{
   digitalWrite(inA1 , HIGH);
   digitalWrite(PWA ,HIGH);///
   digitalWrite(inB1 , LOW);//ซ้าย
   digitalWrite(PWB ,HIGH); //0-255
 
}
////////////////////////////////////////////
void Robot_LEFT()//ซ้าย
{
   digitalWrite(inA1 , LOW);
   digitalWrite(PWA ,HIGH);///0-255
   digitalWrite(inB1 , HIGH);
   digitalWrite(PWB ,HIGH); //0-255
 
}
void Robot_STOP()//หยุด
{
 digitalWrite(inA1 , LOW);
 digitalWrite(PWA ,LOW);///0-255
 digitalWrite(inB1 , LOW);
 digitalWrite(PWB ,LOW); //0-255
  delay(10);
}
 //////////////////////////////////////////
 
void LL90()//หมุนซ้าย
{
  digitalWrite(inA1 , LOW);
   digitalWrite(PWA ,HIGH);///0-255
   digitalWrite(inB1 , HIGH);
   digitalWrite(PWB ,HIGH); //0-255
    delay(1800);
   Step++;
}
 //////////////////////////////////////////////////////////
void RR90()//หมุนขวา
{
  digitalWrite(inA1 , HIGH);
   digitalWrite(PWA ,HIGH);///
  /////////////////////////////////////
   digitalWrite(inB1 , LOW);//ซ้าย
   digitalWrite(PWB ,HIGH); //0-255
   delay(1800);
   Step++;
}
 ///////////////////////////////////////////////////////////////
void Robot_GO1()////ออกตัว
{
   digitalWrite(inA1 , HIGH);
   digitalWrite(PWA ,HIGH);///0-255
  /////////////////////////////////////
   digitalWrite(inB1 , HIGH);
   digitalWrite(PWB ,HIGH); //0-255
delay(800);
digitalWrite(BZ ,HIGH);
delay(100);
digitalWrite(BZ , LOW);  
 
 digitalWrite(inA1 , LOW);
 digitalWrite(PWA ,LOW);///0-255
 digitalWrite(inB1 , LOW);
 digitalWrite(PWB ,LOW); //0-255
Step++;
}
 
 ///////////////////////////////////////////////////////////
 
void LINE()//เดินตามเส้น
{
 if(sensorValue2<500&&sensorValue4<500||sensorValue1<500&&sensorValue5<500)//เส้นดำ
 {
digitalWrite(BZ ,HIGH);  
  Robot_GO();  
  delay(700);
  Robot_STOP();
digitalWrite(BZ ,HIGH);
delay(100);
digitalWrite(BZ , LOW);  
  Step++;
  } //นับ
else if(sensorValue1<500||sensorValue2<500)//ซ้าย
{
Robot_LEFT();
}
else if(sensorValue5<500||sensorValue4<500)//ขวา
{
Robot_RIGH(); 
}
 
else
{
Robot_GO();  
}
 
}
////////////////////////////////////////////// 
 
void KEEP()//คีบ
{
 for (pos1 = 90; pos1 <= 140; pos1 += 1)  
 {
 myservo1.write(pos1);
  delay(15);
}
 
}
 
/////////////////////////////////////////////////
void WANG()//วาง
{
  for (pos1 = 140; pos1 >= 90; pos1 -= 1)  
 {
 myservo1.write(pos1);
  delay(15);
 
 }
   Step++;
}
 
 
 /////////////////////////////////////////////////////
 
 
void YOG()//ยก
{
  for (pos2 = 170; pos2 >= 5; pos2 -= 1)  
 {
 myservo2.write(pos2);
  delay(15);
}
   Step++;  
}
////////////////////////////////////////////////////
 
void YOGTONG()//ยกธง
{
 
 myservo3.write(10);
  delay(50);
 
}
