Buggy rullstol Robot (9 / 10 steg)
Steg 9: hjärnor
Jag har skrivit ett program sedan GWbasic. Gamla skolan jag vet. Jag inser att detta program ser väldigt lik en grundläggande flashback. Det fungerar dock precis som jag ville.
/*
ROBOT DRIVE
Stephen J. Gardiner, CPS
Skapad 2012
Stephen J. Gardiner, CPS
*/
inkludera bibliotek-koden:
#include < LiquidCrystal.h >
initiera LCD-biblioteket
LiquidCrystal lcd (12, 11, 5, 4, 3, 2);
CONST int ledPin = 16. DRIVE SYSTEM POWER pin
CONST int lCdPin = 13. lCdPin
CONST int redPin = 8; FÖRBIGÅ ENGAGERAD
CONST int FASTPin = 14. Snabba upp
CONST int SLOWPin = 15. Hastighet ner
CONST int pwm1Pin = 9; PWM stift 1
CONST int pwm2Pin = 10; PWM Pin2
int incomingByte; en variabel att läsa inkommande seriella data i
int OVERRIDEOFF;
void setup() {
Serial.BEGIN(9600); initiera seriell kommunikation:
initiera kontroll stiften som ett resultat:
pinMode (ledPin, produktionen);
pinMode (lCdPin, produktionen);
pinMode (redPin, produktionen);
pinMode (FASTPin, OUTPUT);
pinMode (SLOWPin, OUTPUT);
pinMode (pwm1Pin, produktionen);
pinMode (pwm2Pin, produktionen);
LCD.BEGIN(16,4); Ange den LCD antal kolumner och rader:
lcd.setCursor (0, 0); Skriv ut ett meddelande till LCD-skärmen.
digitalWrite (lCdPin, hög);
LCD.Print ("online").
Serial.Print ("Robot kontroll v6.1");
Serial.Print("\r");
Serial.Print("on-line");
Serial.Print("\r");
Delay(1000);
digitalWrite (lCdPin, låg);
}
void loop() {
ställa markören till kolumn 0, linje 1
(Obs: linje 1 är den andra raden, sedan räknar börjar med 0):
lcd.setCursor(0,0);
lcd.setCursor(0,3);
int värde1 = 100; variabel att lagra DUTY CYCLE F + B
int värde2 = 100; variabel att lagra DUTY CYCLE L + R
analogWrite(pwm1Pin,val1); ANGE ENHET-SPÄNNING TILL 2.5 (+/-)
analogWrite(pwm2Pin,val2); ANGE ENHET-SPÄNNING TILL 2.5 (+/-)
om det finns inkommande seriella data:
om (Serial.available() > 0) {
Läs den äldsta byten i följetong buffert:
Ja jag vet Goto kommandon, Ya'll hatem "Jag fungerar för mig
incomingByte = Serial.read();
om (incomingByte == ' o ') {goto DRIVEPOWER;}
om (incomingByte == 'T') {goto OVERRIDEON;}
om (incomingByte == "C") {goto OVERRIDEOFF;}
om (incomingByte == "I") {goto snabbare;}
om (incomingByte == hade ") {goto långsammare;}
om (incomingByte == "F") {goto fram;}
om (incomingByte == "B") {goto BAKÅTRIKTADE;}
om (incomingByte == "L") {gå till vänster;}
om (incomingByte == "R") {goto rättighet.}
Serial.Print ("Robot kontroll v6.1");
LCD.Print ("redo");
Serial.Print("\r");
hemkomst.
om det är en huvudstad O slå på enheten:
{DRIVEPOWER:
digitalWrite (ledPin, hög);
digitalWrite (lCdPin, hög);
LCD.Print ("DRIVE SYSTEM POWER");
Serial.Print ("DRIVE SYSTEM POWER");
Delay(500);
lcd.setCursor(0,0);
digitalWrite (ledPin, låg);
Delay(500);
digitalWrite (lCdPin, låg);
int val = 169;
LCD.Clear();
Serial.Print("\r");
Serial.flush();
hemkomst.
}
{OVERRIDEON:
om det är en T åsidosätta på:
digitalWrite (redPin, hög);
digitalWrite (lCdPin, hög);
LCD.Print ("över RIDE engagerad");
Serial.Print ("över RIDE engagerade");
Delay(500);
lcd.setCursor(0,0);
LCD.Clear();
Serial.flush();
Serial.Print("\r");
hemkomst.
}
om det är ett C åsidosätta:
{OVERRIDEOFF:
digitalWrite (redPin, låg);
digitalWrite (lCdPin, hög);
LCD.Print ("över RIDE dis engagerade");
Serial.Print ("över RIDE dis engagerade");
Delay(1000);
lcd.setCursor(0,0);
digitalWrite (lCdPin, låg);
LCD.Clear();
Serial.Print("\r");
Serial.flush();
hemkomst.
}
om det är en F att höja HASTIGHETEN
{SNABBARE:
digitalWrite (FASTPin, hög);
digitalWrite (lCdPin, hög);
LCD.Print ("snabbare");
Serial.Print ("snabbare");
Delay(500);
lcd.setCursor(0,0);
digitalWrite (FASTPin, låg);
Delay(500);
digitalWrite (lCdPin, låg);
LCD.Clear();
Serial.flush();
Serial.Print("\r");
hemkomst.
}
om det är en huvudstad S till lägre hastighet
{LÅNGSAMMARE:
digitalWrite (SLOWPin, hög);
digitalWrite (lCdPin, hög);
LCD.Print ("långsammare");
Serial.Print ("långsammare");
Delay(500);
lcd.setCursor(0,0);
digitalWrite (SLOWPin, låg);
Delay(500);
digitalWrite (lCdPin, låg);
LCD.Clear();
Serial.flush();
Serial.Print("\r");
hemkomst.
}
{FRAM:
digitalWrite (lCdPin, hög);
LCD.Print ("framåt");
Serial.Print ("framåt");
int värde2 = 200. variabel @ 200 DUTY CYCLE = framåt
analogWrite(pwm2Pin,val2); ANGE ENHET-SPÄNNING TILL FRAMÅT
Delay(1000);
lcd.setCursor(0,0);
digitalWrite (lCdPin, låg);
LCD.Clear();
Serial.flush();
Serial.Print("\r");
hemkomst.
}
{BAKÅT:
digitalWrite (lCdPin, hög);
LCD.Print ("bakåt");
Serial.Print ("bakåt");
int värde2 = 50; variabel @ 75 DUTY CYCLE = bakåt
analogWrite(pwm2Pin,val2); ANGE ENHET-SPÄNNINGEN TILL BAKÅT
Delay(1000);
lcd.setCursor(0,0);
digitalWrite (lCdPin, låg);
LCD.Clear();
Serial.flush();
Serial.Print("\r");
hemkomst.
}
{VÄNSTER:
digitalWrite (lCdPin, hög);
LCD.Print ("vänster");
Serial.Print ("vänster");
int värde1 = 50; variabel @ 100 DUTY CYCLE = vänster
analogWrite(pwm1Pin,val1); ANGE ENHET-SPÄNNING TILL VÄNSTER
Delay(1000);
lcd.setCursor(0,0);
digitalWrite (lCdPin, låg);
LCD.Clear();
Serial.flush();
Serial.Print("\r");
hemkomst.
}
{RÄTT:
digitalWrite (lCdPin, hög);
LCD.Print ("höger");
Serial.Print ("höger");
int värde1 = 220; variabel @ 200 DUTY CYCLE = höger
analogWrite(pwm1Pin,val1); ANGE ENHET-SPÄNNING TILL HÖGER
Delay(1000);
lcd.setCursor(0,0);
digitalWrite (lCdPin, låg);
LCD.Clear();
Serial.flush();
Serial.Print("\r");
hemkomst.
}
}
}