Prototipo de Whac-A-Mouse (4 / 5 paso)

Paso 4: Preparar el código de Arduino

Incluyen la biblioteca de abajo. El servo es la librería de servos por defecto que viene con el software sketch de Arduino.

Definir las Variables constantes

Usted tendrá que establecer estos valores dependiendo del protocolo y códigos control remotos que está utilizando. Estas son de mi hobby remoto. Ver la biblioteca de IRLib adjuntada para referencias en el protocolo 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; 

Definir cambio de 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; 

Definir servos:

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

Utilice este segmento de código para el receptor de infrarrojos:

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

Configuración:

 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 

Definir modos 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); 

Conecte los Servos:

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

Bucle principal:

Este segmento de código es comentado por lo que no voy a repetir el propósito de los códigos.

 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(); }}}} //********************************************************************** //********************************************************************** 

Artículos Relacionados

Automático cerrado ratón inalámbrico (prototipo)

Automático cerrado ratón inalámbrico (prototipo)

Descargo de responsabilidad: Este es un prototipo y hará que su ratón inalámbrico "con cable". Además, dependiendo de su ratón, puede perder su capacidad de deslizar a través de la mesa/alfombrilla de ratón.Para nuestro proyecto final en CPE 133
El Locusograph, A Steampunk Telegraph clave Mouse Mod

El Locusograph, A Steampunk Telegraph clave Mouse Mod

por favor oso conmigo, como este es mi primer Instructable.  (Todos hemos escuchado eso antes.)En los últimos años he visto un montón de mods de PC al estilo Steampunk – sobre todo los teclados, casos y los montajes del monitor.  Ha habido algunos mo
Guantes de Mickey Mouse - brillante Ninzerbean puños de venganza

Guantes de Mickey Mouse - brillante Ninzerbean puños de venganza

de seriedad suave circuito a ridículo, hacer estos guantes de Mickey Mouse.  Inspirado en la competición amistosa en la consecución de Instructables viewcount nirvana, necesita un par de estos brillantes Ninzerbean puños de venganza para ganar la man
Prototipos circuitos con primera Pro

Prototipos circuitos con primera Pro

Primera Pro es una aplicación gratis windows 8.1 para archiving circuitos en placa perforada, perfboard, placa o PCB y prototipos. Está dirigido principalmente a aficionados a esbozar rápidamente abajo y guardar sus ideas de circuito.La imagen de arr
Construcción de un módulo de creación de prototipos de protoboard

Construcción de un módulo de creación de prototipos de protoboard

Muchos de nosotros los viejos contadores de tiempo cortan los dientes en el laboratorio de electrónica de Archer 200-en-1 clásico o kits similares. Pensar en él como una analógica Arduino - una navaja suiza de la electrónica. Consistían en una bandej
[Prototipo] La mesa

[Prototipo] La mesa

Estoy pensando en plana paquete de concurso. Tengo este diseño de mesa capaz de doblar en mi mente, pero me falta las herramientas para construirlo. Leyendo mi Twitter vi "quedan 9 días para entrar en el gran o pequeño reto y ganar un iPad!". Fo
Soporte de portátil mouse pad y Copa

Soporte de portátil mouse pad y Copa

Se trata de un soporte de ordenador portátil que incorpora un mouse pad y un sostenedor de taza.Paso 1: Reunir los materialesLos materiales que necesitarás son:-2 piezas de aluminio piezas por lo menos 20 pulgadas de longitud del ángulo-A algunas pie
Base de prototipos de Robot multiusos madera contrachapada

Base de prototipos de Robot multiusos madera contrachapada

Por qué gastar tu dinero en robot confeccionado de metal o acrílico bases cuando se puede hacer uno usted mismo! sí, así que este instructable va a enseñar cómo hacer una plataforma base de madera contrachapada robot prototipo. Seguramente necesite c
Hacer una placa de prototipos para el Kit de Circuitscribe (y un módulo de termistor de bonificación!)

Hacer una placa de prototipos para el Kit de Circuitscribe (y un módulo de termistor de bonificación!)

(Nota-Este es un post invitado de Eureka! Fábrica por Chuck Stephens como parte de su programa de Instructables construir noche.)Como educador independiente y 'maker maker', siempre estoy ansioso por ver nueva electrónica juguetes educativos y sistem
Prototipo de estación móvil para captura de datos ambientales ("un emulador de la Mars Rover")

Prototipo de estación móvil para captura de datos ambientales ("un emulador de la Mars Rover")

General Descripción:Este proyecto tiene el derecho para el desarrollo de un prototipo completamente funcional móvil "la estación de Rover", responsable de la captura de datos ambientales como temperatura, humedad y luminosidad. La idea es en la
Prototipos en el barato

Prototipos en el barato

en realidad esto comenzó hace varios años, con una idea que tuve con ninguna forma de poner en práctica. He estado usando impresión 3D por un tiempo ahora, pero más barato material puede ser costoso. Quería ser capaz de imprimir cut outs sobre papel
Bicho muerto prototipos y electrónica libre

Bicho muerto prototipos y electrónica libre

Prototipos de bicho muerto y forma libre electrónica son una manera de construir circuitos electrónicos, de trabajo soldando directamente a las partes, o a través de alambres en vez de la forma tradicional de usar una placa de circuito impreso (PCB).
PRUEBA de concepto: Un enfriador de agua aire acondicionado prototipo - dado de baja.

PRUEBA de concepto: Un enfriador de agua aire acondicionado prototipo - dado de baja.

Planeo usar este compresor de 100 vatios para enfriar agua en un tanque aislado mientras estoy en el trabajo. La energía para esto será por mi sistema de energía solar en casa ya que un exceso de energía que no puedo guardar para uso nocturno de la c
Fondo: Estrategias de prototipos para el molde de soplado de vidrio

Fondo: Estrategias de prototipos para el molde de soplado de vidrio

Molde cristal soplado ha sido una estrategia esencial para cristalería de producción especialmente en la República Checa y otros países escandinavos. Aunque los checos se han convertido en especialmente buena en este estilo de para vidrio y madera mo