Animatronic talar avhämtning behållare (5 / 12 steg)
Steg 5: Programmera Arduino
Placera din musik sköld på Arduino Mega.
Ladda upp följande kod Arduino:
/ * Animatronic talar avhämtning behållare för mer information besök: * / #include < Arduino.h > < avr/io.h > #include #include "config.h" #include "player.h" #include "vs10xx.h" #include < Fat16.h > < Fat16Util.h > #include #include "newSDLib.h" #include < ServoTimer2.h > #define rollPin 30 ServoTimer2 servoRoll; Boolean talar; booleska väntar = 0; int volumeLevels = 0; void setup() {(cli); //stop avbryter //set timer0 avbrott på 2 kHz TCCR0A = 0; / / Ställ in hela TCCR2A register 0 TCCR0B = 0; / / samma för TCCR2B TCNT0 = 0; //initialize värde till 0 / / set jämför match register för 2 khz steg OCR0A = 255; / = (16 * 10 ^ 6) / (2000 * 64) - 1 (måste vara < 256) / / slå på CTC läge TCCR0A | = (1 << WGM01); / / ställa in CS01 och CS00 bits för 64 prescaler TCCR0B | = (1 << CS02) | (1 << CS00); Aktivera timern jämför avbrott TIMSK0 | = (1 << OCIE0A); TCCR1A = 0; / / ställa in hela TCCR1A register 0 TCCR1B = 0; / / samma för TCCR1B TCNT1 = 0; //initialize värde till 0 / / set jämför match register för 1hz steg OCR1A = 512; / / = (16 * 10 ^ 6) / (1 * 1024) - 1 (måste vara < 65536) / / slå på CTC läge TCCR1B | = (1 << WGM12); Anger CS10 och CS12 bitar för 1024 prescaler TCCR1B | = (1 << CS12) | (1 << CS10); Aktivera timern jämför avbrott TIMSK1 | = (1 << OCIE1A); SEI (); //allow avbryter servoRoll.attach(rollPin); bifoga en PIN-kod till servon och de börjar pulserande servoRoll.write(1500); pinMode (21, OUTPUT); Serial.BEGIN(9600); InitSPI(); InitIOForVs10xx(); InitIOForKeys(); InitIOForLEDs(); Mp3Reset(); om (! initialSDCard()) återvända; RED_LED_ON (); //light röda LED} void loop() {file.traverseDir ("MP3"); //find alla .mp3-filer i roten katalog. while(1)playFile(), //shuffle din musik du hitta i rotkatalogen på SD-kortet.} ISR(TIMER0_COMPA_vect) {Serial.println(waiting); om (väntar på < = 0) {om (pratar) {servoRoll.write(1000);} annat {servoRoll.write(0);} väntar = 2;}} ISR(TIMER1_COMPA_vect) {//Interrupt på freq 1 kHz att mäta reed switch / / genererar puls våg av frekvens 8kHz/2 = 4 kHz (tar två cykler för full wave-växla hög sedan växla låg) volumeLevels = analogRead(A10); om (abs(volumeLevels-512) > 100) {digitalWrite (21, hög), talar = sant;} annat {talar = false; digitalWrite (21, låg);} väntar--;}