Stap 5: De Arduino Program
Plaats uw muziek schild op de Arduino Mega.
De volgende code de Arduino te uploaden:
/ * Animatronic praten Takeout Container voor meer info bezoek: * / #include < Arduino.h > #include < avr/io.h > #include "config.h" #include "player.h" #include "vs10xx.h" #include < Fat16.h > #include < Fat16Util.h > #include "newSDLib.h" #include < ServoTimer2.h > #define rollPin 30 ServoTimer2 servoRoll; Boolean praten; Booleaanse wachten = 0; int volumeLevels = 0; void setup {cli (); //stop onderbreekt //set timer0 interrupt op 2 kHz TCCR0A = 0; / / set hele TCCR2A register op 0 TCCR0B = 0; / / zelfde voor TCCR2B TCNT0 = 0; //initialize waarde van de teller op 0 / / set vergelijk wedstrijd aanmelden voor 2 khz stappen OCR0A = 255; / / = (16 * 10 ^ 6) / (2000 * 64) - 1 (moet < 256) / / CTC modus TCCR0A inschakelen | = (1 << WGM01); / / Set CS01 en CS00 bits voor 64 prescaler TCCR0B | = (1 << CS02) | (1 << CS00); inschakelen van de timer vergelijk interrupt TIMSK0 | = (1 << OCIE0A); TCCR1A = 0; / / set hele TCCR1A register op 0 TCCR1B = 0; / / zelfde voor TCCR1B TCNT1 = 0; //initialize waarde van de teller op 0 / / set vergelijk wedstrijd inschrijven voor 1hz stappen OCR1A = 512; / / = (16 * 10 ^ 6) / (1 * 1024) - 1 (moet < 65536) / / CTC modus TCCR1B inschakelen | = (1 << WGM12); CS10 en CS12 bits ingesteld voor 1024 prescaler TCCR1B | = (1 << CS12) | (1 << CS10); inschakelen van de timer vergelijk interrupt TIMSK1 | = (1 << OCIE1A); Sei (); //allow interrupts servoRoll.attach(rollPin); een pin hechten aan de servo's en zij zullen beginnen pulserende servoRoll.write(1500); pinMode (21, OUTPUT); Serial.begin(9600); InitSPI(); InitIOForVs10xx(); InitIOForKeys(); InitIOForLEDs(); Mp3Reset(); Als (! initialSDCard()) keren; RED_LED_ON (); //light rode LED} void loop {file.traverseDir ("MP3"); //find alle de .mp3-in de root map. while(1)playFile() bestanden; //shuffle uw muziek die u in de rootdirectory van de SD-kaart vinden.} ISR(TIMER0_COMPA_vect) {Serial.println(waiting); als (wachten < = 0) {als (spreken) {servoRoll.write(1000);} else {servoRoll.write(0);} wachten = 2;}} ISR(TIMER1_COMPA_vect) {//Interrupt op freq van 1kHz tot meten reed switch rietschakelaar / / genereerd pols golf van frequentie 8kHz/2 = 4 kHz (neemt twee cycli voor volledige Golf-toggle hoog dan laag knevel) volumeLevels = analogRead(A10); als (abs(volumeLevels-512) > 100) {digitalWrite (21), hoge; praten = true;} anders {praten = false; digitalWrite (21, laag);} wachten--;}