Paso 3: El código
Este es el código para cargar en el Arduino para ejecutar este circuito. El zumbador piezo toma la mayor parte del código. Esta versión Juega Sr. Roboto, pero usted puede modificar el código para hacerlo jugar cualquier canción que desee, sólo asegúrese de que las frecuencias de la primera declaración se corresponden con las notas que desea reproducir. También se adjunta el archivo de .ino si usted se siente perezoso. Si no tienes el software de Arduino, haga click aquí.
Alarma de Sensor de luz
/ / Hecho por Corbin Newhard / / licencia: dominio público
// TONES ==========================================
Comenzar por definir la relación entre
Nota, período y frecuencia.
#define c 3830 / / 261 Hz
#define d 6428 / / 156 Hz
#define D 3219 / / 311 Hz
#define e 3038 / / Hz 329
#define f 2864 / / 349 Hz
#define g 2550 / / 392 Hz
#define a 2272 / / 440 Hz
#define b 2028 / / 493 Hz
#define C 1912 / / 523 Hz
Definir una nota especial, 'R', para representar a un descanso
#define R 0
// SETUP ============================================
Configurar el altavoz en un perno PWM (digital 9, 10 u 11)
int speakerOut = 11;
int led = 13;
void setup() {}
pinMode (speakerOut, salida);
pinMode (led, salida);
Serial.Begin (9600);
}
MELODÍA y el momento ===
[melodía] es un conjunto de notas, acompañada de golpes [],
que establece la longitud relativa de cada nota (# más, más Nota)
melodía de int [] = {f, f, f, f, f, D, f, f, D, f, D, f, f, d, d, R, f, f, d, d, R};
beats de int [] = {8, 8, 8, 8, 16, 8, 16, 16, 8, 16, 24, 8, 8, 8, 8, 1, 8, 8, 8, 8, 1};
int número = sizeof(melody) / 2; Longitud de la melodía, para bucle.
Set global tempo largo de tempo = 15000;
Duración de pausa entre notas int pause = 0;
Variable de bucle para aumentar la longitud de resto int rest_count = 15;
Inicializar variables de base int tone_ = 0; vencer a int = 0; duración = 0;
// PLAY TONE ==============================================
El altavoz para reproducir un tono para una particular duración de pulso
{} void playTone()
largo elapsed_time = 0;
Si (tone_ > 0) {}
Si esto no es un ritmo de descanso, mientras que el tono tiene
jugado menos tiempo de 'duración', altavoz de pulso alto y bajo
mientras que (elapsed_time < duración) {}
digitalWrite(speakerOut,HIGH); delayMicroseconds(tone_ / 2); / / abajo
digitalWrite (speakerOut, bajo); delayMicroseconds(tone_ / 2);
Hacer un seguimiento de cuánto tiempo hemos pulsado
elapsed_time += (tone_);
}
}
Else {}
Golpe del resto; lazo veces demora
para (int j = 0; j < rest_count; j ++) {}
Ver nota en rest_count
delayMicroseconds(duration);
} } }
void lightShow() {}
digitalWrite (led, alto);
Delay(60);
digitalWrite (led, baja);
Delay(60);
}
DEJE QUE COMIENCE EL WILD RUMPUS ===
void loop() {}
int sensorValue = analogRead(A0);
Serial.println(sensorValue);
Si (sensorValue > = 20) {//ADJUST este valor para luz valores diferentes
Configurar un contador para tirar de [melodía] y [golpes]
para (int i = 0; i < número; i ++) {}
tone_ = la melodía [i];
batir = beats [i];
duración = beat * tempo; Configurar la sincronización
playTone();
Una pausa entre las notas...
delayMicroseconds(pause);
lightShow();
}
}
}