Étape 5: Arduino Code - Machine de Test
Avant d’intégrer le moteur, les LEDs et les capteurs flex peuvent être testés :
Il y a deux modes de difficulté pour le module de contact.
Tout d’abord, toutes les 3 LEDs s’allument et le chien peuvent frapper n’importe quel levier qu’ils choisissent de livrer un régal du distributeur.
En second lieu, une seule LED s’allume et le chien doit frapper le levier correspondant à la lumière de livrer un régal du distributeur.
Second niveau de Difficulté :
Le second niveau de Difficulté est en fait le plus facile au programme et le code est comme suit :
#include < TrueRandom.h > /* Pour LEDs */ int ledPinG = 7 ; Broche 7 est une LED verte void setup() {} } void loop() x = TrueRandom.random (1, 4) ; J’ai utilisé cette bibliothèque TrueRandom que j’ai trouvé en ligne, int sens ; } int SensorRead() {} digitalWrite (ledPin, HIGH) ; Tour à tour sur l’une des LEDs sur le niveau qui a été choisi au hasard. capteur int ; capteur = analogRead(analogPin) ; Lit la valeur du levier le courant de la sonde de la flex et définit un seuil de 3 tandis que (capteur < initValHigh & & capteur > initValLow) / / tant que la valeur de la sonde lire dans +/-6 de la valeur initiale, la broche analogique } Delay(del) ;
MATÉRIEL :
//
Pour les capteurs de Flex (non pas que les broches de capteur flex sont interchangeables)
Goupille de capteur = GND
Goupille de capteur = en analogique, avec résistance de 10K à + 5V
+ code pin = numérique en pin
-broche = résistance 470 au GND
int ledPinR = 6 ; BROCHE 6 est une LED rouge
int ledPinB = 5 ; BROCHE 6 est une LED bleue
int ledPin ;
int analogPin ;
int del = 1000 ;
int x ;
Serial.Begin(9600) ;
pinMode (ledPinG, sortie) ; Réglez toutes les broches de la LED sur sortie
pinMode (ledPinR, sortie) ;
pinMode (ledPinB, sortie) ;
pinMode (ledPin, sortie) ;
{
digitalWrite (ledPinG, HIGH) ; Premier flash LED pour indiquer l’entrée prête
digitalWrite (ledPinR, HIGH) ;
digitalWrite (ledPinB, HIGH) ;
Delay(del) ;
digitalWrite (ledPinG, basse) ;
digitalWrite (ledPinR, basse) ;
digitalWrite (ledPinB, basse) ;
en raison d’une erreur connue avec fonction aléatoire de l’Arduino étant non aléatoire
Serial.println(x) ;
sens = SensorRead() ; Appelez la fonction SensorRead()
Si (x == 1) / / cette stamement if-elseif liens le nombre aléatoire (1, 2 ou 3) avec un levier.
{
analogPin = 0 ; BROCHE analogique 0 est activé
ledPin = 7 ; Ce voyant correspond avec le levier connecté à analogPin 0
}
else if (x == 2)
{
analogPin = 1 ; Ce voyant correspond avec le levier connecté à analogPin 1
ledPin = 6 ;
}
else if (x == 3)
{
analogPin = 2 ; Ce voyant correspond avec le levier connecté à analogPin 2
ledPin = 5 ;
}
int initVal = capteur ;
int initValHigh = 6 + capteur ;
int initValLow = capteur - 6 ;
continue à lire. Casser le tout en boucle des moyens que le levier correct a été enfoncé.
{
capteur = analogRead(analogPin) ;
Serial.println(Sensor) ;
Serial.println(initVal) ;
digitalWrite (ledPin, basse) ; Le voyant est éteint.
}
FIN DU CODE
Voici quelques notes sur le code :
--J’ai utilisé la bibliothèque de TrueRandom au lieu de la commande intégrée d’aléatoire Arduino en raison d’un bug connu dans lequel la fonction intégrée au hasard n’est pas réellement aléatoire du tout. Le site de la bibliothèque est très clair sur la façon de l’appliquer.
--Vous pouvez suivre les lectures de goupille sur le Serial Monitor avec ce code. Vous pouvez voir les lectures constamment mise à jour pour le NIP actuel du capteur. Si votre NIP est fluctuant plus de +/-6 à partir de la valeur initiale sans être touché, vous devrez peut-être augmenter la valeur. Jouer avec elle pour trouver la bonne pression, où il n’est pas éteint au hasard, mais répond également au moindre toucher. Nous voulons que le chien pour obtenir un régal tout moment qu'il arrive à courir contre le levier correct.
Premier niveau de Difficulté :
Le premier niveau de Difficulté fonctionne tant qu’aucun des trois leviers est enfoncé. Vous pouvez y parvenir en taping tous trois leviers ensemble et en utilisant le code suivant (ce qui fondamentalement triplicates le second niveau code ci-dessus). La fonction TrueRandom n’est plus nécessaire.
J’ai également ajouté la fonctionnalité de moteur à la fin du code afin que le moteur tourne pendant 1 seconde, assez pour une dose de gâteries à livrer.
/* MATÉRIEL : Pour LEDs */ int ledPinG = 7 ; Broche 7 est une LED verte void setup() {}
//
Pour les capteurs de Flex (non pas que les broches de capteur flex sont interchangeables)
Goupille de capteur = GND
Goupille de capteur = en analogique, avec résistance de 10K à + 5V
+ code pin = numérique en pin
-broche = résistance 470 au GND
int ledPinR = 6 ; BROCHE 6 est une LED rouge
int ledPinB = 5 ; BROCHE 5 est une LED bleue
int analogPin0 ;
int analogPin1 ;
int analogPin2 ;
int del = 1000 ;
int PWM_B = 11 ; Ces deux broches sont déjà réservés sur le bouclier d’arduMoto
int DIR_B = 13 ;
Serial.Begin(9600) ;
pinMode (ledPinG, sortie) ; Réglez toutes les broches de la LED sur sortie
pinMode (ledPinR, sortie) ;
pinMode (ledPinB, sortie) ;
pinMode (PWM_B, sortie) ; Broches de contrôle pour être sorties
pinMode (DIR_B, sortie) ;
}
void loop()
{
digitalWrite (ledPinG, HIGH) ; Premier flash LED pour indiquer l’entrée prête
digitalWrite (ledPinR, HIGH) ;
digitalWrite (ledPinB, HIGH) ;
Delay(del) ;
digitalWrite (ledPinG, basse) ;
digitalWrite (ledPinR, basse) ;
digitalWrite (ledPinB, basse) ;
int sens ;
sens = SensorRead() ; Appelez la fonction SensorRead()
}
int SensorRead() {}
digitalWrite (ledPinG, HIGH) ;
digitalWrite (ledPinR, HIGH) ;
digitalWrite (ledPinB, HIGH) ;
Capteur1 int ;
sensor2 int ;
sensor3 int ;
Capteur1 = analogRead(analogPin0) ;
sensor2 = analogRead(analogPin1) ;
sensor3 = analogRead(analogPin2) ;
int initVal1 = Capteur1 ;
int initVal2 = sensor2 ;
int initVal3 = sensor3 ;
int initValHigh1 = 6 + Capteur1 ;
int initValHigh2 = 6 + sensor2 ;
int initValHigh3 = 6 + sensor3 ;
int initValLow1 = Capteur1 - 6 ;
int initValLow2 = sensor2 - 6 ;
int initValLow3 = sensor3 - 6 ;
tandis que (Capteur1 < initValHigh1 & & Capteur1 > initValLow1)
{
Capteur1 = analogRead(analogPin0) ;
sensor2 = analogRead(analogPin1) ;
sensor3 = analogRead(analogPin2) ;
Serial.println(Sensor1) ;
Serial.println(initVal1) ;
}
digitalWrite (ledPinG, basse) ;
Delay(100) ;
digitalWrite (ledPinR, basse) ;
Delay(100) ;
digitalWrite (ledPinB, basse) ;
Delay(100) ;
digitalWrite (ledPinB, HIGH) ;
Delay(100) ;
digitalWrite (ledPinR, HIGH) ;
digitalWrite (ledPinB, basse) ;
Delay(100) ;
digitalWrite (ledPinG, HIGH) ;
digitalWrite (ledPinR, basse) ;
Delay(100) ;
digitalWrite (ledPinG, basse) ;
Delay(100) ;
digitalWrite (DIR_B, élevé) ; Peut être utilisée moteur la direction opposée, 1 - haute, 2 - basse
analogWrite (PWM_B, 255) ; définir le moteur de fonctionner à 255/255 = facteur de marche 100 % pour obtenir le couple requis.
Delay(1000) ;
analogWrite(PWM_B,0) ; tour du moteur
Delay(1000) ;
}
FIN DU CODE