Arduino

Iets nettere sketch voor midi shield

Monday, December 17, 2012
Iets nettere sketch voor midi shieldLike0

Dit midi shield stuurt wat minder midi-informatie uit. Door te kijken wanneer een waarde veranderd is – en alleen dan data uit te zenden – vang je een hoop op. Maar niet alles en dat heeft er mee te maken dat er kleine meet-schommelingen zijn in de Arduino zelf. Die zijn op te vangen door middel van debouncen, bij knoppen althans, dus ik zal eens kijken of ik dat er ook in kan krijgen. Voor nu – ietsje netter, maar nog niet ideaal:

[youtube clip_id=X8v9qdxWQOo]

 

// SparkFun MIDI Shield and MIDI Breakout test code
// Defines bare-bones routines for sending and receiving MIDI data
// Written 02/16/10
// Modified by Lucas van Tol @ 16-12-2012

// defines for MIDI Shield components only
#define KNOB1  0                        // Definieer draaiknop 1
#define KNOB2  1                        // Definieer draaiknop 2

#define BUTTON1  2                      // Definieer drukknop 1
#define BUTTON2  3                      // Definieer drukknop 2
#define BUTTON3  4                      // Definieer drukknop 3

#define STAT1  7                        // Definieer STAT1 als led output op shield
#define STAT2  6                        // Definieer STAT2 als led output op shield

byte note1;                              // Definieer midi note
byte note2;                              // Definieer midi note
byte velocity;                          // Definieer midi velocity
int pot1;                                // Definieer potentiometer (pin A0)
int pot2;                               // Definieer potentiometer (pin A1)
int previouspot1;                        // Sla hier de vorige veranderde waarde van pot1 op (ter vergelijking)
int previouspot2;                      // Sla hier de vorige veranderde waarde van pot2 op (ter vergelijking)

void setup() {

pinMode(STAT1,OUTPUT);              // Pin 7 is vanaf nu een output.
pinMode(STAT2,OUTPUT);              // Pin 6 is vanaf nu een output.

pinMode(BUTTON1,INPUT);              // Drukknop 1 op pin 2 is nu een input.
pinMode(BUTTON2,INPUT);              // Drukknop 2 op pin 3 is nu een input.
pinMode(BUTTON3,INPUT);              // Drukknop 3 op pin 4 is nu een input.

digitalWrite(BUTTON1,HIGH);          // Schrijf de waarde HIGH naar drukknop 1
digitalWrite(BUTTON2,HIGH);          // Schrijf de waarde HIGH naar drukknop 2
digitalWrite(BUTTON3,HIGH);          // Schrijf de waarde HIGH naar drukknop 3

for(int i = 0;i < 10;i++)             // Knipper MIDI Shield LED’s tijdens het opstarten
{
digitalWrite(STAT1,HIGH);          // HIGH betekent: LED UIT
digitalWrite(STAT2,LOW);           // LOW betekent: LED AAN
delay(100);
digitalWrite(STAT1,LOW);
digitalWrite(STAT2,HIGH);
delay(100);
}
digitalWrite(STAT1,HIGH);             // Zet uiteindelijk beide LEDjes uit
digitalWrite(STAT2,HIGH);

Serial.begin(31250);                  // Baudrate voor MIDI moet 31250 zijn
}

void loop () {

//*************** MIDI OUT ***************//

pot1 = analogRead(0);                                        // pot = analoge waarde uitlezing van pin 0   (tussen 0 – 1023)
note1 = 127-(pot1/8);                                         // mappen naar 0-127 en draairichting knop omdraaien

if(previouspot1 != pot1){
Midi_Send(0xE0,note1,note1);
previouspot1 = pot1;
}
delay(10);

pot2 = analogRead(1);
note2 = 127-(pot2/8);                                         // mappen naar 0-127 en draairichting knop omdraaien

if(previouspot2 != pot2){
Midi_Send(0xB0,0x01,note2);    // 0xB0=Stuur Controller, 0x01=Modulation coarse (0x33 is fine)
previouspot2 = pot2;
}
delay(10);

}

void Midi_Send(byte cmd, byte data1, byte data2) {
Serial.print(cmd, BYTE);
Serial.print(data1, BYTE);
Serial.print(data2, BYTE);
}

char button(char button_num)
{
return (!(digitalRead(button_num)));
}

0

Leave a Reply

Your email address will not be published.

Follow @ Guerrilla Games
Instagram has returned invalid data.