Dagu rover 5 - arduino mega 2560 - Xbee (6 / 11 steg)
Steg 6: Pulsgivare kod
Här är en enkel kod för vänster kodaren. Jag tillbringar många timmar förvirrad över detta. men hittade en linjär encoder kod som fungerar. Koden snurrar vänster motorerna tills kodaren (antal) når 500. det också skriva ut det till seriell bildskärmen. Det samma för andra sidan bara behöva ändra PIN-koder och namn, men jag kommer att inkludera en final koden med allt i slutet.
Avbryta information / / stift kan skilja på uno < br > / / 0 på pin 2
1 på stift 3
#define encoderA 2
#define encoderB 3 / / endast använda ett avbrott i det här exemplet
flyktiga int antal;
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
void setup()
{
Serial.BEGIN(9600);
Count = 0;
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, handleEncoder, förändring);
}
void loop()
{
Delay(1000);
(HASTIGHET = 200);
Forward();
om (räkna > 10) Serial.println(count);
}
void handleEncoder()
{
IF(digitalRead(encoderA) == digitalRead(encoderB))
{count ++;
}
annat
{count--;
}
}
void forward()
{
digitalWrite(dirch1,LOW);
digitalWrite(dirch2,HIGH);
analogWrite(speedch1,SPEED);
analogWrite(speedch2,SPEED);
om (count > 500) {
analogWrite(speedch1,0);
analogWrite(speedch2,0);
}
}