Étape 9: cerveau
Je n’ai pas écrit un programme depuis GWbasic. Old school, que je sais. Je me rends compte que ce programme ressemble beaucoup à un flashback de base. Toutefois, il fonctionne juste comme je le voulais.
/*
ROBOT VOITURE
Stephen J. Gardiner, CPS
Création 2012
Stephen J. Gardiner, CPS
*/
inclure le code de bibliothèque :
#include < LiquidCrystal.h >
initialiser la bibliothèque de LCD
Innovente lcd (12, 11, 5, 4, 3, 2) ;
const int ledPin = 16 ; la broche DRIVE SYSTEM POWER
const int lCdPin = 13 ; lCdPin
const int redPin = 8 ; OVER-RIDE ENGAGÉ
const int FASTPin = 14 ; Speed-Up
const int SLOWPin = 15 ; Vitesse-vers le bas
const int pwm1Pin = 9 ; Broche 1 de PWM
const int pwm2Pin = 10 ; Broche 2 PWM
int incomingByte ; une variable de lire des données série entrantes dans
int OVERRIDEOFF ;
void setup() {}
Serial.Begin(9600) ; initialiser la communication série :
initialiser les tiges de contrôle comme une sorties :
pinMode (ledPin, sortie) ;
pinMode (lCdPin, sortie) ;
pinMode (redPin, sortie) ;
pinMode (FASTPin, sortie) ;
pinMode (SLOWPin, sortie) ;
pinMode (pwm1Pin, sortie) ;
pinMode (pwm2Pin, sortie) ;
LCD.Begin(16,4) ; mis en place nombre de l’écran LCD de colonnes et de lignes :
lcd.setCursor (0, 0) ; Imprimer un message à l’écran LCD.
digitalWrite (lCdPin, HIGH) ;
LCD.Print ("en ligne") ;
Serial.Print ("Robot Control v6.1 ») ;
Serial.Print("\r") ;
Serial.Print("on-line") ;
Serial.Print("\r") ;
Delay(1000) ;
digitalWrite (lCdPin, basse) ;
}
void loop() {}
régler le curseur sur la colonne 0, ligne 1
(Remarque : la ligne 1 est la seconde ligne, puisque le décompte commence par 0) :
lcd.setCursor(0,0) ;
lcd.setCursor(0,3) ;
int val1 = 100 ; variable pour stocker le DUTY CYCLE F + B
int val2 = 100 ; variable pour stocker le DUTY CYCLE L + R
analogWrite(pwm1Pin,val1) ; TENSION RÉGLÉE À 2.5 (+/-)
analogWrite(pwm2Pin,val2) ; TENSION RÉGLÉE À 2.5 (+/-)
voir s’il y a les données en série :
Si (Serial.available() > 0) {}
lire l’octet le plus ancien dans le tampon de la série :
Oui je sais les commandes Goto, Ya'll hatem "je travaille pour moi
incomingByte = Serial.read() ;
Si (incomingByte == ' o ') {goto DRIVEPOWER;}
Si (incomingByte == ' t ') {goto OVERRIDEON;}
Si (incomingByte == « C ») {goto OVERRIDEOFF;}
Si (incomingByte == « I ») {goto FASTER;}
Si (incomingByte == a ') {goto SLOWER;}
Si (incomingByte == « F ») {goto avec impatience;}
Si (incomingByte == « B ») {goto BACKWARD;}
Si (incomingByte == « L ») {goto LEFT;}
Si (incomingByte == « R ») {goto droite;}
Serial.Print ("Robot Control v6.1 ») ;
LCD.Print ("READY") ;
Serial.Print("\r") ;
retour ;
Si c’est une capitale O allumez le lecteur :
{DRIVEPOWER :
digitalWrite (ledPin, HIGH) ;
digitalWrite (lCdPin, HIGH) ;
LCD.Print ("DRIVE SYSTEM POWER") ;
Serial.Print ("DRIVE SYSTEM POWER") ;
Delay(500) ;
lcd.setCursor(0,0) ;
digitalWrite (ledPin, basse) ;
Delay(500) ;
digitalWrite (lCdPin, basse) ;
int val = 169 ;
LCD.Clear() ;
Serial.Print("\r") ;
Serial.Flush() ;
retour ;
}
{OVERRIDEON :
Si c’est un T substituer sur :
digitalWrite (redPin, HIGH) ;
digitalWrite (lCdPin, HIGH) ;
LCD.Print (« over-RIDE ENGAGED ») ;
Serial.Print (« over-RIDE engagé") ;
Delay(500) ;
lcd.setCursor(0,0) ;
LCD.Clear() ;
Serial.Flush() ;
Serial.Print("\r") ;
retour ;
}
Si c’est un C substituer au large :
{OVERRIDEOFF :
digitalWrite (redPin, basse) ;
digitalWrite (lCdPin, HIGH) ;
LCD.Print (« over-RIDE dés-"engagé) ;
Serial.Print (« over-RIDE dés-"engagé) ;
Delay(1000) ;
lcd.setCursor(0,0) ;
digitalWrite (lCdPin, basse) ;
LCD.Clear() ;
Serial.Print("\r") ;
Serial.Flush() ;
retour ;
}
Si c’est un F pour augmenter Vitesse
{PLUS VITE :
digitalWrite (FASTPin, élevé) ;
digitalWrite (lCdPin, HIGH) ;
LCD.Print ("FASTER") ;
Serial.Print ("plus rapide") ;
Delay(500) ;
lcd.setCursor(0,0) ;
digitalWrite (FASTPin, faible) ;
Delay(500) ;
digitalWrite (lCdPin, basse) ;
LCD.Clear() ;
Serial.Flush() ;
Serial.Print("\r") ;
retour ;
}
Si c’est un capital à basse vitesse S
{PLUS LENT :
digitalWrite (SLOWPin, élevé) ;
digitalWrite (lCdPin, HIGH) ;
LCD.Print (« lent ») ;
Serial.Print (« lent ») ;
Delay(500) ;
lcd.setCursor(0,0) ;
digitalWrite (SLOWPin, basse) ;
Delay(500) ;
digitalWrite (lCdPin, basse) ;
LCD.Clear() ;
Serial.Flush() ;
Serial.Print("\r") ;
retour ;
}
{AVEC IMPATIENCE :
digitalWrite (lCdPin, HIGH) ;
LCD.Print ("avant") ;
Serial.Print ("avant") ;
int val2 = 200 ; variable @ 200 DUTY CYCLE = FORWARD
analogWrite(pwm2Pin,val2) ; LA VALEUR TENSION VERS L’AVANT
Delay(1000) ;
lcd.setCursor(0,0) ;
digitalWrite (lCdPin, basse) ;
LCD.Clear() ;
Serial.Flush() ;
Serial.Print("\r") ;
retour ;
}
{EN ARRIÈRE :
digitalWrite (lCdPin, HIGH) ;
LCD.Print ("arrière") ;
Serial.Print ("descendante") ;
int val2 = 50 ; variable @ 75 DUTY CYCLE = BACKWARD
analogWrite(pwm2Pin,val2) ; EN VOITURE-TENSION À L’ARRIÈRE
Delay(1000) ;
lcd.setCursor(0,0) ;
digitalWrite (lCdPin, basse) ;
LCD.Clear() ;
Serial.Flush() ;
Serial.Print("\r") ;
retour ;
}
{LEFT :
digitalWrite (lCdPin, HIGH) ;
LCD.Print ("LEFT") ;
Serial.Print ("gauche") ;
int val1 = 50 ; variable @ 100 DUTY CYCLE = gauche
analogWrite(pwm1Pin,val1) ; EN VOITURE-TENSION À GAUCHE
Delay(1000) ;
lcd.setCursor(0,0) ;
digitalWrite (lCdPin, basse) ;
LCD.Clear() ;
Serial.Flush() ;
Serial.Print("\r") ;
retour ;
}
{DROIT :
digitalWrite (lCdPin, HIGH) ;
LCD.Print ("droite") ;
Serial.Print ("droite") ;
int val1 = 220 ; variable @ 200 DUTY CYCLE = droite
analogWrite(pwm1Pin,val1) ; EN VOITURE-TENSION À DROITE
Delay(1000) ;
lcd.setCursor(0,0) ;
digitalWrite (lCdPin, basse) ;
LCD.Clear() ;
Serial.Flush() ;
Serial.Print("\r") ;
retour ;
}
}
}