Étape 6: Concepts de codage
//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;
Tout d’abord, nous avons mis une variable constante pour le message midi_on et le message de midi_off, afin que nous pouvons référer rapidement à la leur dans le code. Ensuite, nous créons des variables de 3 octets pour l’entrée des fonctions midi comme vous l’avez remarqué plus tôt.
Viennent ensuite les fonctions midi à nouveau :
Voici la fonction internet à l’écriture du midi_send Sub pitch (octet cmd, remarque octet, volume octets) {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; } } }
Voici les fonctions que nous avons mentionné plus tôt. Ils sont copiés simplement pour l’amour de la continuité. Déplacement...
//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); }
Il s’agit d’une partie très importante de l’Arduino. Ceci définit la vitesse de transmission, ou le taux auquel l’Arduino lit les bits qu’il est envoyé au taux qui exigent des systèmes midi. Il affecte ensuite broches 3, 4 et 5 broches de sortie. Pour finir, il écrit les broches de sortie pour descendre ou faible.
void light_on() {int switch_note = in_note % 12 ; switch(switch_note) {//C case 0: digitalWrite(3,HIGH) ; break ; case //D 2: digitalWrite(4,HIGH) ; break ; case //E 4: digitalWrite (5, HIGH); break ; case //F 5: digitalWrite(3,HIGH) ; digitalWrite(4,HIGH) ; Pause //G cas 7: digitalWrite(4,HIGH) ; digitalWrite(5,HIGH) ; break ; //A cas 9: digitalWrite(3,HIGH) ; digitalWrite (5 ÉLEVÉ) ; rupture ; B cas 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); } rupture ; composez le //quick}} pour mettre toutes les lumières light_off() Sub { //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 première fonction est vraiment la viande du code, tandis que le second est tout simplement un appel de référence rapide pour désactiver toutes les LED en même temps. La première fonction lit l’entrée de la variable in_note, divise par 12 (car il y a 12 tons dans la musique). Basé sur quelle note qu'il est, il allume la couleur appropriée en écrivant les broches à haute. Maintenant pour l’aboutissement final de tous ceux-ci :
Voici la boucle principale de la fonction. Tout d’abord, il vérifie pour voir si il en entrée d’entrée midi et si c’est, il envoie via la fonction midi_send. Etant donné que la check_midi() remplit les variables globales, nous vérifions pour voir si il y a un appel de midi_on, et que le volume de la note entrante n’est pas 0. Si ces conditions sont remplies, il fonctionne grâce à la fonction light_on() et allume les lumières. Dans le cas contraire, il allume l’éclairage par défaut. Et c’est tout !