Prototype de Whac-A-Mouse (4 / 5 étapes)

Étape 4: Préparer le Code de l’Arduino

Inclure la bibliothèque jointe ci-dessous. La bibliothèque de servo est la servo par défaut qui vient avec le logiciel de croquis d’Arduino.

Définir les Variables constantes

Vous devrez définir ces valeurs selon le protocole et les codes de télécommande que vous utilisez. Ce sont mes passe-temps distant. Consulter la librairie IRLib ci-joint pour les références sur le protocole de IRLib.

 #define MY_PROTOCOL NEC#define RIGHT_ARROW 0xFF02FD // PLAY main loop (power)#define LEFT_ARROW 0xFF22DD // SERVO POSITION 2#define POWER 0xFFA25D // SERVO POSITION 2 POWER#define PLAY 0xFFC23D // PLAY AUTO LOOP#define RETURN 0xFFB04F // LEAVE AUTOMATIC LOOP#define MUTE 0xFFE21D // OFF const int SFX_4 = 4; const int SFX_2 = 5;const int SFX_RST = 6;const int SFX_vol = 7;const int sensor1_pwr = A4;const int sensor2_pwr = A5;const int sensor1 = A0;const int sensor2 = A1;const int LEDON = 10; 

Définir la modification des Variables

 int _SFX_4 = HIGH; int _SFX_2 = HIGH;int _SFX_RST = HIGH;int _SFX_vol = HIGH;int pos1;int pos2;int Read1NEW = 400;int Read1OLD = 400;int Read2NEW = 400;int Read2OLD = 400;int state = 0int n = 0;int m = 0;int w = 0;int prevMillis = 0;long previousMillis = 0; 

Définir des servos :

 Servo servo1; // Define servoServo servo2; // Define servo 

Utilisez ce segment de code pour le récepteur IR :

 IRrecv My_Receiver(11); //Receive on pin 11IRdecode My_Decoder; 

Programme d’installation :

 void setup(){ // begin setupSerial.begin(9600); // Begin serial communicationMy_Receiver.No_Output(); // Turn off any unused IR LED output circuitMy_Receiver.enableIRIn(); // Starts the receiver for IR remote 

Définir des Modes de Pin

 pinMode(SFX_2,OUTPUT);digitalWrite(SFX_2,_SFX_2);pinMode(SFX_4,OUTPUT);digitalWrite(SFX_4,_SFX_4);pinMode(SFX_vol,OUTPUT);digitalWrite(SFX_vol,_SFX_vol);pinMode(SFX_RST,OUTPUT);digitalWrite(SFX_RST,_SFX_RST);pinMode(sensor1_pwr,OUTPUT);digitalWrite(sensor1_pwr,HIGH);pinMode(sensor1_pwr,OUTPUT);digitalWrite(sensor1_pwr,HIGH);pinMode(sensor2_pwr,OUTPUT);digitalWrite(sensor2_pwr,HIGH); pinMode(LEDON,OUTPUT);digitalWrite(LEDON,LOW); 

Fixer les Servos :

 servo1.attach(8);servo2.attach(9); 
 } // end setup 

Boucle principale :

Ce segment de code est commenté afin que je ne vais pas répéter le but de codes.

 void loop(){ // begin main loop bailout1:{ servo1.detach(); // Detach Servo, prevents servo noise servo2.detach(); // Detach Servo, prevents servo noise int V1 = 0; // Variable for while loop below while (V1 == 0){ if (My_Receiver.GetResults(&My_Decoder)) { My_Decoder.decode(); if(My_Decoder.decode_type==MY_PROTOCOL) { switch(My_Decoder.value) { case MUTE:{ digitalWrite(LEDON,LOW); Serial.println("POWER OFF"); servo1.attach(8); // Attaches servo 1 servo2.attach(9); // Attaches servo 2 servo1.write(95); // low position is 95 deg servo2.write(100); // low position is 100 deg delay(500); goto bailout1; } case POWER:{ Serial.println("POWER ON"); digitalWrite(LEDON,HIGH); int V2 = 0; while (V2 == 0) { // Detach all servos so that vibrations sensors do not pick up any // servo vibration or whine. //---------------------------------------------------------------------- servo1.detach(); servo2.detach(); // Nested Loop Wich Sets Initial Conditions for SFX board // In this case, it is used for adjusting volume. // Go to https://learn.adafruit.com/adafruit-audio-fx-soun... // for a detailed tutorial on how the Adafruit FX board works. // The segment of code below is essentially turning the volume // down by a crude method. //---------------------------------------------------------------------- while(n < 1){ n++; Serial.print("Resetting FX Sound Board..."); digitalWrite(SFX_RST,LOW); delay(40); digitalWrite(SFX_RST,HIGH); Serial.println("Complete"); } while(m < 26){ m++; digitalWrite(SFX_vol,LOW); delay(40); digitalWrite(SFX_vol,HIGH); delay(40); if(m == 26){ Serial.println("Complete"); } if(m == 1){ Serial.print("Checking Volume Level..."); }} //---------------------------------------------------------------------- bailout2:{ // Used to escape from nested loops below //---------------------------------------------------------------------- // Remote Control Interface //---------------------------------------------------------------------- // For info on how to use the IR remote control with the Arduino // visit https://github.com/cyborg5/IRLib // There are manuals and examples. //---------------------------------------------------------------------- if (My_Receiver.GetResults(&My_Decoder)) { My_Decoder.decode(); if(My_Decoder.decode_type==MY_PROTOCOL) { switch(My_Decoder.value) { //---------------------------------------------------------------------- // The next two case statements are used to alternate servo positions // with the push of the button (right or left arrow on IR remote) //---------------------------------------------------------------------- case MUTE:{ digitalWrite(LEDON,LOW); Serial.println("POWER OFF"); servo1.attach(8); // Attaches servo 1 servo2.attach(9); // Attaches servo 2 servo1.write(95); // low position is 95 deg servo2.write(100); // low position is 100 deg delay(500); goto bailout1; // exit ON loop } case LEFT_ARROW:{ servo1.attach(8); // Attaches servo 1 servo2.attach(9); // Attaches servo 2Serial.println("MANUAL PLAY 1"); digitalWrite(SFX_4,LOW); // enables sound delay(400); // delay for sound digitalWrite(SFX_4,HIGH); // enables sound servo1.write(95); // High position is 125 deg servo2.write(75); // low position is 100 deg delay(2000); // delay for timing state = 1; // state for determining which sensor was last break; // exit loop } case RIGHT_ARROW: { servo1.attach(8); // Attaches servo 1 servo2.attach(9); // Attaches servo 2 Serial.println("MANUAL PLAY 2"); digitalWrite(SFX_4,LOW); // enables sound delay(400); // delay for sound digitalWrite(SFX_4,HIGH); // enables sound servo1.write(125); // low position is 95 deg servo2.write(100); // high position is 75 deg delay(2000); // delay for timing state = 0; // state for determining which sensor was last break; // exit loop } //********************************************************************** // This segment enables the automated play mode //********************************************************************** case PLAY: { Serial.println("Entering Automated Play Mode"); int q = 0; while(q==0) { //---------------------------------------------------------------------- // This segment of code is used to break out of the automated play mode //---------------------------------------------------------------------- if (My_Receiver.GetResults(&My_Decoder)) { My_Decoder.decode(); if(My_Decoder.decode_type==MY_PROTOCOL) { switch(My_Decoder.value) { case RETURN: { Serial.println("Leaving Automated Play Mode"); delay(10); servo1.attach(8); // Attaches servo 1 servo2.attach(9); // Attaches servo 2 servo1.write(95); // low position is 95 deg servo2.write(100); // low position is 100 deg delay(500); w=0; goto bailout2; // exits play loop }}} My_Receiver.resume(); } //---------------------------------------------------------------------- // Initially positions servo at beginning of automated play mode //---------------------------------------------------------------------- while(w < 1) { w++; // variable for loop servo1.attach(8); // Attaches servo 1 servo2.attach(9); // Attaches servo 2 delay(1); // delay for stability servo1.write(95); // positions servo High is 120 deg servo2.write(75); // positions servo low is 100 deg delay(20); // delay for timing servo1.detach(); // Detach Servo, prevents servo noise servo2.detach(); // Detach Servo, prevents servo noise //---------------------------------------------------------------------- //This segment Plays song to indicate you have entered automatic play mode //---------------------------------------------------------------------- digitalWrite(SFX_2,LOW); delay(400); digitalWrite(SFX_2,HIGH); } //---------------------------------------------------------------------- // Stores readings for sensor 1 & 2 in a variable //---------------------------------------------------------------------- Read1NEW = analogRead(sensor1); // stores sensor value delay(1); // delay for stability Read2NEW = analogRead(sensor2); // stores sensor value delay(1); // delay for stability //---------------------------------------------------------------------- // Changes servo positions when a sensor is disturbed //---------------------------------------------------------------------- //---------------------------------------------------------------------- // SERVO / SENSOR 1 CONDITIONAL STATEMENT //---------------------------------------------------------------------- if((Read1NEW > 750) && (state == 0)) { Serial.println("Disturbance Detected in Sensor 1"); //---------------------------------------------------------------------- // This segment Plays sound indicating ball has been disturbed //---------------------------------------------------------------------- digitalWrite(SFX_4,LOW); delay(360); digitalWrite(SFX_4,HIGH); //---------------------------------------------------------------------- Read1NEW = 0; // stores sensor reading for sensor 1 Read2NEW = 0; // stores sensor reading for sensor 2 digitalWrite(sensor1_pwr,LOW); // temp disables sensor digitalWrite(sensor2_pwr,LOW); // temp disables sensor servo1.attach(8); // Attaches servo 1 servo2.attach(9); // Attaches servo 2 delay(1500); servo1.write(95); // Up position is 125 servo2.write(75); // Down position is 100 servo1.detach(); // Detach Servo, prevents servo noise servo2.detach(); // Detach Servo, prevents servo noise delay(1000); // delay for timing state = 1; // state for determining which sensor was last } //---------------------------------------------------------------------- // SERVO / SENSOR 2 CONDITIONAL STATEMENT //---------------------------------------------------------------------- if((Read2NEW > 750) && (state == 1)) { Serial.println("Disturbance Detected in Sensor 2"); //---------------------------------------------------------------------- // This segment Plays sound indicating ball has been disturbed //---------------------------------------------------------------------- digitalWrite(SFX_4,LOW); delay(360); digitalWrite(SFX_4,HIGH); //---------------------------------------------------------------------- Read1NEW = 0; // stores sensor reading for sensor 1 Read2NEW = 0; // stores sensor reading for sensor 2 digitalWrite(sensor1_pwr,LOW); // temp disables sensor digitalWrite(sensor2_pwr,LOW); // temp disables sensor servo1.attach(8); // Attaches servo 1 servo2.attach(9); // Attaches servo 2 delay(1500); // delay for timing servo1.write(125); // low is 95 servo2.write(100); // high is 75 servo1.detach(); // Detach Servo, prevents servo noise servo2.detach(); // Detach Servo, prevents servo noise delay(1000); // delay for timing state = 0; // state for determining which sensor was last } else { digitalWrite(SFX_4,HIGH); // Keeps sound effect pin high (OFF) if ((analogRead(sensor2) < 350) && (analogRead(sensor1) < 350)) { digitalWrite(sensor1_pwr,HIGH); // enables sensor digitalWrite(sensor2_pwr,HIGH); // enables sensor }}}}}} My_Receiver.resume(); }}}}}} My_Receiver.resume(); }}}} //********************************************************************** //********************************************************************** 

Articles Liés

Gants de Mickey Mouse - Glowing Ninzerbean Fists of Retribution

Gants de Mickey Mouse - Glowing Ninzerbean Fists of Retribution

de gravité circuit souple pour ridicule, faire ces gants de Mickey Mouse.  Inspiré par la compétition amicale à atteindre le nirvana viewcount Instructables, vous besoin d'une paire de ces Glowing Ninzerbean Fists of Retribution à prendre le dessus.
Arrêt automatique au bout vers le bas de la souris sans fil (Prototype)

Arrêt automatique au bout vers le bas de la souris sans fil (Prototype)

AVERTISSEMENT : Ceci est un prototype et rendra votre souris sans fil « filaire ». De plus, selon votre souris, il peut perdre sa capacité à faire glisser sur la table/tapis de souris.Pour notre dernier projet en CPE 133 Digital Design à Cal Poly, le
Prototype de Station mobile pour la Capture de données environnementales ("un émulateur de Mars Rover")

Prototype de Station mobile pour la Capture de données environnementales ("un émulateur de Mars Rover")

Générales Description:Ce projet s'intitule pour le développement d'un prototype entièrement fonctionnel mobile « la Station de Rover », responsable de la capture de données environnementales comme la température, humidité et luminosité. L'idée est da
Bricolage Minnie Mouse bandeau

Bricolage Minnie Mouse bandeau

un moyen simple et mignon Simple se rappeler vos souvenirs d'enfance à nouveau.Étape 1: Vous aurez besoin CartonObjet rondBande de têteSharpieColleAcrylique de couleur rouge et blancPaintbrushScissorEtape 2: couper Trace autour de votre taille souhai
[Prototype] Zee Café Table

[Prototype] Zee Café Table

Je pense pour Flat Pack concours. J'ai cette conception pli-able table basse dans mon esprit, mais je n'ai pas les outils électriques pour le construire. Lire mon Twitter j'ai vu « 9 jours quitte à entrer dans le grand ou petit défi et gagnez un iPad
PROOF OF CONCEPT : Eau réfrigérée climatisation prototype - mis hors service.

PROOF OF CONCEPT : Eau réfrigérée climatisation prototype - mis hors service.

J'ai l'intention d'utiliser ce compresseur 100 watt pour refroidir de l'eau dans un réservoir isolé alors que je suis au travail. L'énergie pour ce sera par l'intermédiaire de mon système d'énergie solaire maison puisque je récolte un surplus d'énerg
SudsCycle : Un vélo moteur Machine à laver (Prototype 1.0)

SudsCycle : Un vélo moteur Machine à laver (Prototype 1.0)

J'ai fait cela comme un projet final pour ma classe de conception durable comme un moyen d' autonomiser les décisions durables en situation appartement ou dortoir, où plusieurs zones typiques des choix environnementaux (tels que les paramètres thermo
Les topiaires Costume Mickey Mouse

Les topiaires Costume Mickey Mouse

Oui ! Il s'agit d'un costume.Quand j'avais 5 ans, ma famille a passé une semaine au volant vers le bas de la Route 66 de l'Indiana à Disneyland. La première chose que je me souviens quand nous sommes arrivés sur la propriété de Disney ont été les top
Prototype fonctionnel de Lassiter gravure Laser pistolet de Firefly !

Prototype fonctionnel de Lassiter gravure Laser pistolet de Firefly !

Dans Firefly, Mal Reynolds et son équipage tentent un audacieux Hold-up de voler la Lassiter, un pistolet laser de prototype antique inestimable. Bien sûr, la chose ne fonctionne plus, mais ça vaut quand même une fortune. La bonne nouvelle pour les f
Faire une maquette Prototype sans soudure

Faire une maquette Prototype sans soudure

Je fais une maquette personnalisée de Prototype sans soudure.Étape 1: Pièces de montage d'essai sans soudureJ'ai décidé de me faire une maquette prototype en assemblant des planches sans soudure que j'ai acheté en ligne.Si vous envisagez de faire vot
3D imprimés Prototype NFC Bracelet (projet TfCD par Jeremy Evers et Bas Van Der Werf)

3D imprimés Prototype NFC Bracelet (projet TfCD par Jeremy Evers et Bas Van Der Werf)

Ce instructable qui suit vous aidera à faire votre propre bracelet NFC. Ce bracelet peut être donné différentes fonctions en écrivant du code avec votre smartphone sur la puce NFC. Une puce NFC est une puce qui peut communiquer à bout portant avec un
Trempette aux épinards Knorr pour bretzels mous

Trempette aux épinards Knorr pour bretzels mous

si vous avez besoin d'une collation rapide à concocter pour une fête d'anniversaire ou un rassemblement social, c'est votre collation !  Je l'ai fait pour la fête d'anniversaire surprise de mon père il y a quelques jours, et il a été un véritable suc
Rotary Vending Prototype

Rotary Vending Prototype

Ce didacticiel explique comment créer et programmer une rotative fonctionnant en ligne distributeur automatique qui pourrait être utilisé dans une variété d'applications, y compris les distributeurs automatiques de produits. C'est la prochaine étape
Prototype de Raspoulette

Prototype de Raspoulette

Salut les gars,Quand je vois un concours de framboise pi que je décide de faire un prototype d'une idée que j'ai depuis quelques temps, permettez-moi de présenter mes Raspoulette !Je vais essayer d'expliquer comment faire un Raspoulette étonnant !Ras