mbeduino MIDI Shield test I ported SparkFun MIDI Shield test code into meduino. Regarding mbeduino, refer to http://mbed.org/users/okini3939/notebook/mbeduino/

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
xshige
Date:
Mon Oct 11 10:53:42 2010 +0000
Commit message:

Changed in this revision

ArduinoShield.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 665c7d36f533 ArduinoShield.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ArduinoShield.h	Mon Oct 11 10:53:42 2010 +0000
@@ -0,0 +1,50 @@
+
+// Arduino vs mbed Pin Assignment
+#define ARD_D0 p27
+#define ARD_D1 p28
+#define ARD_D2 p29
+#define ARD_D3 p21
+#define ARD_D4 p30
+#define ARD_D5 p22
+#define ARD_D6 p23
+#define ARD_D7 p11
+#define ARD_D8 p12
+#define ARD_D9 p24
+#define ARD_D10 p25
+#define ARD_D11 p5
+#define ARD_D12 p6
+#define ARD_D13 p7
+
+#define ARD_D14 ARD_A0
+#define ARD_D15 ARD_A1
+#define ARD_D16 ARD_A2
+#define ARD_D17 ARD_A3
+#define ARD_D18 ARD_A4
+#define ARD_D19 ARD_A5
+
+#define ARD_A0 p15
+#define ARD_A1 p16
+#define ARD_A2 p17
+#define ARD_A3 p18
+#define ARD_A4 p19
+#define ARD_A5 p20
+
+#define ARD_RX ARD_D0
+#define ARD_TX ARD_D1
+#define ARD_SDA p9
+#define ARD_SCL p10
+#define ARD_MOSI p5
+#define ARD_MISO p6
+#define ARD_SCK p7
+
+// arduino compatible stuff
+typedef unsigned char byte;
+#define HIGH 1;
+#define LOW 0;
+
+
+void delay(int t) {
+    wait_ms(t);
+    return;
+}
+
diff -r 000000000000 -r 665c7d36f533 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon Oct 11 10:53:42 2010 +0000
@@ -0,0 +1,295 @@
+//
+// mbeduino MIDI Shield test
+//
+// original: SparkFun MIDI Sheild test code
+//
+// 2010/10/11 ported by: xshige
+// I keep the original(Arduino) programming style as much as possible
+
+#include "mbed.h"
+#include "ArduinoShield.h"
+
+// ---- --Arduino program start ------------
+
+// SparkFun MIDI Sheild and MIDI Breakout test code
+// Defines bare-bones routines for sending and receiving MIDI data
+// Written 02/16/10
+
+
+// defines for MIDI Shield components only
+#if 1
+#define KNOB1  ARD_A0
+#define KNOB2  ARD_A1
+
+#define BUTTON1  ARD_D2
+#define BUTTON2  ARD_D3
+#define BUTTON3  ARD_D4
+
+#define STAT1  ARD_D7
+#define STAT2  ARD_D6
+#endif
+#if 0
+#define KNOB1  0
+#define KNOB2  1
+
+#define BUTTON1  2
+#define BUTTON2  3
+#define BUTTON3  4
+
+#define STAT1  7
+#define STAT2  6
+#endif
+
+#define OFF 1
+#define ON 2
+#define WAIT 3
+
+byte incomingByte;
+byte note;
+byte velocity;
+int pot;
+
+byte byte1;
+byte byte2;
+byte byte3;
+
+int action=2; //1 =note off ; 2=note on ; 3= wait
+
+#if 1
+// prototype
+char button(int button_num);
+// button_num should be int not char!.
+void Midi_Send(byte cmd, byte data1, byte data2);
+
+// port allocation
+DigitalOut stat1(STAT1);
+DigitalOut stat2(STAT2);
+    
+AnalogIn knob1(KNOB1);
+AnalogIn knob2(KNOB2);
+
+DigitalInOut button1(BUTTON1);
+DigitalInOut button2(BUTTON2);
+DigitalInOut button3(BUTTON3);
+
+Serial midi(ARD_TX, ARD_RX);
+#endif
+
+void setup() {
+#if 1
+  button1.mode(PullUp);
+  button2.mode(PullUp);
+  button3.mode(PullUp);
+#endif
+#if 0
+  pinMode(STAT1,OUTPUT);   
+  pinMode(STAT2,OUTPUT);
+
+  pinMode(BUTTON1,INPUT);
+  pinMode(BUTTON2,INPUT);
+  pinMode(BUTTON3,INPUT);
+
+  digitalWrite(BUTTON1,HIGH);
+  digitalWrite(BUTTON2,HIGH);
+  digitalWrite(BUTTON3,HIGH);
+#endif
+
+  for(int i = 0;i < 10;i++) // flash MIDI Sheild LED's on startup
+  {
+#if 1
+    stat1=HIGH;  
+    stat2=LOW;
+#endif
+#if 0
+    digitalWrite(STAT1,HIGH);  
+    digitalWrite(STAT2,LOW);
+#endif
+    delay(30);
+#if 1
+   stat1=LOW;  
+   stat2=HIGH;
+#endif
+#if 0
+    digitalWrite(STAT1,LOW);  
+    digitalWrite(STAT2,HIGH);
+#endif
+    delay(30);
+  }
+#if 1
+  stat1=HIGH;   
+  stat2=HIGH;
+#endif  
+#if 0
+  digitalWrite(STAT1,HIGH);   
+  digitalWrite(STAT2,HIGH);
+#endif
+
+  //start serial with midi baudrate 31250
+#if 1
+  midi.baud(31250);
+#endif
+#if 0
+  Serial.begin(31250);     
+#endif
+}
+
+void loop () {
+
+  //*************** MIDI OUT ***************//
+#if 1
+  pot = knob1.read_u16();
+//printf("pot:%d ",pot);// debug
+#endif
+#if 0
+  pot = analogRead(0);
+#endif
+#if 1
+  note = pot/511;  // convert value to value 0-127
+#endif
+#if 0
+  note = pot/8;  // convert value to value 0-127
+#endif
+  if(button(BUTTON1) || button(BUTTON2) || button(BUTTON3))
+  {  
+    Midi_Send(0x90,note,0x45);
+    while(button(BUTTON1) || button(BUTTON2) || button(BUTTON3));
+  }
+
+  //*************** MIDI LOOPBACK ******************//
+#if 1
+  if(midi.readable() > 0)
+#endif
+#if 0
+  if(Serial.available() > 0)
+#endif
+  {
+#if 1
+    byte1 = midi.getc();
+    byte2 = midi.getc();
+    byte3 = midi.getc();
+#endif
+#if 0
+    byte1 = Serial.read();
+    byte2 = Serial.read();
+    byte3 = Serial.read();
+#endif
+    Midi_Send(byte1, byte2, byte3);
+  }
+
+  //*************** MIDI IN ***************//
+#if 1
+  if (midi.readable() > 0) {
+    // read the incoming byte:
+    incomingByte = midi.getc();
+printf("Incoming MIDI data: %02X\r\n",incomingByte);//debug
+#endif
+#if 0
+  if (Serial.available() > 0) {
+    // read the incoming byte:
+    incomingByte = Serial.read();
+#endif
+    // wait for as status-byte, channel 1, note on or off
+    if (incomingByte== 144) // Note on
+    { 
+      action = OFF;
+    }
+    else if (incomingByte== 128) // Note off
+    { 
+      action = ON;
+    }
+    else if (note==0 && action != WAIT) // note on, wait for note value
+    { 
+      note=incomingByte;
+    }
+    else if (note!=0 && action != WAIT)  // velocity
+    { 
+      velocity=incomingByte;
+      if(action == ON){ 
+        Midi_Send(0x90,note,velocity); 
+      }
+      if(action == OFF){ 
+        Midi_Send(0x80,note,velocity); 
+      }
+      note=0;
+      velocity=0;
+      action=WAIT;
+    }
+    else{
+    }
+  }
+
+}
+
+void Midi_Send(byte cmd, byte data1, byte data2) {
+#if 1
+printf("Outgoing MIDI data: %02X:%02X:%02X\r\n",cmd,data1,data2); // debug
+  midi.putc(cmd);
+  midi.putc(data1);
+  midi.putc(data2);
+#endif
+#if 0
+  Serial.print(cmd, BYTE);
+  Serial.print(data1, BYTE);
+  Serial.print(data2, BYTE);
+#endif
+}
+
+void blink(){
+#if 1
+  stat1=HIGH;
+#endif
+#if 0
+  digitalWrite(STAT1, HIGH);
+#endif
+  delay(100);
+#if 1
+  stat1=LOW;
+#endif
+#if 0
+  digitalWrite(STAT1, LOW);
+#endif
+  delay(100);
+}
+#if 1
+char button(int button_num)
+#endif
+#if 0
+char button(char button_num)
+#endif
+{
+#if 1
+    if (BUTTON1==button_num) return (!button1.read());
+    if (BUTTON2==button_num) return (!button2.read());
+    if (BUTTON3==button_num) return (!button3.read());
+    return 0; // never happen
+#endif
+#if 0
+  return (!(digitalRead(button_num)));
+#endif
+}
+
+
+// -------- arduino hidden main ---------
+
+void init(void) {
+ // make debug port Fast
+   Serial pc(USBTX, USBRX);
+//    pc.baud(9600);
+    pc.baud(115200);
+//  pc.baud(230400);
+    printf("mbeduino MIDI Shield Test\r\n");
+    printf("Rotate Knob#1 to change note.\r\n"
+            "Push any button to send MIDI note data.\r\n");
+}
+
+int main(void)
+{
+    init();
+ 
+    setup();
+ 
+    for (;;)
+        loop();
+ 
+    return 0;
+}
diff -r 000000000000 -r 665c7d36f533 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Mon Oct 11 10:53:42 2010 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/e2ac27c8e93e