Paso 2: Diseño con Arduino
Comencé a explorar los sonidos de la función de tono en el Arduino, cambio de tono, duración y retrasos (para una buena introducción a Arduino, véase este Ible).
Para el motor, que empecé a comprobar el valor del parámetro pitch más bajo jugado, que parece ser 50 (pero convertido en alrededor de 100 para la base del ATtiny). Tengo la idea de ajustar el retardo entre los tonos jugó un poco más largo que el tono del ejemplo toneMelody. Un tono de 10 ms y una demora en 11ms más largo le da una "ondulación como motor".
Hice un programa de prueba poco cambiar el tono de dos tonos, en busca de la combinación que le dio un clásico "sonido de la pistola del espacio" que recuerda el ave estelar (ver bosquejo incluido a continuación). Como entrada usé dos interruptores de inclinación doble como entrada. En aquel momento que aún estaba experimentando con tres interruptores de Estado sólo con una entrada analógica cada (ver el diagrama del circuito), un concepto se me cayó más adelante como se explica en el paso del interruptor de inclinación.
Las duraciones y donde probado cambiando y volver a cargar el programa. Aquí noté que era lo mejor ajustar el retardo de un par de ms más cortas que la duración del tono, para un sonido suave.
Luego he añadido algunos simple-de conmutación de los LEDs siguiendo el patrón de sonido.
Aquí está el programa de prueba:
/*
Prueba de sonido de ave estelar
creado el 03 de agosto de 2012
por masynmachien
Este código es de dominio público.
*/
const int tonepin = 3; outputpin de tono más adelante a cambiar
para evitar la interferencia con la carga
int thisPitch = 820;
int Pitchdelta = 55;
int hora = 60;
int timeminus = 57;
void setup() {}
inicializar comunicaciones en serie (para la depuración sólo):
Serial.Begin(9600);
}
void loop() {}
leer el interruptor threestate:
int sensorReading = analogRead(A0);
if(sensorReading > 800)
{
aumentar el tono cuando tiró a 5 V
Si (thisPitch < 20000)
{/ / tono maximumum
thisPitch thisPitch = 1;
}
}
else if (sensorReading < 200)
{
disminuir el paso cuando tiró a 5 V
Si (thisPitch > 700)
{/ / mínimo paso
thisPitch = thisPitch - 1;
}
}
leer el interruptor threestate:
int sensorReading2 = analogRead(A5);
if(sensorReading2 > 800)
{
aumentar el tono cuando tiró a 5 V
Si (Pitchdelta < 10000)
{/ / tono maximumum
Pitchdelta = Pitchdelta + 1;
}
}
else if (sensorReading2 < 200)
{
disminuir el paso cuando tiró a 5 V
Si (Pitchdelta > 0)
{/ / mínimo paso
Pitchdelta = Pitchdelta - 1;
}
}
jugar el terreno de juego:
tono (tonepin, thisPitch, tiempo);
Delay(timeminus); retardo entre lecturas para la estabilidad
tono (tonepin, thisPitch-(Pitchdelta/2), tiempo);
Delay(timeminus); retardo entre lecturas para la estabilidad
tono (tonepin, Pitchdelta thisPitch, tiempo);
Delay(timeminus); retardo entre lecturas para la estabilidad
tono (tonepin, thisPitch-(Pitchdelta/2), tiempo);
Delay(timeminus); retardo entre lecturas para la estabilidad
Serial.println(thisPitch);
Serial.println(Pitchdelta);
}