Étape 4: Téléchargez le croquis de l’arduino
Télécharger l’esquisse fournie à l’arduino.
Cette esquisse est est définie jusqu'à mettre l’arduino pour dormir si le pavé tactile n’a pas été enfoncé, et l’axe des y de chacun du joysticks remappés pour contrôler les servos de rotation opérer en conséquence.
But : Pour l’exploitation de deux servos à l’aide de deux manettes de jeu, qui seront utilisés pour exploiter les deux jambes pour un robot. En liaison faire cours, offert par l’Université de Floride du Sud.
Créé par : Brian Cantler / / Date : 01/12/2014
#include #include //this AVR bibliothèque contient des méthodes que la broche de //since sommeil modes #define interruptNumber 0 2 est utilisée pour l’interruption externe, à des contrôles est attaché pour interrompre le nombre 0 #define TouchPadPin 2 //connect touch sortie du capteur (aiguille « S ») à la D2 (et broche « G » au GND et la broche « V » à 5V)
volatils octets TouchPadEventFlag ; //all les variables qui sont modifiés dans un rapport de recherche internationale doivent être dimensionnées comme « volatile » //this variable sera alors utilisée pour dire la boucle principale qu’un événement d’interruption s’est produite.
const int servo1 = 3 ; identifie le premier servo comme étant connecté à la broche numérique 3 const int servo2 = 10 ; identifie le second servo comme étant connecté à la broche numérique 10 const int joy1 = 3 ; identifie le premier joystick comme étant connecté à la broche analogique 3 const int joy2 = 4 ; identifie le deuxième joystick comme étant relié à la broche analogique 4
int servoVal ; variable utilisée pour lire les valeurs de la broche analogique
Servo myservo1 ; crée l’objet de servo pour contrôler le premier servo Servo myservo2 ; crée l’objet de servo pour contrôler le second servo
void setup() {}
Servos myservo1.attach(servo1) ; attache le premier myservo2.attach(servo2) de servo ; attache le second servo
Initialiser le Serial Serial.begin(9600) ; pinMode(13,OUTPUT) ; ensembles broche 13 comme une sortie, donc nous pouvons utiliser le bâti en conduit sur l’arduino à surveiller lors de l’arduino est alimenté sur digitalWrite(13,LOW) ; tourne broche 13, un de la construction à LEDs sur l’arduino, hors pinMode (entrée, TouchPadPin) ; définit l’axe de l’interruption comme un digitalWrite(2,HIGH) d’entrée ; active la résistance de pull-up interne pour tirer à haute quand la tablette tactile n’a pas été enfoncée
}
void loop() {}
Affiche les valeurs de la manette à l’aide de la série monitor outputJoystick() ;
Lire sa manette de jeu (valeur comprise entre 0 et 1023) servoVal = analogRead(joy1) ; servoVal = carte (servoVal, 0, 2500, 70, 180) ; met à l’échelle des valeurs de manette de jeu pour pouvoir l’utiliser avec le servo (résultat entre 90 et 180)
myservo2.Write(servoVal) ; règle la vitesse des 360 servos selon la valeur à l’échelle
Lire la manette de jeu de deux (valeur comprise entre 0 et 1023) servoVal = analogRead(joy2) ; servoVal = carte (servoVal, 0, 2500, 70, 180) ; met à l’échelle des valeurs de manette de jeu pour pouvoir l’utiliser avec le servo (résultat entre 90 et 180)
myservo1.Write(servoVal) ; règle la vitesse des 360 servos selon la valeur à l’échelle
Delay(15) ; attend que le servo d’accélérer à l’échelle de valeur sleepSetup() ; reste à 27 ~ mA jusqu'à ce que la touche est enfoncée sur la broche 2
}
/ ** * Affiche les valeurs de joystick dans le moniteur de la série * / void outputJoystick() {}
Serial.Print(analogRead(joy1)) ; affiche les valeurs de manette de jeu pour le premier joystick dans le moniteur série Serial.print (« - joystick_one---") ; identifie les valeurs affichées sont pour le premier joystick Serial.print(analogRead(joy2)) ; affiche les valeurs de manette de jeu pour le deuxième manche à balai dans la série surveiller Serial.println (« - joystick_two---") ; identifie les valeurs affichées sont pour le deuxième joystick}
void sleepSetup() {sleep_enable() ; attachInterrupt (0, pinInterrupt, LOW); //Sets broche 2 comme une interruption et attache Interrupt Service Routine (ISR) set_sleep_mode(SLEEP_MODE_PWR_DOWN) ; //define éteignez digitalWrite(13,LOW) mode sommeil ; //turns la LED off pour indiquer le sommeil mode sleep_cpu() ; le bit //Set sommeil enable (SE), ce qui place l’ATmega sommeil Serial.println ("strandbot est sous tension"); //When il se réveille en raison de l’interruption du programme se poursuit avec l’instruction suivant sleep_cpu() digitalWrite (13 ÉLEVÉ) ; tourne le construit dans la LED sur l’arduino pour indiquer que l’arduino a réveillé}
void pinInterrupt() //ISR {sleep_disable() ; //this est important. Il est possible que l’interruption est appelée entre l’exécution de « attachInterrupt(...) » et sleep_CPU() dans la boucle principale //if qui survient sans la sleep_disable() dans l’ISR, l’ISR s’appellerait, l’interruption détaché et le dispositif mis en sommeil. puisque l’interruption serait handicapée à ce moment-là, il n’y aurait aucun moyen de se réveiller plus l’appareil. en mettant sleep_disable() dans l’ISR, sleep_cpu() ne serait pas efficace au cours de cette boucle, c'est-à-dire la boucle principale serait courir un plus temps //and puis attacher correctement l’interruption avant de frapper le sleep_cpu() une seconde fois. À ce moment que l’appareil serait aller dormir, mais //the interruption serait maintenant activé, c'est-à-dire réveil peut être induit. detachInterrupt (0); //disable l’interruption. Effectivement, cela debounces le mécanisme d’interruption pour éviter les appels multiples d’interruption.
}