Paso 2:
3,3 Keypress"Análisis" es el proceso que utilicé para multiplexar el botón botón para no tener que utilizar 16 pines en el microcontrolador de 16 botones. En vez de eso solo tuve que usar 8 pernos. Si hace referencia al paso 4 he incluido el esquema para la almohadilla del botón compré de sparkfun electronics y han indicado el camino de la señal de cada pin en el teclado botón PCB. Como puedes ver hay pines separados para controlar los LEDs y control de los botones. Los pines de control del LED se discutirá en una sección posterior.
El microcontrolador es configurarlo para que todas las columnas son salidas y todas las filas son las entradas. Si hace referencia al esquema de teclado botón, comienzo poniendo la primera columna (que es el pic RB4) a cero. Configurar el resto de las columnas para 1(RB5,RB6,RB7). Entonces, el programa comprueba el estado de todas las filas en el mismo time(RC4,RC5,RC7,RC0). El programa hace una pausa de 1 milisegundo y comprueba de nuevo los pernos. Desde interruptores y botones de rebote a menudo, esto provoca ondulaciones no deseadas en la señal, así eliminamos esto con un proceso llamado de rebote. Si los valores de los dos controles son iguales entonces significa que es una pulsación válida sobre esa columna y no una despedida. El programa entonces entra en un bucle, que comprueba el estado de cada una de las filas. Si se presiona un botón en la columna, se lee como un cero en la fila correspondiente ya que la columna se establece en cero. Puesto que cada uno de los pernos de las filas tiene un resistor de pull-up de 10 k (no se muestra en el esquema de teclado botón), si no se presiona un botón que perno de la fila se leerá como un 1.
Una vez que se detecta una pulsación en la columna se envía un mensaje de midi byte 3 sobre el hardware del puerto serial en el PIC. El primer byte es 0x92 que el equipo se detecta como una nota de canal 4 en el mensaje. El segundo byte es que nota es encendido, que puede estar en cualquier lugar entre 0 y 127. Puesto que estoy usando un bucle comprobar cada una de las filas que estoy usando el de variable de bucle "i" para indicar que nota quiero en. Puesto que también estoy usando 8 bancos de notas (total 128 notas) la agrego a la variable actual de banco que es "c". El proceso del interruptor de banco será discutido en la sección 3.4. El último byte es la velocidad que también puede ser en cualquier lugar entre 0 y 127, pero con todos los botones configurar ese valor a 100. La siguiente línea de código a continuación, envía los mismos comandos en texto ascii a un LCD sobre un pin del microcontrolador que configuré software serie hacia fuera.
El microcontrolador también debe detectar cuando una nota es porque necesita enviar otro comando para apagar esa misma nota. Dentro del mismo bucle que esto se hace mediante el envío de los misma 3 bytes excepto el byte(velocity) pasado, se establece en cero que apaga esa nota. Si este comando no enviado, esa nota quedaría indefinidamente, incluso si ese botón fue lanzado.
Hasta este punto sólo hemos comprobado el estado y envía comandos para los 4 botones en la primera columna. Todo este proceso es repetido 3 veces más, uno para cada columna. En el siguiente bucle for establecer la columna próxima a cero y el resto el valor 1 y lo mismo para las columnas restantes.
3.4 Banco cambio
Puesto que hay 128 midi diferentes notas que se pueden enviar como un comando midi que quería ser capaz de hacer usan de todos ellos, así que añadido la capacidad de banco entre los grupos de 16 notas a la vez. Para ello he añadido dos botones en el panel frontal debajo de la pantalla (ver figura 1.0). Para Banco para arriba, yo encuestados la entrada del perno en el microcontrolador que configurar como entrada para banca para arriba. Desde configurar estas entradas del microcontrolador con una resistencia de pull-down he comprobado baja o alta transición cuando el interruptor se conecta a VDD. Cuando se detectó que la transición, he añadido uno a la variable "j". Lo configuro para que una vez que "j" tenía más de 8 restablecer a cero. Yo también quería guardar el Banco en la eeprom no volátil así que si por razón lo que tengo que quitar el poder a volver a organizar los cables del controlador midi botas para arriba y se ajusta automáticamente a la orilla fue antes de se apagó. También encontré que si estaba sosteniendo una nota y uno de los botones bank presiona al mismo tiempo, el controlador midi perdido la pista de que nota se presionó para que esa nota nunca se apague. Para solucionar esto he hecho un bucle que desactiva todas las notas al mismo tiempo en cualquier momento deposito arriba o abajo. Usé el mismo código para el Banco botón excepto en lugar de agregar uno a la "j" restan uno de "j" y ha restablecer a 8 si fue por debajo de 1. Que configurarlo así "j" como una variable global y se utiliza a través de diferentes secciones del programa.
Al final de esta función, comprobar cuál es el valor j es y establecer en consecuencia la variable "c". "c" permite que el controlador midi con 16 notas a la vez añadiendo a cualquier número de teclado que está presionando. Por ejemplo si quiero número de nota midi 35 en, tengo que ir al Banco 3. "c" se agrega a que el número clave estoy pulsando. Por lo que si estoy presionando el botón número 3 en el teclado, controlador midi agrega el valor "c", que en este caso es 32.
3.5 RGB
Me puse a un lado 3 pines en el microcontrolador para controlar todos los LEDs RGB. Ra0 controla todos los LEDs rojo, RA1 controla todos los LEDs verdes y RA2 controla todo el azul. Cada pin controla todos los LEDs al conectar a la puerta de un MOSFET en el tablero de conductor del LED (ver paso 4). Los LEDs tuvieron que ser conducido de esta manera porque la corriente necesaria para manejar los LEDs supera el actual abastecimiento de capacidades microctrollers.
Esta función RGB en el programa básicamente comprueba qué Banco de información sobre el controlador midi en comprobando el valor de la variable "j". Para obtener los colores simplemente combiné diferentes conjuntos de colores juntos. Por ejemplo, para obtener el color púrpura, enciendo el rojo y azul al mismo tiempo por RA0 y RA2 a alta y RA1 a bajo.