Paso 5: Programar el Arduino
Coloque el escudo de la música en el Arduino Mega.
Añadir el siguiente código de Arduino:
/ * Contenedor para llevar hablando de Animatronic para obtener más información, visite: * / #include < Arduino.h > < avr/io.h > del #include #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 hablando; espera booleano = 0; int volumeLevels = 0; void setup() {(cli); //stop interrumpe //set interrupción de timer0 a 2 kHz TCCR0A = 0; / ajustar todo registro de TCCR2A a 0 TCCR0B = 0; / / igual para TCCR2B TCNT0 = 0; //initialize valor de contador a 0 / / sistema compara partido registro de incrementos de 2 khz OCR0A = 255; / / = (16 * 10 ^ 6) / (2000 * 64) - 1 (debe ser < 256) / / Activar modo CTC TCCR0A | = (1 << WGM01); / Set CS01 y CS00 pedacitos de prescaler 64 TCCR0B | = (1 << CS02) | (1 << CS00); habilitar interrupción de timer compara TIMSK0 | = (1 << OCIE0A); TCCR1A = 0; / / set completo registro TCCR1A 0 TCCR1B = 0; / / única para TCCR1B TCNT1 = 0; //initialize valor de contador a 0 / / sistema compara partido registro para incrementos de 1hz OCR1A = 512; / = (16 * 10 ^ 6) / (1 * 1024) - 1 (debe ser < 65536) / / Activar modo CTC TCCR1B | = (1 << WGM12); Set brocas CS10 y CS12 para 1024 prescaler TCCR1B | = (1 << CS12) | (1 << CS10); habilitar interrupción de timer compara TIMSK1 | = (1 << OCIE1A); SEI (); //allow servoRoll.attach(rollPin) de interrupciones; Coloque un alfiler en los servos y empiezan servoRoll.write(1500) pulsación; pinMode (salida 21); Serial.Begin(9600); InitSPI(); InitIOForVs10xx(); InitIOForKeys(); InitIOForLEDs(); Mp3Reset(); Si (! initialSDCard()) retorno; RED_LED_ON (); //light rojo LED} void loop() {file.traverseDir ("MP3"); //find todos los. mp3 archivos en la raíz directorio. while(1)playFile(); //shuffle su música encuentra en el directorio raíz de la tarjeta SD.} ISR(TIMER0_COMPA_vect) {Serial.println(waiting); si (espera < = 0) {si (hablando) {servoRoll.write(1000);} else {servoRoll.write(0);} espera = 2;}} ISR(TIMER1_COMPA_vect) {//Interrupt en frecuencia de 1kHz para medir interruptor de láminas / / genera onda de pulso de frecuencia 8kHz/2 = 4 kHz (toma dos ciclos de alternancia de onda completa alto entonces cambiar bajo) volumeLevels = analogRead(A10); if (abs(volumeLevels-512) > 100) {digitalWrite (21, alto); hablando = true;} más {hablando = false; digitalWrite (21, bajo);} espera--;}