Paso 6: Codificación de conceptos
//These are the midi commands to interact with the arduino byte midi_on = 0x90; byte midi_off = 0x80; /* These global variables are used specifically with the check_midi() function listed later in the program */ byte location_byte; byte in_note; byte in_volume;
En primer lugar establecemos una variable constante para el mensaje midi_on y el mensaje de midi_off para que rápidamente podemos referirnos a ellos en el código. A continuación, creamos variables de 3 bytes para la entrada de las funciones de midi como notado anteriormente.
A continuación vuelven a ser las funciones de midi:
Esta es la función de internet para escribir el tono vacío midi_send (byte cmd, nota de byte, byte volumen) {digitalWrite(3,LOW); Serial.Write(CMD); Serial.Write(Note); Serial.Write(Volume); } //Here is the internet function for writing out the pitch void midi_send(byte cmd, byte note, byte volume) { digitalWrite(3,LOW); Serial.write(cmd); Serial.write(note); Serial.write(volume); } //reads the serial port to see if there is any incoming information boolean check_midi() { while (Serial.available() >= 3)//when three bytes available { if (Serial.available()) { digitalWrite(3,HIGH); location_byte = Serial.read();//read first byte in_note = Serial.read();//read next byte in_volume = Serial.read();//read final byte return true; } } }
Aquí están las funciones que mencionamos anteriormente. Se copian simplemente por causa de la continuidad. Movimiento...
//arduino specific setup void setup () { Serial.begin(31250); pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5, OUTPUT); digitalWrite(3,LOW); digitalWrite(4,LOW); digitalWrite(5, LOW); }
Esto es una parte muy importante de la Arduino. Esto fija la tasa de baudios y la tasa en la cual el Arduino Lee los bits que se está enviando a la velocidad que requieren los sistemas midi. A continuación establece pines 3, 4 y 5 a los pines de salida. Finalmente escribe los pines de salida para fuera o bajo.
void light_on() {int switch_note = in_note % 12; switch(switch_note) {//C caso 0: digitalWrite(3,HIGH); break; //D caso 2: digitalWrite(4,HIGH); break; caso //E 4: digitalWrite (5, HIGH); break; //F caso 5: digitalWrite(3,HIGH); digitalWrite(4,HIGH); break; caso //G 7: digitalWrite(4,HIGH); digitalWrite(5,HIGH); break; //A caso 9: digitalWrite(3,HIGH); digitalWrite (5 ALTO); rotura; Caso B 11: void light_on() { int switch_note = in_note % 12; switch(switch_note) { //C case 0: digitalWrite(3,HIGH); break; //D case 2: digitalWrite(4,HIGH); break; //E case 4: digitalWrite(5, HIGH); break; //F case 5: digitalWrite(3,HIGH); digitalWrite(4,HIGH); break; //G case 7: digitalWrite(4,HIGH); digitalWrite(5,HIGH); break; //A case 9: digitalWrite(3,HIGH); digitalWrite(5,HIGH); break; //B case 11: digitalWrite(3,HIGH); digitalWrite(4,HIGH); digitalWrite(5,HIGH); break; } } //quick call to turn all the lights off void light_off() { digitalWrite(3,LOW); digitalWrite(4,LOW); digitalWrite(5,LOW); } rotura; llamar a //quick}} para encender todas las luces off void light_off() {} //the main loop void loop() { //checks if there is a midi to use, then sends it out (echoes echoes echoes echoes) if(check_midi()) midi_send(location_byte,in_note,in_volume); if(location_byte == midi_on && in_volume != 0) { light_on(); } else light_off(); }
La primera función es realmente la carne del código, mientras que el segundo es simplemente una llamada de referencia rápida para apagar todos los LEDs a la vez. La primera función lee la entrada de la variable in_note, se divide por 12, (puesto que hay 12 tonos en música). Basado en lo que cuenta es, se enciende el color apropiado escribiendo los pernos a alta. Ahora para la culminación final de todos estos:
Aquí es el bucle principal de la función. En primer lugar, comprueba si hay en venir entrada midi y si lo es, envía a través de la función midi_send. Puesto que el check_midi() se llena las variables globales, comprobamos si hay una llamada midi_on y que el volumen de la nota entrante no es 0. Si se cumplen esas condiciones, funciona a través de la función light_on() y enciende las luces. De lo contrario, apaga las luces por defecto. Y eso es todo!