Stap 6: Codering concepten
//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;
We stellen eerst een constante variabele voor het bericht van de midi_on en de midi_off-bericht zodat we snel naar hen in de code verwijzen kunnen. Vervolgens maken we 3 byte variabelen voor de inbreng van de midi-functies als u eerder gemerkt.
Vervolgens zijn de midi-functies weer:
Hier is de internet-functie voor het schrijven van de worp void midi_send (byte cmd, byte opmerking, byte volume) {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; } } }
Hier zijn de functies die we al eerder zagen. Ze worden gekopieerd gewoon omwille van de continuïteit. Bewegen op...
//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); }
Dit is een zeer belangrijk onderdeel van de Arduino. Dit stelt de baud-rate, hetzij van de prijs waartegen de Arduino leest de bits die worden verzonden naar de wisselkoers die midi systemen vereisen. Volgende daarin pinnen 3, 4 en 5 naar output pinnen. Tot slot schrijft het de pennen als u wilt uitschakelen of laag.
VOID light_on() {int switch_note = in_note % 12; switch(switch_note) {//C geval 0: digitalWrite(3,HIGH); break; case //D 2: digitalWrite(4,HIGH); break; case //E 4: digitalWrite (5, hoge); break; //F case 5: digitalWrite(3,HIGH); digitalWrite(4,HIGH); break; //G geval 7: digitalWrite(4,HIGH); digitalWrite(5,HIGH); break; //A zaak 9: digitalWrite(3,HIGH); digitalWrite (5 HOGE); breken; B case 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); } breken; }} //quick oproep aan alle van de lichten uit nietig 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(); }
De eerste functie is echt het vlees van de code, terwijl de tweede gewoon een snelle verwijzing gesprek is uitschakelen alle LEDs tegelijk. De eerste functie leest de input van de variabele in_note, verdeelt het door 12 (want er zijn 12 tonen in de muziek). Gebaseerd op de opmerking wat dat het is, blijkt op de gewenste kleur door het schrijven van de pinnen op hoog. Nu voor het laatste hoogtepunt van al deze:
Hier is de hoofdlus van de functie. Ten eerste wordt gecontroleerd als er in midi input komen en als het is, dan het via de midi_send functie stuurt. Aangezien de check_midi() de globale variabelen vult, controleren wij om te zien of er een oproep van de midi_on en dat het volume van de binnenkomende notitie is niet 0. Als aan deze voorwaarden wordt voldaan, het loopt door de light_on() functie en schakelt de verlichting. Anders wordt het de lichten uitgeschakeld als een standaard. En thats it!