Paso 3: código
/* ======================================================================
Consola Punk de Arduino
Un secuenciador de tono simple programable 8 paso
por dano/beavisaudio.com
Revoluciones
-----------------------------------
Versión inicial de la red espanola de Sept 15
======================================================================*/
Mapa de todos los pines de entrada y salidos
#define AnalogInFrequency 1
#define AnalogInTempo 2
#define AnalogInDuration 0
#define DigitalOutSignal 11
#define DigitalInSwitch0 2
#define DigitalInSwitch1 3
#define DigitalInSwitch2 4
#define DigitalInSwitch3 5
#define DigitalInSwitch4 6
#define DigitalInSwitch5 7
#define DigitalInSwitch6 8
#define DigitalInSwitch7 9
#define DigitalInStartStop 10
#define DigitalOutLED 12
Configurar la matriz para cada paso
pasos de int [] = {100,120,140,160,180,200,220,240};
varios limpieza
duración de int = 50;
int pitchval = 1;
fPlayMode int = true;
int lastPushedStep = -1;
Inicializar el tempo
tempo de int = 100;
void setup()
{
configurar modos de pines (pernos de Digital son de entrada por defecto, pero
Me gusta em establece explícitamente por lo que el código es claro.
pinMode (DigitalInSwitch0, entrada);
pinMode (DigitalInSwitch1, entrada);
pinMode (DigitalInSwitch2, entrada);
pinMode (DigitalInSwitch3, entrada);
pinMode (DigitalInSwitch4, entrada);
pinMode (DigitalInSwitch5, entrada);
pinMode (DigitalInSwitch6, entrada);
pinMode (DigitalInSwitch7, entrada);
pinMode (DigitalInStartStop, entrada);
pinMode (DigitalOutSignal, salida);
pinMode (DigitalOutLED, salida);
}
void loop()
{
Lazo de la secuencia principal
para (int i = 0; i < 8; i ++)
{
¿Estamos jugando o parar?
fPlayMode = digitalRead (DigitalInStartStop);
digitalWrite (DigitalOutLED, alto);
Verificar el Hardware
readSwitches();
readPots();
actualización de la pantalla
updateDisplay();
Hacer el ruido
Si (fPlayMode)
{
freqout (pasos [i], duración);
}
digitalWrite (DigitalOutLED, bajo);
Pausa entre pasos
retardo (tempo);
}
}
void updateDisplay()
{
Serial.Print (254, BYTE);
Serial.Print (192, BYTE);
Serial.Print ("t");
Serial.Print (tempo);
Serial.Print ("d:");
Serial.Print (duración);
Si (lastPushedStep! = -1)
{
Serial.Print ("*");
Serial.Print (lastPushedStep);
}
}
Lea los valores actuales de las ollas, llamadas del lazo.
void readPots)
{
Tempo = (analogRead (AnalogInTempo) * 1.9);
duración = (analogRead (AnalogInDuration));
}
Leer los valores actuales de los interruptores y
Si presiona, cambiar frecuencia de ranura del interruptor
mediante la lectura de la olla de la frecuencia.
void readSwitches()
{
restablecer botón empujado el último número
lastPushedStep = -1;
Compruebe el interruptor de 0, si pulsa, meter la frecuencia actual en paso 0, etc., etc..
Si (digitalRead (DigitalInSwitch0) == HIGH)
{
pasos [0] = analogRead(AnalogInFrequency);
lastPushedStep = 1;
}
else if (digitalRead (DigitalInSwitch1) == HIGH)
{
pasos [1] = analogRead(AnalogInFrequency);
lastPushedStep = 2;
}
else if (digitalRead (DigitalInSwitch2) == HIGH)
{
pasos [2] = analogRead(AnalogInFrequency);
lastPushedStep = 3;
}
else if (digitalRead (DigitalInSwitch3) == HIGH)
{
pasos [3] = analogRead(AnalogInFrequency);
lastPushedStep = 4;
}
else if (digitalRead (DigitalInSwitch4) == HIGH)
{
pasos [4] = analogRead(AnalogInFrequency);
lastPushedStep = 5;
}
else if (digitalRead (DigitalInSwitch5) == HIGH)
{
pasos [5] = analogRead(AnalogInFrequency);
lastPushedStep = 6;
}
else if (digitalRead (DigitalInSwitch6) == HIGH)
{
pasos [6] = analogRead(AnalogInFrequency);
lastPushedStep = 7;
}
else if (digitalRead (DigitalInSwitch7) == HIGH)
{
pasos [7] = analogRead(AnalogInFrequency);
lastPushedStep = 8;
}
}
freqout código por Paul Badger
Freq - valor de la frecuencia
t - tiempo de duración de tono
void freqout (int freq, int t)
{
int hperiod; calcular 1/2 tiempo en nosotros
ciclos de tiempo, i;
restar 7 US para arriba - digitalWrite determinado empíricamente
hperiod = (500000 / ((freq-7) * pitchval));
calcular ciclos
ciclos = (freq (largo) * t (tiempo)) / 1000; calcular ciclos
para (i = 0; i < = ciclos; i ++)
{/ / juego Nota para t ms
digitalWrite (DigitalOutSignal, alto);
delayMicroseconds(hperiod);
digitalWrite (DigitalOutSignal, bajo);
delayMicroseconds (hperiod - 1); -1 de microsegundo fraccional en digitaWrite arriba
}
}