Pages: 1 [2]   Go Down
Author Topic: LDR with logic pro 9 (midi trigger)  (Read 2903 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Okay I got this to work and the sound from logic is getting to analog pin 0.  But Idk how to get them to work together or which par the original code I was using (not the arduino example) works with the ldr. 
Logged

Sydney, Australia
Offline Offline
Edison Member
*
Karma: 33
Posts: 1283
Big things come in large packages
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

There is no analogRead() anywhere in the code? That seems like a good place to start looking to me.
Logged

Arduino libraries http://arduinocode.codeplex.com
Parola hardware & library http://parola.codeplex.com

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I uploaded the example's code to what I already had.
[codeMidi_touch_2.ino: In function 'void setup()':
Midi_touch_2:129: error: redefinition of 'void setup()'
Midi_touch_2:42: error: 'void setup()' previously defined here
Midi_touch_2.ino: In function 'void loop()':
Midi_touch_2:134: error: redefinition of 'void loop()'
Midi_touch_2:51: error: 'void loop()' previously defined here

If it reads "previously defined here: doesn't it mean it was already there.
Logged

Manchester (England England)
Offline Offline
Brattain Member
*****
Karma: 634
Posts: 34518
Solder is electric glue
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
If it reads "previously defined here: doesn't it mean it was already there.
Yes.

You should get a grip of at least the very basics of programming, it is hard to help you when you don't know what the help means.
It is like helping some one to do a hurdles race and finding out they can't stand up yet.

To join two pieces of code you need to do what it tells you here:-
http://www.thebox.myzen.co.uk/Tutorial/Merging_Code.html
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Okay, I hear ya grumpy mike. I shall read your article and learn the basics.
But just for the record this thing is actually working!
The ldr is triggering sounds from  logic. The only problem is it's only working in the dark?!(any thoughts?)
It says also that I need to share the 5v line for the other ldrs. Does that mean I put multiple jumpercables in the same input on arduino?



A recap.
I'm running this code ;

Code:
unsigned char PadNote[4] = {45,55,60,67};         // MIDI notes from 0 to 127 (Mid C = 60)
                                                  // Imagine a piano roll. 45 55 are keys located on the middle for example.
                                                  // Tweak it to what sounds better to you.
 
int CutOff = 40;   // This is the minimal amount of analog reading before triggering the note!
 
int MaxPlayTime[6] = {6500,6500,6500,6500};               // Cycles before a 2nd hit is allowed
                                                          // Best value after lots of trial and error.
 
#define  midichannel 0;                              // MIDI channel from 0 to 15 (+1 in "real world")
 
 
//*******************************************************************************************************************
// Internal Use Variables
//
// You should tweak here if it's not optimal yet.
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// Those values work perfectly when using the small LDR and 1K Resistor. So used it!
//
//*******************************************************************************************************************
 
boolean activePad[6] = {0,0,0,0};                   // Array of flags of pad currently playing
int PinPlayTime[6] = {0,0,0,0};                     // Counter since pad started to play
 
int ActivePadMinTime = 100;
int PinPauseTimeDelay = 200;
int PinPauseTime[4] = {0,0,0,0};
int PinAvailable[4] = {1,1,1,1};
 
unsigned char status;
 
int pin = 0;     
int hitavg = 0;
int maxread = 0;
int debug = false;
int noteOffset = 0;
 
//*******************************************************************************************************************
// Setup
//*******************************************************************************************************************
 
void setup()
{
  Serial.begin(57600);                                  // connect to the serial port 57600
}
 
//*******************************************************************************************************************
// Main Program
//*******************************************************************************************************************
 
void loop()
{
  for(int pin=0; pin <= 3; pin++)
  {
      hitavg = analogRead(pin);    // read the input pin
 
      if(debug)
      Serial.println(hitavg);
 
      if(hitavg < CutOff)   {
        if(debug)Serial.println("hitavg < CutOff");
        if(activePad[pin] == false) {
             if(debug)     Serial.println("activePad[pin] == false");
          if(PinAvailable[pin] == true)
          {
           if(debug) Serial.println("PinAvailable[pin] == true");
            // Toca a nota full
            activePad[pin] = true;
            PinPauseTime[pin] = 0;
 
            MIDI_TX((0x90 | pin), PadNote[pin]+noteOffset, 127);
 
         if(debug)   Serial.println("NoteON");
          }
        }
      }
 
     if(activePad[pin] == true) {
       if(debug)Serial.println("activePad[pin] == true");
       PinPlayTime[pin] += 1;
 
       if(analogRead(pin) > CutOff && PinPlayTime[pin] > ActivePadMinTime)
       {       
               if(debug) Serial.println("analogRead(pin) > PadCut == TRUE");
         activePad[pin] = false;
         PinAvailable[pin] = 2;
         if(debug)
         Serial.println("NoteOFF, available is now false. active is false;");
 
 
         MIDI_TX((0x80 | pin), PadNote[pin]+noteOffset, 50);
         PinPlayTime[pin] = 0;
 
        }
     }
 
     if(PinAvailable[pin] == 2 && PinPauseTime[pin] > PinPauseTimeDelay) {
       if(debug)Serial.println("PinAvailable[pin] == false && PinPauseTime[pin] > 10");
      PinAvailable[pin] = true;
     } else if(PinAvailable[pin] == 2) {
       if(debug)Serial.println("PinPauseTime[pin] += 1;");
       PinPauseTime[pin] += 1;
     }
 
     if(debug)delay(1000);
   } 
}
 
 
//*******************************************************************************************************************
// Transmit MIDI Message
//*******************************************************************************************************************
void MIDI_TX(uint8_t MESSAGE, uint8_t PITCH, uint8_t VELOCITY)
{
  //status = MESSAGE + midichannel;
  //status = MESSAGE + pin;
  digitalWrite(13,HIGH);
  Serial.write(MESSAGE);
  Serial.write(PITCH);
  Serial.write(VELOCITY);
  delay(30);
  digitalWrite(13,LOW);
}/code]

And I've wired the breadboard  just like in this picture. -http://cdn.instructables.com/FBA/Y5SV/GJQEIOFT/FBAY5SVGJQEIOFT.MEDIUM.jpg
 
Download this and fallowed instructions.
http://www.spikenzielabs.com/SpikenzieLabs/Serial_MIDI.html

And thats it!
Logged

Manchester (England England)
Offline Offline
Brattain Member
*****
Karma: 634
Posts: 34518
Solder is electric glue
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
It says also that I need to share the 5v line for the other ldrs. Does that mean I put multiple jumpercables in the same input on arduino
Yes.
I am not sure what you mean by work in the dark.
If you want to reverse the sense in which the light triggers chang all the
Code:
  ....... = analogRead(
To
...... = 1023 - analogRead(
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Yes, I don't understand it either. The hole breadboard has to be covered or only "dimly lit" for the arduino to be triggered.
For example, I have to have my hand over the breadboard(to shield from light) then totally cover the ldr with me finger for it to trigger the midi.
Logged

Manchester (England England)
Offline Offline
Brattain Member
*****
Karma: 634
Posts: 34518
Solder is electric glue
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

It is all to do with this line:-
Code:
int CutOff = 40;   // This is the minimal amount of analog reading before triggering the note!
Try changing the values as a result of what you see being printed out from this line:-
Code:
Serial.println(hitavg);

Be sure to make this change as well in order for that to print out:-
Code:
int debug = true;
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Okay, so i don't know what happened but the ldr stopped working, the sound is still getting to te arduino but not the ldr.
I didn't even get a chance to try changing tose values or any of the code.
I will post back when the ldr starts working.
I am determined to get this thing working!
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ldr up and running again!
So I will try to get those values straight.
Any ideas how to add more ldrs?  ( only one is working so far and when i try adding more they don't work)
Logged

Sydney, Australia
Offline Offline
Edison Member
*
Karma: 33
Posts: 1283
Big things come in large packages
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Add more by doing the same thing on a different analog port.
Logged

Arduino libraries http://arduinocode.codeplex.com
Parola hardware & library http://parola.codeplex.com

Manchester (England England)
Offline Offline
Brattain Member
*****
Karma: 634
Posts: 34518
Solder is electric glue
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Adding more LDRs requires differant code. The way your code is at the moment is very inefficient , it is not simply a matter of copy and paste you need to use arrays to get it better.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Okay guys. Just for an update, the ldr is still working but only in dim settings (doesnt work at all in the morning). Which I'm cool with so long as I can get 5-6 ldrs working.
Had no luck figuring out how the arrays work or printing values.
Just wanna keep this thread going and see it through so any future  project doers can consider this a sure thing.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hello. I'm back. Been about 7 months since I tried to finish this project.
Still just have the one ldr working.
I'm thinking the remaining 4, 5 shouldn't be to hard. (stuck in the gamble again!) lol

So I'm looking to ad arrays to the code I've provided above, if anyone can help with that. (I geuss that will be a worthy project for anyone intrested afterwards).
Logged

Pages: 1 [2]   Go Up
Jump to: