Paso 5:
así que allí u go, una forma agradable y fácil de utilizar Arduino solo por diversión, aquí está el código completo
// TONES ==========================================
Comenzar por definir la relación entre
Nota, período y frecuencia.
#define 3830 / / 261 Hz
#define RE 3400 / / 294 Hz
#define MI 3038 / / Hz 329
#define FA 2864 / / 349 Hz
#define SOL 2550 / / 392 Hz
#define LA 2272 / / 440 Hz
#define SI 2028 / / 493 Hz
#define DOM 1912 / / 523 Hz
Definir una nota especial, 'R', para representar a un descanso
#define resto 0
// SETUP ============================================
Configurar el altavoz en un perno PWM (digital 9, 10 u 11)
int speakerOut = 9;
¿Queremos depuración en serie hacia fuera? 1 para sí, 0 no
int DEBUG = 1;
int sensorPin = A0; Seleccione la entrada de pin para el ldr
unsigned int sensorValue = 0; variable para almacenar el valor de la ldr
void setup() {}
pinMode (speakerOut, salida);
pinMode (2, salida);
pinMode (3, salida);
pinMode (4, salida);
Si {} (DEBUG)
Serial.Begin(9600); Conjunto serie hacia fuera si queremos depurar
}
}
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 [] = {RE, MI, RE, SI, resto, RE, MI, RE, SI, resto, LA, LA, FA, descanso, SOL, SOL, RE, resto};
beats de int [] = {8, 8, 8, 16, 64, 8, 8, 8, 16, 64,8,8,16,32,8,8,16,128};
int número = sizeof(melody) / 2; Longitud de la melodía, para bucle.
Set global tempo
largo tempo = 80000;
Duración de pausa entre las notas
int pausa = 1000;
Variable de bucle para aumentar la longitud del resto
int rest_count = 100; <-BLETCHEROUS HACK; Ver notas
Inicializar las variables de la base
tone_ int = 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 (tone_ == 3400 || tone_ == 3038) {}
digitalWrite (2, alto);
digitalWrite (3, bajo);
digitalWrite (4, bajo);
}
else if (tone_ == 2028 || tone_ == 2272) {}
digitalWrite (2, bajo);
digitalWrite (3, alto);
digitalWrite (4, bajo); }
else if (tone_ == 2864 || tone_ == 2550) {digitalWrite (2, bajo);
digitalWrite (3, bajo);
digitalWrite (4, alto); } / / 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 {/ / resto vencer; tiempos de loop retrasan
para (int j = 0; j < rest_count; j ++) {/ / ver nota en rest_count
delayMicroseconds(duration);
}
}
}
DEJE QUE COMIENCE EL WILD RUMPUS ===
void loop() {}
Configurar un contador para tirar de [melodía] y [golpes]
leer el valor de la ldr:
sensorValue = analogRead(sensorPin);
if(sensorValue<500) {}
//
//
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);
Si (depurar) {/ / si depuración, Informe lazo, tono, ritmo y la duración
Serial.Print(i);
Serial.Print(":");
Serial.Print(Beat);
Serial.Print("");
Serial.Print(tone_);
Serial.Print("");
Serial.println(Duration);
}
}} / / set el LED en
Else {}
digitalWrite (2, bajo);
digitalWrite (3, bajo);
digitalWrite (4, bajo); } / / set el LED en
}
la parte de depuración puede ser útil para fines educativos, ya que se puede ver los valores que se burlan y qué tonos son ser interpretados por el dispositivo