Controlado por MIDI sintetizador analógico FM (4 / 4 paso)

Paso 4: Juego tiempo

Con un MIDI controlador conectado al Arduino y Audio conectado a la salida del potenciómetro Digital, ejecute el código (pegados/ligado abajo) y ya está listo para rock.

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
}

Artículos Relacionados

Sintetizador de música analógico controlado por MIDI

Sintetizador de música analógico controlado por MIDI

Para mi proyecto de diseño senior de ingeniería eléctrica, decidí diseñar un sintetizador de música analógica con control MIDI. Tengo que admitir, esto era lo que quería hacer desde la escuela secundaria y fue mi objetivo como músico, artista, bricol
Intro de sintetizador analógico

Intro de sintetizador analógico

Bienvenido al cómo construir un sintetizador, guía de principiantes a las cosas que necesita saber para construir un sintetizador analógico.Antecedentes sobre el proyecto - en nuestro último año en nuestra escuela que todas las personas mayores recib
Analógico sequencerbox

Analógico sequencerbox

Me jugando con mi sequencerbox analógico. Contiene: un secuenciador analógico autoconstruido de 16 paso de 2 4017 ICs (CV cabo + 4 tambor x disparar hacia fuera), Gakken SX-150 sintetizador analógico, las entrañas de una batería de dedo, un análogo d
Sensores analógicos - calcular la no linealidad introducida por una carga o Pull-Down Resistor

Sensores analógicos - calcular la no linealidad introducida por una carga o Pull-Down Resistor

¿Ha tenido alguna vez esa sensación terrible que añadir una resistencia de carga o 'bajar' a su sensor está arruinando todas las lecturas analógicas?Tal vez te estás preguntando ¿por qué queremos echar a perder un circuito perfectamente bueno poniend
Helicóptero RC controlado por cerebro

Helicóptero RC controlado por cerebro

este Instructable le mostrará cómo tomar un Helicóptero de Radio Control y modificar el hardware de control remoto que puede ser operado por programas informáticos de fuente libre, abierta y volado basado en mediciones de ondas cerebrales de concentr
Reloj de alcance: sensor analógico reloj y temperatura en un osciloscopio

Reloj de alcance: sensor analógico reloj y temperatura en un osciloscopio

Scopeclock es un equipo fácil de usar para hacer más útil tu osciloscopio analógico capaz de X-Y. Usando este simple utilizar hardware que puede convertir tu osciloscopio analógico en un reloj de alcance. Este proyecto era yo y mi amigo kshitij gupta
Nunchuck Wii inalámbrico controlado por Arduino

Nunchuck Wii inalámbrico controlado por Arduino

Utilizar un sin modificar totalmente inalámbrico Wii Nunchuck como un sistema de control para cualquier proyecto basado en Arduino. No pares de transmisor/receptor de radio mayor etc..Este instructable asumir alguna experiencia con el microcontrolado
ROBOT controlado por humanos dedos

ROBOT controlado por humanos dedos

Esta innovación viene de los movimientos de mano que pueden controlar un robot. En este proyecto utilizo flex sensor y estoy tomando el sensor flex leyendo y poniendo esta lectura a la intel edison. como un valor analógico y manipular estos valores y
Cómo hacer fotografía Time-lapse inteligente controlado por Arduino

Cómo hacer fotografía Time-lapse inteligente controlado por Arduino

proyecto: fotografía Time-lapse dinámica sensible a la luz y ajustablePor Holden Leslie-BoleCosto aproximado: $70 sin la cámaraHe estado haciendo alguna fotografía Time-lapse con mi GoPro HERO3 un rato ahora, y he conseguido algunas imágenes grandes.
Controlado por Twitter alimentador del animal doméstico

Controlado por Twitter alimentador del animal doméstico

Un gran proyecto para los dueños de mascotas ocupados. Este alimentador del animal doméstico controlado por Twitter automáticamente distribuye alimentos en respuesta a la actividad en su cuenta de Twitter. El proyecto es controlado por un Arduino y e
Arduino Robot V2 (rápido) también controlado por voz

Arduino Robot V2 (rápido) también controlado por voz

Esta es mi segunda versión de mi robot arduino después "Construir tu primer robot". Mi segunda versión es un poco complicada en comparación con mi primer uno pero ofrece mejor. En este instructable voy para mostrarle cómo construir un robot rápi
Láser analógico Guitar Hero

Láser analógico Guitar Hero

ser un análogo entusiasta y amante de Guitar Hero, a veces me gustaría saber exactamente cómo funciona el juego y si me pude construyo una versión independiente. Este Instructable muestra cómo construir una variante de Guitar Hero totalmente de circu
¿Reparación analógico PSP 1000

¿Reparación analógico PSP 1000

recuerda cuando compraste ese brillante nueva PSP cuando salieron? ¿Recuerdas los años de juego que pones en él?Para aquellos de ustedes que han tenido su PSP desde que salió, no diga que usted nunca ha tenido problemas con el analog nub, después de
Quadcopter controlado por Kinect

Quadcopter controlado por Kinect

se desarrolló un método para pilotar un quadcopter controlado por Arduino utilizando un Microsoft Kinect. Las pistas de Kinect una mano gestos y convierte en X, Y, Z coordenadas. Esta salida es transmitida para el quadcopter mediante dos módulos Xbee