Raden efter bil med trådlös kontroll alternativ (6 / 8 steg)
Steg 6: kodning
Koden är under
Koden förklarade:
Kontinuerlig servon ta en indata som normala servon, men i stället tolka dessa data som en vinkel de tolkar informationen som en hastighet. För mest kontinuerlig servon är vinkeln (90) stopp, (0) är full fart bakåt och (180) är full fart framåt. Exempel bilen används fortlöpande servon som används (95) för stopp, (0) för full fart revers och (190) för full fart framåt. Du kan behöva ta detta i beaktande och redigera koden bygger bort ditt servo val. I exempelkoden riktning framåt är (75) och (115). Detta beror på att servon är monterade speglade varandra. Så fram för en är omvänd för andra.
Sensorerna läses i koden. De kommer att ge ett värde mellan 0-1023. När det returnerade värdet är lågt ser sensorn en ljus färg (vit). När det returnerade värdet är hög ser sensorn en mörk färg (svart). Koden använder "k" som en trim konstant. "k" är avskuren avgöra om färgen är svart. Detta kan justeras baserat bort av miljö belysning och ytan reflektionsförmåga. Exempel bilen använder en cut off på 500.
Det finns 3 sensorer på bilen. Höger, vänster, och Center. Det allmänna konceptet för denna algoritm är att bilen försöker alltid hålla till höger och vänster sensorer på varje sida av linjen och center center på själva linjen.
- Om höger och vänster se vita och centrera ser svarta bilen går framåt.
- Om höger och Center ser svart och till vänster ser vita bilen märker en högersväng och visar rätt.
Om vänster och Center ser svart och rätt ser vita bilen märker en vänstersväng och vänder vänster.
- Om mitten ser rätt alls, realiserar det som en inte säker att det är utanför banan och backar upp 8 sekunder tillbaka till spåret.
Det seriella printet outs är endast för testning och anpassning "k" värdet om det behövs. De tjänar ingen funktion till faktiska resultat av bilen själv.
#include
Servo servoLeft; Definiera vänster servo Servo servoRight; Definiera rätt servo int k = 500. Vit/svart kalibrering avskurna
void setup() {servoLeft.attach(10); / / ställa in vänster servo till digital stift 10 servoRight.attach(9); / / Ställ in rätt servo till digital pin 9 Serial.begin(9600);}
void loop() {/ / läsa indata på analoga stift 0: int sensorleft = analogRead(A0); int sensorright = analogRead(A1); int sensorcenter = analogRead(A2); / / rak
om (sensorleft < k & & sensorright < k & & sensorcenter > k) {
servoLeft.write(75); FWD servoRight.write(115); }
vänster
om (sensorleft > k & & sensorright < k & & sensorcenter > k) {
servoLeft.write(55); vänster servoRight.write(90); } / / höger
om (sensorleft < k & & sensorright > k & & sensorcenter > k) {
servoLeft.write(100); righ servoRight.write(135); }
säkerhet ur spår
om (sensorcenter < k) {
servoLeft.write(100); Re servoRight.write(90); Delay(800); }
Serial.Print(sensorleft); Serial.Print(""); Serial.Print(sensorright); Serial.Print(""); Serial.Print(sensorcenter); Serial.Print("");
}