Paso 4: Juego tiempo
Aquí tenéis un vídeo de demostración de lo que mi generación sonaba como cuando se utiliza un amplificador de audio alimentado por batería: http://youtu.be/JzKzRq4mcdk
//____________________________________________________
/*
write_pot (0, 0); 7555car umbral,
write_pot (1, 0); Descarga de 7555car,
write_pot (2, 0); Volumen de 7555car,
write_pot (3, 0); 7555mod vol, efectivamente el índice de modulación
write_pot (4, 0); 7555mod umbral
write_pot (5, 0); Descarga 7555mod
Cuando umbral y descarga se mueven juntos en un único chip (portador o modulador)
controlan frecuencia, cuando se trasladó de forma independiente, control de tono pero con el cambio
puslewidth o duty cicle. Esto cambia el timbre de la salida.
*/
Ajuste de presets.
escala de 0-127 por tanto para cada maceta, volumen es escalado diferentemente que otros parámetros.
int data_scale [] = {2, 2, 1.25, 1.25, 2, 2};
puede ser que necesite jugar con este número para obtener sus números de controlador con los 6 parámetros.
int controllerOffSet = 0; Este número es specfic al controlador midi novation
int correrá = 11;
int DATAIN = 12; MISO - no se utiliza, pero parte de builtin SPI
int SPICLOCK = 13; SCK
int SLAVESELECT = 10; SS
int incomingByte = 0;
Nota int = 0;
vel de int = 0;
regulador int = 0;
int valor = 0;
resistencia de byte = 0;
int index;
int outdex;
void setup()
{
Velocidad de transmisión de sistema MIDI:
Serial.Begin(31250);
depurador, o velocidad en baudios serie control
Serial.Begin(9600);
byte i = 0;
clr bytes = 0;
pines de configuración para trabajar con SPI
pinMode (correrá, salida);
pinMode (DATAIN, entrada);
pinMode(SPICLOCK,OUTPUT);
pinMode(SLAVESELECT,OUTPUT);
digitalWrite(SLAVESELECT,HIGH); desactivar dispositivo
SPCR = 01010000
interrupción deshabilitada, spi habilitado, msb 1, master, clk baja en reposo,
muestra en el borde de ataque de clk, sistema reloj/4 (más rápido)
SPCR = (1 << SPE) | (1 << maestro);
CLR = SPSR;
CLR = SPDR;
Delay(10);
un LED de Flash y flash cada dirección olla digital (para depuración) y silenciar el circuito
Set ollas todas a mínima y máxima resistencia y de vuelta
para (i = 0; i < 6; i ++)
{
digitalWrite (2, alto);
Delay(100);
write_pot(i,0);
digitalWrite (2, bajo);
Delay(100);
}
Delay(1000); espera un segundo
para (i = 0; i < 6; i ++)
{
digitalWrite (2, alto);
Delay(100);
write_pot (i, 255);
digitalWrite (2, bajo);
Delay(100);
255 = resistencia completa...
}
}
principal del programa
void loop()
{
Si (Serial.available() > 0) {}
incomingByte = Serial.read();
Si hay un formato de mensaje específico, si se detecta un byte específico de estado MIDI
tratar los siguientes dos bytes entrantes como bytes de datos
//
Si (incomingByte == 176) {/ / mensaje de estado para el canal de midi cc 1
Delay(1);
registrar el siguiente byte como el número de controlador
controlador = Serial.read() - controllerOffSet;
Delay(1);
grabar el tercer byte como el valor o datos del controlador
valor = Serial.read();
}
Si el número de controlador está dentro del rango adecuado,
Utilice el número de controlador la dirección (1 de las resistencias de 6) y
utilizar el valor de que el regulador para ajustar la resistencia de dicha dirección
Si (controlador < 6 & & controlador > = 0) {}
algunos de los parámetros pueden necesitar escalamiento,
write_pot (controlador, ((valor * data_scale[controller])));
encender un LED cuando se envían los datos (para usuario retroalimentación/depuración)
digitalWrite (2, alto);
Delay(1);
} / / fin si controlador
} / / fin si serial
Delay(1);
digitalWrite (2, bajo);
} / / fin de bucle principal
//-----------------------------------------------------------custom function calls--------------------
función para enviar datos a una dirección particular
byte write_pot (int direccion, int valor)
{
digitalWrite(SLAVESELECT,LOW);
operación de 2 bytes
spi_transfer(Address);
spi_transfer(Value);
digitalWrite(SLAVESELECT,HIGH); liberar chip, señal de transferencia final
}
función de transferencia de datos sobre SPI
char spi_transfer (datos char volátiles)
{
SPDR = datos; Iniciar la transmisión
mientras (!. (SPSR & (1 << SPIF))) Esperar el final de la transmisión
{
};
volver SPDR; volver el byte recibido
}