Stap 9: hersenen
Ik heb niet een programma geschreven sinds GWbasic. Old school die ik weet. Ik realiseer me dat dit programma kijkt een partij zoals een fundamentele flashback. Het werkt echter alleen als ik wilde.
/*
ROBOT STATION
Stephen J. Gardiner, CPS
Gemaakte 2012
Stephen J. Gardiner, CPS
*/
de code van de bibliotheek omvatten:
#include < LiquidCrystal.h >
initialiseren van de LCD-bibliotheek
LiquidCrystal lcd (12, 11, 5, 4, 3, 2);
Const int ledPin = 16; de pin SYSTEEMMACHT rijden
Const int lCdPin = 13; lCdPin
Const int redPin = 8; OVERMATIGE RIT BEZIG
Const int FASTPin = 14; Speed-up
Const int SLOWPin = 15; Snelheid-Down
Const int pwm1Pin = 9; PWM Pin 1
Const int pwm2Pin = 10; PWM Pin2
int incomingByte; een variabele om inkomende seriële gegevens in te lezen
int OVERRIDEOFF;
VOID Setup {}
Serial.begin(9600); seriële communicatiepoorten te initialiseren:
Initialiseer de pinnen van de controle als een uitgangen:
pinMode (ledPin, OUTPUT);
pinMode (lCdPin, OUTPUT);
pinMode (redPin, OUTPUT);
pinMode (FASTPin, uitvoer);
pinMode (SLOWPin, uitvoer);
pinMode (pwm1Pin, OUTPUT);
pinMode (pwm2Pin, OUTPUT);
LCD.begin(16,4); de LCD's aantal kolommen en rijen instellen:
lcd.setCursor (0, 0); Een bericht op het LCD-scherm afdrukt.
digitalWrite (lCdPin, hoge);
LCD.Print ("ON-LINE");
Serial.Print ("Robot controle v6.1");
Serial.Print("\r");
Serial.Print("on-line");
Serial.Print("\r");
delay(1000);
digitalWrite (lCdPin, laag);
}
void loop {}
Stel de cursor op de kolom 0, lijn 1
(Opmerking: lijn 1 is de tweede rij, aangezien tellen met 0 begint):
lcd.setCursor(0,0);
lcd.setCursor(0,3);
int val1 = 100; variabele op te slaan, DUTY CYCLE F + B
int val2 = 100; variabele op te slaan, DUTY CYCLE L + R
analogWrite(pwm1Pin,val1); DRIVE VOLTAGE NAAR 2.5 (+/-) INSTELLEN
analogWrite(pwm2Pin,val2); DRIVE VOLTAGE NAAR 2.5 (+/-) INSTELLEN
zien of er binnenkomende seriële data:
Als (Serial.available() > 0) {}
Lees de oudste byte in de seriële buffer:
Ja ik weet Goto opdrachten, Ya'll hatem' ik werkt voor mij
incomingByte = Serial.read();
Als (incomingByte == ' o ') {goto DRIVEPOWER;}
Als (incomingByte == 'T') {goto OVERRIDEON;}
Als (incomingByte == 'C') {goto OVERRIDEOFF;}
Als (incomingByte == 'I') {goto sneller;}
Als (incomingByte == had') {goto TRAGER;}
Als (incomingByte == 'F') {goto vooruit;}
Als (incomingByte == 'B') {goto BACKWARD;}
Als (incomingByte == 'L') {goto links;}
Als (incomingByte == 'R') {goto recht;}
Serial.Print ("Robot controle v6.1");
LCD.Print ("READY");
Serial.Print("\r");
terugkeer;
Als er een hoofdletter O Schakel het station:
{DRIVEPOWER:
digitalWrite (ledPin, hoge);
digitalWrite (lCdPin, hoge);
LCD.Print ("DRIVE systeem POWER");
Serial.Print ("DRIVE systeem POWER");
delay(500);
lcd.setCursor(0,0);
digitalWrite (ledPin, laag);
delay(500);
digitalWrite (lCdPin, laag);
int val = 169;
LCD.Clear();
Serial.Print("\r");
Serial.Flush();
terugkeer;
}
{OVERRIDEON:
Als het een T OVERSCHRIJVEN op:
digitalWrite (redPin, hoge);
digitalWrite (lCdPin, hoge);
LCD.Print ("overmatige rit ENGAGED");
Serial.Print ("overmatige RIDE bezig");
delay(500);
lcd.setCursor(0,0);
LCD.Clear();
Serial.Flush();
Serial.Print("\r");
terugkeer;
}
Als het een C OVERSCHRIJVEN uitgeschakeld is:
{OVERRIDEOFF:
digitalWrite (redPin, laag);
digitalWrite (lCdPin, hoge);
LCD.Print ("overmatige RIDE DIS bezig");
Serial.Print ("overmatige RIDE DIS bezig");
delay(1000);
lcd.setCursor(0,0);
digitalWrite (lCdPin, laag);
LCD.Clear();
Serial.Print("\r");
Serial.Flush();
terugkeer;
}
Als er een F te verhogen snelheid
{SNELLER:
digitalWrite (FASTPin, hoge);
digitalWrite (lCdPin, hoge);
LCD.Print ("sneller");
Serial.Print ("sneller");
delay(500);
lcd.setCursor(0,0);
digitalWrite (FASTPin, laag);
delay(500);
digitalWrite (lCdPin, laag);
LCD.Clear();
Serial.Flush();
Serial.Print("\r");
terugkeer;
}
Als er een hoofdletter S aan de lagere snelheid
{TRAGER:
digitalWrite (SLOWPin, hoge);
digitalWrite (lCdPin, hoge);
LCD.Print ("TRAGER");
Serial.Print ("langzamer");
delay(500);
lcd.setCursor(0,0);
digitalWrite (SLOWPin, laag);
delay(500);
digitalWrite (lCdPin, laag);
LCD.Clear();
Serial.Flush();
Serial.Print("\r");
terugkeer;
}
{NAAR VOREN:
digitalWrite (lCdPin, hoge);
LCD.Print ("vooruit");
Serial.Print ("vooruit");
int val2 = 200; variabele @ 200 DUTY CYCLE = doorsturen
analogWrite(pwm2Pin,val2); DRIVE VOLTAGE INGESTELD OP VOORWAARTS
delay(1000);
lcd.setCursor(0,0);
digitalWrite (lCdPin, laag);
LCD.Clear();
Serial.Flush();
Serial.Print("\r");
terugkeer;
}
{ACHTERUIT:
digitalWrite (lCdPin, hoge);
LCD.Print ("BACKWARD");
Serial.Print ("achteruit");
int val2 = 50; variabele @ 75 DUTY CYCLE = achterwaarts
analogWrite(pwm2Pin,val2); SET STATION-VOLTAGE OM ACHTERUIT
delay(1000);
lcd.setCursor(0,0);
digitalWrite (lCdPin, laag);
LCD.Clear();
Serial.Flush();
Serial.Print("\r");
terugkeer;
}
{LINKS:
digitalWrite (lCdPin, hoge);
LCD.Print ("links");
Serial.Print ("links");
int val1 = 50; variabele @ TAAKCYCLUS van 100 = links
analogWrite(pwm1Pin,val1); DRIVE VOLTAGE NAAR LINKS INSTELLEN
delay(1000);
lcd.setCursor(0,0);
digitalWrite (lCdPin, laag);
LCD.Clear();
Serial.Flush();
Serial.Print("\r");
terugkeer;
}
{RECHT:
digitalWrite (lCdPin, hoge);
LCD.Print ("recht");
Serial.Print ("recht");
int val1 = 220; variabele @ 200 DUTY CYCLE = rechts
analogWrite(pwm1Pin,val1); SET STATION-SPANNING NAAR RECHTS
delay(1000);
lcd.setCursor(0,0);
digitalWrite (lCdPin, laag);
LCD.Clear();
Serial.Flush();
Serial.Print("\r");
terugkeer;
}
}
}