Étape 4: Code
S’il vous plaît respecter qu’il a fallu un certain temps à comprendre et à écrire ce code :
Code par Jason McLaughlin
2015
const int channel_a_enable = 6 ; démarrage moteur a gauche
const int channel_a_input_1 = 4 ; positif/négatif 1
const int channel_a_input_2 = 7 ; positif/négatif 2
const int channel_b_enable = 5 ; démarrer le moteur b /right
const int channel_b_input_3 = 3 ; positif/négatif 1
const int channel_b_input_4 = 2 ; positif/négatif 2
const int RightSensor = A1 ; Lire le capteur droit
const int LeftSensor = A2 ; Lire le capteur gauche
Définitions de variable
int SensorLeft ; Cette option stocke la valeur de l’axe gauche capteur à utiliser plus tard dans le sketch
int SensorRight ; Cette option stocke la valeur de l’axe droit capteur à utiliser plus tard dans le sketch
int SensorDifference ; Cette valeur est utilisée pour déterminer la différence entre la gauche et la droite
void setup() {}
pinMode (channel_a_enable, sortie) ; Canal A activer
pinMode (channel_a_input_1, sortie) ; Une entrée 1 canal
pinMode (channel_a_input_2, sortie) ; Une entrée 2 Channel
pinMode (channel_b_enable, sortie) ; Permettre à canal B
pinMode (channel_b_input_3, sortie) ; Entrée du canal B 3
pinMode (channel_b_input_4, sortie) ; Entrée du canal B 4
pinMode (entrée, LeftSensor) ; Définit cette broche en tant qu’entrée. L’Arduino lira les valeurs de cette broche.
pinMode (entrée, RightSensor) ; Définit cette broche en tant qu’entrée. L’Arduino lira les valeurs de cette broche.
digitalWrite (A1, élevé) ; Permet de LDR
digitalWrite (A2, élevé) ; Permet de LDR
Serial.Begin(9600) ; Permet une connexion série par le biais de l’Arduino USB ou UART (bornes 0 & 1). Notez que le débit en bauds correspond à 9600
Serial.println (« \nBeginning lumière recherche de comportement ») ; Placé à la fin de void Setup() pour qu’il soit s’exécute une seule fois, juste avant le void Loop()}
void loop() {SensorLeft = 1023 - analogRead(LeftSensor); / / cela lit la valeur de la sonde, puis l’enregistre à l’entier correspondant.
Delay(1) ;
SensorRight = 1023 - analogRead(RightSensor) ; Ce lit la valeur de la sonde, puis l’enregistre à l’entier correspondant.
Delay(1) ;
SensorDifference = abs (SensorLeft - SensorRight) ; Il calcule la différence entre les deux capteurs et puis l’enregistre à un entier.
Cette section de l’esquisse est utilisée pour imprimer les valeurs de la / / capteurs par le biais de série de l’ordinateur. Utile pour déterminer les / / si les capteurs fonctionnent, et si le code fonctionne aussi correctement.
Serial.Print ("capteur à gauche =") ; Imprime le texte à l’intérieur des guillemets.
Serial.Print(SensorLeft) ; Imprime la valeur de la sonde de gauche.
Serial.Print("\t") ; Imprime un onglet (espace).
Serial.Print ("capteur à droite =") ; Imprime le texte à l’intérieur des guillemets.
Serial.Print(SensorRight) ; Imprime la valeur de la sonde de droit.
Serial.Print("\t") ; Imprime un onglet (espace).
Cette section de l’esquisse est ce qu’interperets effectivement les données et exécute ensuite les moteurs en conséquence.
Si (SensorLeft > SensorRight & & SensorDifference > 75) {/ / Ceci est interprété comme si le capteur de gauche indique plus de lumière que le capteur de droite, pour ce faire :
analogWrite (channel_a_enable, 255) ;
digitalWrite (channel_a_input_1, basse) ;
digitalWrite (channel_a_input_2, HIGH) ;
analogWrite (channel_b_enable, 255) ;
digitalWrite (channel_b_input_3, HIGH) ;
digitalWrite (channel_b_input_4, basse) ;
Serial.println("left") ; Ceci affiche gauche lorsque le robot serait vraiment tourner à gauche.
Delay(50) ;
}
Si (SensorLeft < SensorRight & & SensorDifference > 75) {/ / Ceci est interprété comme si le capteur gauche mesure moins de lumière que le capteur de droite, pour ce faire :
analogWrite (channel_a_enable, 255) ;
digitalWrite (channel_a_input_1, HIGH) ;
digitalWrite (channel_a_input_2, basse) ;
analogWrite (channel_b_enable, 255) ;
digitalWrite (channel_b_input_3, basse) ;
digitalWrite (channel_b_input_4, HIGH) ;
Serial.println("Right") ; Ceci affiche droit lorsque le robot aurait en fait tourner à droite.
Delay(50) ;
}
ElseIf (SensorDifference < 75) {/ / Ceci est interprété comme si la différence entre les deux capteurs est moins 125 (expérience en fonction de nos capteurs), pour ce faire :
analogWrite (channel_a_enable, 255) ;
digitalWrite (channel_a_input_1, HIGH) ;
digitalWrite (channel_a_input_2, basse) ;
analogWrite (channel_b_enable, 255) ;
digitalWrite (channel_b_input_3, HIGH) ;
digitalWrite (channel_b_input_4, basse) ;
Serial.println("Forward") ; Cela imprime vers l’avant lorsque le robot serait en fait aller de l’avant.
Delay(50) ;
}
Serial.Print("\n") ;
}