#include <Servo.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(A0,A1);
Servo myservoA;
Servo myservoB;
Servo myservoC;
Servo myservoD;
String readString;
const int ledPin = 13;
char unChar;
///-------------------------------
const int s0 = 2; ///ต่อ 2
const int s1 = 3;///ต่อ 3
const int s2 = 4;///ต่อ 4
const int s3 = 5;///ต่อ 5
const int nLED = 6; // LED///ต่อ 6
const int out = 7; // TCS230 output///ต่อ 7
int red = 0;//ตัวแปร สี แดง
int green = 0;//ตัวแปร สี เขียว
int blue = 0;//ตัวแปร สี น้ำเงิน
////-----------------------------
int posA=100;
int posB=100;
int posC=100;
int posD=100;
int posSA1[50];
int posSB1[50];
int posSC1[50];
int posSD1[50];
//------------------
int posSA2[50];
int posSB2[50];
int posSC2[50];
int posSD2[50];
//------------------
int posSA3[50];
int posSB3[50];
int posSC3[50];
int posSD3[50];
//----------------
int Step=0;
int Start=0;
int Max=0;
int DL=50;
int pro=1;
int co=1;///สี
int DK =20;
void setup()
{
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
pinMode(nLED, OUTPUT);
pinMode(out, INPUT);
digitalWrite(s0, HIGH);
digitalWrite(s1, HIGH);
digitalWrite(nLED, LOW);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
delay(100);
digitalWrite(ledPin, HIGH);
Serial.begin(57600);
while (!Serial)
{
}
Serial.println("TF-robot");
Serial.println("พร้อมทำงาน");
myservoA.attach(8);
myservoA.write(posA);
myservoB.attach(9);
myservoB.write(posB);
myservoC.attach(10);
myservoC.write(posC);
myservoD.attach(11);
myservoD.write(posD);
mySerial.begin(9600);
mySerial.println("");
}
void loop()
{
if (mySerial.available())
{
unChar = mySerial.read();
// Serial.println(unChar);//----------
if(unChar=='C'&&posA<=170)
{
posA=posA+4;
myservoA.write(posA);
delay(DK);
}
else if(unChar=='D'&&posA>=0)
{
posA=posA-4;
myservoA.write(posA);
delay(DK);
}
else if(unChar=='A'&&posB<=140)
{
posB=posB+4;Serial.println(posB);
myservoB.write(posB);
delay(DK);
}
else if(unChar=='B'&&posB>=70)
{
posB=posB-4;
myservoB.write(posB);
delay(DK);
}
else if(unChar=='F'&&posC>=70)
{
posC=posC-4;
myservoC.write(posC);
// Serial.println(posC);
delay(DK);
}
else if(unChar=='E'&&posC<=150)
{
posC=posC+4;
myservoC.write(posC);
// Serial.println(posC);
delay(DK);
}
else if(unChar=='M'&&posD>=85)
{
posD=posD-4;
myservoD.write(posD);
// Serial.println(posD);
delay(DK);
}
else if(unChar=='N'&&posD<=140)
{
posD=posD+4;
myservoD.write(posD);
delay(DK);
}
/////////////////////////////////////////////////////////////จบควบคุม
/////////////////////////////////////////////////////
if(unChar=='K')//สี่เหลี่ยม
{
digitalWrite(ledPin, LOW);
delay(1000);
digitalWrite(ledPin, HIGH);
Step=1;
Start=1; //เริ่ม auto
}
////////////////////////////////////////////////////////
if(unChar=='L')//วงกลม
{
digitalWrite(ledPin, LOW);
delay(100);
digitalWrite(ledPin, HIGH);
Serial.print("step= ");
Serial.print(Step);
Serial.print(" P_A= ");
Serial.print(posA);
Serial.print(" P_B= ");
Serial.print(posB);
Serial.print(" P_C= ");
Serial.print(posC);
Serial.print(" P_D= ");
Serial.print(posD);
Serial.println();
Save();//บันทึก
}
///////////////////////////////////////////////////////////
if(unChar=='H')//start
{
digitalWrite(ledPin, LOW);
delay(1000);
digitalWrite(ledPin, HIGH);
Step=0;
Start=0;
Max=0;
DL=100;
pro=1;
}
// else
// {
//
// myservoA.write(posA);
// myservoB.write(posB);
// myservoC.write(posC);
// myservoD.write(posD);
// mySerial.println("");
// }
/////////////////////////////////////////////////////////////////
}
//////////////////////////////////////////
if(Start==1)//ทำงานรัน
{
runARM1();
}
//////-------------------------------------------------------
}//////////////////////ลูป
void Save()
{
posSA1[Step]=posA;
posSB1[Step]=posB;
posSC1[Step]=posC;
posSD1[Step]=posD;
Step++;
Max=Step;
Print();
}
//------------------------------
void runARM1()///pro1
{
if(Max==Step)///กรณีหยุด
{
//Start=0;
Step=0;
}
else if(posA<posSA1[Step])
{
posA++;
myservoA.write(posA);
delay(DL);
}
else if(posA>posSA1[Step])
{
posA--;
myservoA.write(posA);
delay(DL);
}
else if(posB<posSB1[Step])
{
posB++;
myservoB.write(posB);
delay(DL);
}
else if(posB>posSB1[Step])
{
posB--;
myservoB.write(posB);
delay(DL);
}
else if(posC<posSC1[Step])
{
posC++;
myservoC.write(posC);
delay(DL);
}
else if(posC>posSC1[Step])
{
posC--;
myservoC.write(posC);
delay(DL);
}
else if(posD<posSD1[Step])
{
posD++;
myservoD.write(posD);
delay(DL);
}
else if(posD>posSD1[Step])
{
posD--;
myservoD.write(posD);
delay(DL);
}
else
{
digitalWrite(ledPin, LOW);
delay(100);
digitalWrite(ledPin, HIGH);
Step++;
Print();
delay(1000);
}
}
//-----------------------------
void Print()
{
Serial.print("step= ");
Serial.print(Step);
Serial.print(" P_A= ");
Serial.print(posA);
Serial.print(" P_B= ");
Serial.print(posB);
Serial.print(" P_C= ");
Serial.print(posC);
Serial.print(" P_D= ");
Serial.print(posD);
Serial.println();
}