Dagu rover 5 - arduino mega 2560 - Xbee (9 / 11 steg)
Steg 9: Final koden
Här är den sista koden för arduino mega 2560. Jag har skapat sub-kommandon för att göra det lättare.
ROBOT BIL KOD 004
kommandon
Forward()
Backward()
rotate_left()
rotate_right()
anteckningar
HELA 360 rotera
(TID = 12000); fördröjningstiden
(HASTIGHET = 200); hastighet 0-255
rotate_right();
int incomingByte = 0; för inkommande seriella data
Speed stift 0 - 255
#define encoderA 2
#define encoderB 3 / / endast använda ett avbrott i det här exemplet
#define encoderC 19
#define encoderD 18 / / endast använda ett avbrott i det här exemplet
flyktiga int Lcount;
flyktiga int Rcount;
int Lcountsaved;
int Rcountsaved;
int speedch1 = 9; vänster fram
int speedch2 = 10; lämnade tillbaka
int speedch3 = 11; höger fram
int speedch4 = 12; högerback
riktning pins
int dirch1 = 44. vänster fram
int dirch2 = 45; lämnade tillbaka
int dirch3 = 42. höger fram
int dirch4 = 43; högerback
int curch1 = A1; vänster fram
int curch2 = A2; lämnade tillbaka
int curch3 = A3; höger fram
int curch4 = A4; högerback
int tid; kommandot är för
int hastighet; / / 0 - 255 varvtal
int antal;
int check1; se om subcomand har köra
int check2; se om subcomand har köra
int check3; se om subcomand har köra
int check4; se om subcomand har köra
int check5; se om subcomand har köra
void setup() {
Lcount = 0;
Rcount = 0;
initiera digital PIN-koden som en utgång.
pinMode(dirch1,OUTPUT);
pinMode(dirch2,OUTPUT);
pinMode(dirch3,OUTPUT);
pinMode(dirch4,OUTPUT);
pinMode(speedch1,OUTPUT);
pinMode(speedch2,OUTPUT);
pinMode(speedch3,OUTPUT);
pinMode(speedch4,OUTPUT);
pinMode (encoderA, ingång);
pinMode (encoderB, ingång); attachInterrupt (0, LhandleEncoder, förändring);
pinMode (encoderC, ingång);
pinMode (encoderD, ingång); attachInterrupt 5, RhandleEncoder, förändring,
Serial2.BEGIN(9600);
Serial.BEGIN(9600);
analogWrite(speedch1,0); / / stoppa alla
analogWrite(speedch2,0); / / stoppa alla
analogWrite(speedch3,0); / / stoppa alla
analogWrite(speedch4,0); / / stoppa alla
Count = 0;
(HASTIGHET = 200);
}
loop rutinen körs för evigt om och om igen:
void loop() {
om (Serial2.available() > 0) {
Läs den inkommande byten:
incomingByte = Serial2.read();
}
om (incomingByte == 10 & & check1 == 0) forward();
annat if (incomingByte == 11 & & check2 == 0) rotate_right();
annat if (incomingByte == 12 & & check3 == 0) backward();
annat if (incomingByte == 13 & & check4 == 0) rotate_left();
annat if (incomingByte == 14 & & check5 == 0) pause();
IF(incomingByte == 16) {
om (Lcount! = Lcountsaved & & Rcount! = Rcountsaved)
Serial2.Print (Lcount, DEC); //send encoder data
Serial2.Print(",");
Serial2.Print(Rcount,dec);
Serial2.Print(",");
Serial2.println();
incomingByte = 1;
Lcountsaved = Lcount;
Rcountsaved = Rcount;
// }
}
void LhandleEncoder()
{
IF(digitalRead(encoderA) == digitalRead(encoderB))
{Lcount ++;
}
annat
{Lcount--;
}
}
void RhandleEncoder()
{
IF(digitalRead(encoderC) == digitalRead(encoderD))
{Rcount ++;
}
annat
{Rcount--;
}
}
void forward()
{
check2 = 0;
check3 = 0;
check4 = 0;
check5 = 0;
analogWrite(speedch1,0);
analogWrite(speedch2,0);
analogWrite(speedch3,0);
analogWrite(speedch4,0);
Delay(100);
digitalWrite(dirch1,LOW);
digitalWrite(dirch2,HIGH);
digitalWrite(dirch3,LOW);
digitalWrite(dirch4,HIGH);
analogWrite(speedch1,SPEED);
analogWrite(speedch2,SPEED);
analogWrite(speedch3,SPEED);
analogWrite(speedch4,SPEED);
Check1 = 1;
}
void backward()
{
Check1 = 0;
check2 = 0;
check4 = 0;
check5 = 0;
analogWrite(speedch1,0);
analogWrite(speedch2,0);
analogWrite(speedch3,0);
analogWrite(speedch4,0);
Delay(100);
digitalWrite(dirch1,HIGH);
digitalWrite(dirch2,LOW);
digitalWrite(dirch3,HIGH);
digitalWrite(dirch4,LOW);
analogWrite(speedch1,SPEED);
analogWrite(speedch2,SPEED);
analogWrite(speedch3,SPEED);
analogWrite(speedch4,SPEED);
check3 = 1;
}
void rotate_right()
{
Check1 = 0;
check3 = 0;
check4 = 0;
check5 = 0;
analogWrite(speedch1,0);
analogWrite(speedch2,0);
analogWrite(speedch3,0);
analogWrite(speedch4,0);
Delay(100); vänta med att stoppa
digitalWrite(dirch1,LOW);
digitalWrite(dirch2,HIGH);
digitalWrite(dirch3,HIGH);
digitalWrite(dirch4,LOW);
analogWrite(speedch1,SPEED);
analogWrite(speedch2,SPEED);
analogWrite(speedch3,SPEED);
analogWrite(speedch4,SPEED);
check2 = 1;
}
void rotate_left()
{
Check1 = 0;
check2 = 0;
check3 = 0;
check5 = 0;
analogWrite(speedch1,0);
analogWrite(speedch2,0);
analogWrite(speedch3,0);
analogWrite(speedch4,0);
Delay(100);
digitalWrite(dirch1,HIGH);
digitalWrite(dirch2,LOW);
digitalWrite(dirch3,LOW);
digitalWrite(dirch4,HIGH);
analogWrite(speedch1,SPEED);
analogWrite(speedch2,SPEED);
analogWrite(speedch3,SPEED);
analogWrite(speedch4,SPEED);
check4 = 1;
}
void pause()
{
Check1 = 0;
check2 = 0;
check3 = 0;
check4 = 0;
analogWrite(speedch1,0);
analogWrite(speedch2,0);
analogWrite(speedch3,0);
analogWrite(speedch4,0);
check5 = 1;
}