/* 
NAME:                 MIDI Detector 
WRITTEN BY:           TOM SCARFF
DATE:                 9/9/2008
FILE SAVED AS:        midi_detector.pde
FOR:                  Miduino ATmega168
CLOCK:                16.00 MHz CRYSTAL                                        
PROGRAMME FUNCTION:   To read MIDI input and light D13 LED when MIDI data detected.
 
 IMPORTANT:
 your Miduino might not start if it receives data directly after a reset,
 because the bootloader thinks you want to upload a new progam.You might 
 need to unplug the midi-hardware until the board is running your program. 
 Also when programming the Miduino disconnect the MIDI IN cable.
 
HARDWARE NOTE:
The Midi IN Socket is connected to the Miduino RX through an 6N139 opto-isolator
 *
 * To send MIDI, attach a MIDI out Female 180 Degree 5-Pin DIN socket to Arduino.
 * Socket is seen from solder tags at rear.
 * DIN-5 pinout is:                                         _______ 
 *    pin 2 - Gnd                                          /       \
 *    pin 4 - 220 ohm resistor to +5V                     | 1     3 |  MIDI jack
 *    pin 5 - Arduino Pin 1 (TX) via a 220 ohm resistor   |  4   5  |
 *    all other pins - unconnected                         \___2___/
 *
 */

//variables setup

byte midiByte;
byte note;
byte velocity;
byte channel=0;
byte x;
byte flag=1;

byte LedPin = 13;   // select the pin for the LED




//setup: declaring iputs and outputs and begin serial 
void setup() {
  pinMode(LedPin,OUTPUT);   // declare the LED's pin as output
  
  for (x=1; x<=4; x++){
    digitalWrite( LedPin, HIGH );
    delay(300);
    digitalWrite( LedPin, LOW );
    delay(300);
    }
  
  //start serial with midi baudrate 31250 or 38400 for debugging
  Serial.begin(31250);        
  digitalWrite(LedPin,HIGH);  
  Serial.flush();
}

//loop: wait for serial data, and output the message 
void loop () {
  
  if (flag==1){
   digitalWrite(LedPin,HIGH); 
  }
  if (flag==0){
   digitalWrite(LedPin,LOW); 
  }

  if (Serial.available() > 0){
   // read the incoming byte:
    midiByte = Serial.read();
    Serial.print(midiByte, BYTE);
     
      if (flag==1){
  flag=0; 
  }
  else{
  flag=1; 
  }
     
  }
}