Whac-A-mus prototypen (4 / 5 steg)
Steg 4: Förbereda Arduino koden
Inkludera biblioteket bifogas nedan. Servo biblioteket är servo standardbiblioteket som medföljer programvaran Arduino skiss.
Definiera konstant variabler
Du måste ange dessa värden beroende på protokoll och Fjärrkoder som du använder. Dessa är från min hobby remote. Visa bifogade IRLib biblioteket för referenser på IRLib-protokollet.
#define MY_PROTOCOL NEC
#define RIGHT_ARROW 0xFF02FD / / spela huvudloop (ström)
#define LEFT_ARROW 0xFF22DD / / SERVO POSITION 2
#define POWER 0xFFA25D / / SERVO läge 2 POWER
#define spela 0xFFC23D / / spela AUTO LOOP
#define avkastning 0xFFB04F / / lämna automatiska 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;
Definiera ändra variabler
int _SFX_4 = hög;
int _SFX_2 = hög;
int _SFX_RST = hög;
int _SFX_vol = hög;
int pos1;
int pos2;
int Read1NEW = 400.
int Read1OLD = 400.
int Read2NEW = 400.
int Read2OLD = 400.
int state = 0
int n = 0;
int m = 0;
int w = 0;
int prevMillis = 0;
lång previousMillis = 0;
Definiera servon:
Servo servo1; Definiera servo
Servo servo2; Definiera servo
Använda detta segment av koden för IR-mottagaren:
IRrecv My_Receiver(11); Ta emot på stift 11
IRdecode My_Decoder;
Setup:
void setup() {/ / börja installationen
Serial.BEGIN(9600); Börja seriell kommunikation
My_Receiver.No_Output(); Inaktivera eventuella oanvända IR LED utgång krets
My_Receiver.enableIRIn(); Startar mottagaren för IR-fjärr
Definiera Pin lägen
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);
Bifoga servon:
servo1.attach(8);
servo2.attach(9);
} / / end setup
Huvudloop:
Detta segment av koden är kommenterade så jag inte skall upprepa koder syftet.
void loop() {/ / börjar huvudloop
bailout1: {
servo1.detach(); Koppla loss Servo, förhindrar servo buller
servo2.detach(); Koppla loss Servo, förhindrar servo buller
int V1 = 0; Variabel för medan loop nedan
medan (V1 == 0) {
om (My_Receiver.GetResults (& My_Decoder)) {
My_Decoder.decode();
IF(My_Decoder.decode_type==MY_PROTOCOL) {
Switch(My_Decoder.Value) {
fall MUTE: {
digitalWrite(LEDON,LOW);
Serial.println ("POWER OFF");
servo1.attach(8); Fäster servo 1
servo2.attach(9); Fäster servo 2
servo1.write(95); låg position är 95 grader
servo2.write(100); låg position är 100 deg
Delay(500);
gå till bailout1;
}
fall makt: {
Serial.println ("ström på");
digitalWrite(LEDON,HIGH);
int V2 = 0;
medan (V2 == 0)
{
Lossa alla servon så att vibrationer sensorer inte plocka upp någon
servo vibrationer eller gnälla.
//----------------------------------------------------------------------
servo1.detach();
servo2.detach();
Kapslad Loop Wich uppsättningar initialt villkorar för SFX styrelse
I detta fall, används det för att justera volymen.
Gå till https://learn.adafruit.com/adafruit-audio-fx-soun...
en detaljerad genomgång om hur Adafruit FX styrelsen fungerar.
Segmentet av koden nedan i huvudsak vänder volymen
ner av en grov metod.
//----------------------------------------------------------------------
medan (n < 1) {
n ++;
Serial.Print ("återställa FX ljud ombord...");
digitalWrite(SFX_RST,LOW);
Delay(40);
digitalWrite(SFX_RST,HIGH);
Serial.println("Complete");
}
medan (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 ("kontrollera volymnivå...");
}}
//----------------------------------------------------------------------
bailout2: {/ / används för att fly från kapslade slingor nedan
//----------------------------------------------------------------------
Remote Control Interface
//----------------------------------------------------------------------
För information om hur du använder IR-fjärrkontroll med Arduino
Besök https://github.com/cyborg5/IRLib
Det finns manualer och exempel.
//----------------------------------------------------------------------
om (My_Receiver.GetResults (& My_Decoder)) {
My_Decoder.decode();
IF(My_Decoder.decode_type==MY_PROTOCOL) {
Switch(My_Decoder.Value) {
//----------------------------------------------------------------------
De nästa två fall rapporterna används till alternativa servo positioner
genom att trycka på knappen (höger eller vänster pil på IR-fjärrkontroll)
//----------------------------------------------------------------------
fall MUTE: {
digitalWrite(LEDON,LOW);
Serial.println ("POWER OFF");
servo1.attach(8); Fäster servo 1
servo2.attach(9); Fäster servo 2
servo1.write(95); låg position är 95 grader
servo2.write(100); låg position är 100 deg
Delay(500);
gå till bailout1; Exit ON loop
}
fall LEFT_ARROW: {
servo1.attach(8); Fäster servo 1
servo2.attach(9); Fäster servo 2
Serial.println ("manuell spela 1");
digitalWrite(SFX_4,LOW); möjliggör ljud
Delay(400); fördröjning för ljud
digitalWrite(SFX_4,HIGH); möjliggör ljud
servo1.write(95); Hög position är 125 grader
servo2.write(75); låg position är 100 deg
Delay(2000); fördröjning för timing
State = 1; staten för att avgöra vilka sensorn var sista
bryta; avsluta loop
}
fall RIGHT_ARROW: {
servo1.attach(8); Fäster servo 1
servo2.attach(9); Fäster servo 2
Serial.println ("manuell spela 2");
digitalWrite(SFX_4,LOW); möjliggör ljud
Delay(400); fördröjning för ljud
digitalWrite(SFX_4,HIGH); möjliggör ljud
servo1.write(125); låg position är 95 grader
servo2.write(100); hög position är 75 grader
Delay(2000); fördröjning för timing
State = 0; staten för att avgöra vilka sensorn var sista
bryta; avsluta loop
}
//**********************************************************************
Detta segment kan av automatisk uppspelning
//**********************************************************************
fall spela:
{
Serial.println ("in automatiska Play-läge");
int q = 0;
While(q==0)
{
//----------------------------------------------------------------------
Detta segment av kod används för att bryta av automatisk uppspelning
//----------------------------------------------------------------------
om (My_Receiver.GetResults (& My_Decoder))
{
My_Decoder.decode();
IF(My_Decoder.decode_type==MY_PROTOCOL)
{
Switch(My_Decoder.Value)
{
fall tillbaka: {
Serial.println ("lämnar automatiserade läge");
Delay(10);
servo1.attach(8); Fäster servo 1
servo2.attach(9); Fäster servo 2
servo1.write(95); låg position är 95 grader
servo2.write(100); låg position är 100 deg
Delay(500);
w = 0;
gå till bailout2; utgångar spela loop
}}}
My_Receiver.Resume();
}
//----------------------------------------------------------------------
Initialt placerar servo början av automatiserade play-läge
//----------------------------------------------------------------------
medan (w < 1)
{
w ++; variabel för loop
servo1.attach(8); Fäster servo 1
servo2.attach(9); Fäster servo 2
Delay(1); fördröjning för stabilitet
servo1.write(95); positioner servo hög är 120 grader
servo2.write(75); positioner servo låg är 100 deg
Delay(20); fördröjning för timing
servo1.detach(); Koppla loss Servo, förhindrar servo buller
servo2.detach(); Koppla loss Servo, förhindrar servo buller
//----------------------------------------------------------------------
Detta segment spelar låten anger du har angett automatisk play-läge
//----------------------------------------------------------------------
digitalWrite(SFX_2,LOW);
Delay(400);
digitalWrite(SFX_2,HIGH);
}
//----------------------------------------------------------------------
Lagrar mätvärden för sensor 1 & 2 i en variabel
//----------------------------------------------------------------------
Read1NEW = analogRead(sensor1); lagrar sensor värde
Delay(1); fördröjning för stabilitet
Read2NEW = analogRead(sensor2); lagrar sensor värde
Delay(1); fördröjning för stabilitet
//----------------------------------------------------------------------
Ändrar servo positioner när en sensor är störd
//----------------------------------------------------------------------
//----------------------------------------------------------------------
SERVO / SENSOR 1 VILLKORSSATS
//----------------------------------------------------------------------
om ((Read1NEW > 750) & & (statligt == 0))
{
Serial.println ("störning i Sensor 1");
//----------------------------------------------------------------------
Detta segment leker ljud som anger bollen har störts
//----------------------------------------------------------------------
digitalWrite(SFX_4,LOW);
Delay(360);
digitalWrite(SFX_4,HIGH);
//----------------------------------------------------------------------
Read1NEW = 0; lagrar sensor läsa för sensor 1
Read2NEW = 0; lagrar sensor läsa för sensor 2
digitalWrite(sensor1_pwr,LOW); Temp inaktiverar sensor
digitalWrite(sensor2_pwr,LOW); Temp inaktiverar sensor
servo1.attach(8); Fäster servo 1
servo2.attach(9); Fäster servo 2
Delay(1500);
servo1.write(95); Ståndpunkt är 125
servo2.write(75); Ned position är 100
servo1.detach(); Koppla loss Servo, förhindrar servo buller
servo2.detach(); Koppla loss Servo, förhindrar servo buller
Delay(1000); fördröjning för timing
State = 1; staten för att avgöra vilka sensorn var sista
}
//----------------------------------------------------------------------
SERVO / SENSOR 2 VILLKORSSATS
//----------------------------------------------------------------------
om ((Read2NEW > 750) & & (statligt == 1))
{
Serial.println ("störning i Sensor 2");
//----------------------------------------------------------------------
Detta segment leker ljud som anger bollen har störts
//----------------------------------------------------------------------
digitalWrite(SFX_4,LOW);
Delay(360);
digitalWrite(SFX_4,HIGH);
//----------------------------------------------------------------------
Read1NEW = 0; lagrar sensor läsa för sensor 1
Read2NEW = 0; lagrar sensor läsa för sensor 2
digitalWrite(sensor1_pwr,LOW); Temp inaktiverar sensor
digitalWrite(sensor2_pwr,LOW); Temp inaktiverar sensor
servo1.attach(8); Fäster servo 1
servo2.attach(9); Fäster servo 2
Delay(1500); fördröjning för timing
servo1.write(125); lågt är 95
servo2.write(100); hög är 75
servo1.detach(); Koppla loss Servo, förhindrar servo buller
servo2.detach(); Koppla loss Servo, förhindrar servo buller
Delay(1000); fördröjning för timing
State = 0; staten för att avgöra vilka sensorn var sista
}
annat
{
digitalWrite(SFX_4,HIGH); Håller ljud effekt pin hög (OFF)
om ((analogRead(sensor2) < 350) & & (analogRead(sensor1) < 350))
{
digitalWrite(sensor1_pwr,HIGH); gör att sensorn
digitalWrite(sensor2_pwr,HIGH); gör att sensorn
}}}}}}
My_Receiver.Resume();
}}}}}}
My_Receiver.Resume();
}}}}
//**********************************************************************
//**********************************************************************