










#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);
}
