Flûte MIDI

Parlez nous de vos projets et de vos idées, imaginez des applications

Flûte MIDI

Message non lude Wapata » Sam 25 Fév 2012 12:09

Pour mon premier projet concret Arduino, j'ai décidé de faire quelque chose électroniquement simple, mais mécaniquement magique:
Une flûte automatisée. Pouvant jouer des partitions MIDI.

Ou comment passer de ça:
Image

à ça:
Image

J'ai beaucoup avancé, j'ai aussi un petit peut reculé suite à la perte de mon script Arduino, mais pour le moment, avec le code en fin de post, j'arrive à ce résultat:


La partie que j'ai perdu, c'est qu'avec le "prototype du prototype" avec LEDS, tout ne s'enclenchait pas en même temps. Je crois que j'avais fait du ElseIf, mais je ne sais plus trop, il faut que je remette les mains dans le cambouis.

Le code me plait assez bien comme ça, niveau fonctionalités, il faut que je trouve comment empécher la polyphonie, car si deux notes différents se mettent sur ON, le passage de l'une d'elle sur OFF désactive les sorties communes. Il faut aussi que je réalise un MIDI TRHU. J'ai gardé quelques sorties PWM dans l'éventualité où j'arrive au stade "gestion de la vélocité".


Le code:
Code: Tout sélectionner
/*Midi to relay // Wapata 02.2012
 *Based on: Midi In Basic  0.2 // kuki 8.2007
 *
 * -----------------
 * listen for midi serial data, and active outputs for individual notes

 IMPORTANT:
 your arduino might not start if it receives data directly after a reset, because the bootloader thinks you want to uplad a new progam.
 you might need to unplug the midi-hardware RX pin until the board is running your program. that is when that statusLed turns on.

#####################################################################################################################################################
SOMETHING ABOUT MIDI MESSAGES
 midi messages start with one status byte followed by 1 _or_ 2 data bytes, depending on the command

 example midi message: 144-60-100
   the status byte "144" tells us what to do. "144" means "note on".
   in this case the second bytes tells us which note to play (60=middle C)
   the third byte is the velocity for that note (that is how powerful the note was struck= 100)
 
 example midi message: 128-36
   this message is a "note off" message (status byte = 128). it is followed by the note (data byte = 36)
   since "note off" messages don't need a velocity value (it's just OFF) there will be no third byte in this case
   NOTE: some midi keyboards will never send a "note off" message, but rather a "note on with zero velocity"
 
 do a web search for midi messages to learn more about aftertouch, poly-pressure, midi time code, midi clock and more interesting things.
 
 have to talk about how midi message realy is.
#####################################################################################################################################################

HARDWARE NOTE:
The Midi Socket is connected to arduino RX through an opto-isolator to invert the midi signal and seperate the circuits of individual instruments.
connect outputs to pin2-pin9 pinA0-pinA5 on your arduino.

####################################################################################################################################################


 */

//variables setup

byte incomingByte;
byte note;
byte velocity;


int statusLed = 13;   // select the pin for the LED

int action=2; //0 =note off ; 1=note on ; 2= nada


//setup: declaring iputs and outputs and begin serial
void setup() {
  pinMode(statusLed,OUTPUT);   // declare the LED's pin as output
  pinMode(2,OUTPUT); //R1
  pinMode(3,OUTPUT); //R2
  pinMode(4,OUTPUT); //R3
  pinMode(5,OUTPUT); //R4
  pinMode(6,OUTPUT); //R5
  pinMode(7,OUTPUT); //R6
  pinMode(8,OUTPUT); //R7
  pinMode(9,OUTPUT); //R8
  pinMode(A0,OUTPUT); //R9
  pinMode(A1,OUTPUT); //R10
  pinMode(A2,OUTPUT); //R11
  pinMode(A3,OUTPUT); //R12
  pinMode(A4,OUTPUT); //R13 air 1
  pinMode(A5,OUTPUT); //R14 air 2
 
  //start serial with midi baudrate 31250 or 38400 for debugging
  Serial.begin(31250);       
  digitalWrite(statusLed,HIGH); 
}

//loop: wait for serial data, and interpret the message
void loop () {
  if (Serial.available() > 0) {
    // read the incoming byte:
    incomingByte = Serial.read();

    // wait for as status-byte, channel 1, note on or off
    if (incomingByte== 144){ // note on message starting starting
      action=1;
    }else if (incomingByte== 128){ // note off message starting
      action=0;
    }else if (incomingByte== 208){ // aftertouch message starting
       //not implemented yet
    }else if (incomingByte== 160){ // polypressure message starting
       //not implemented yet
    }else if ( (action==0)&&(note==0) ){ // if we received a "note off", we wait for which note (databyte)
      note=incomingByte;
      playNote(note, 0);
      note=0;
      velocity=0;
      action=2;
    }else if ( (action==1)&&(note==0) ){ // if we received a "note on", we wait for the note (databyte)
      note=incomingByte;
    }else if ( (action==1)&&(note!=0) ){ // ...and then the velocity
      velocity=incomingByte;
      playNote(note, velocity);
      note=0;
      velocity=0;
      action=0;
    }else{
      //nada
    }
  }
}

void blink(){
  digitalWrite(statusLed, HIGH);
  delay(100);
  digitalWrite(statusLed, LOW);
  delay(100);
}


void playNote(byte note, byte velocity){
  int value=LOW;
  if (velocity >10){
      value=HIGH;
  }else{
   value=LOW;
  }

if(note= 72){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  //digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  digitalWrite(7, value);
  digitalWrite(8, value);
  digitalWrite(9, value);
  digitalWrite(A1, value);
  digitalWrite(A0, value);
  digitalWrite(A3, value);
  digitalWrite(A2, value);
}

if(note= 73){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  //digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  digitalWrite(7, value);
  digitalWrite(8, value);
  digitalWrite(9, value);
  digitalWrite(A1, value);
  digitalWrite(A0, value);
  digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note= 74){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  //digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  digitalWrite(7, value);
  digitalWrite(8, value);
  digitalWrite(9, value);
  digitalWrite(A1, value);
  digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note= 75){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  //digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  digitalWrite(7, value);
  digitalWrite(8, value);
  digitalWrite(9, value);
  digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note= 76){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  //digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  digitalWrite(7, value);
  digitalWrite(8, value);
  digitalWrite(9, value);
  //digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note= 77){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  //digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  digitalWrite(7, value);
  digitalWrite(8, value);
  //digitalWrite(9, value);
  //digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note= 78){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  //digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  digitalWrite(7, value);
  //digitalWrite(8, value);
  digitalWrite(9, value);
  digitalWrite(A1, value);
  digitalWrite(A0, value);
  digitalWrite(A3, value); //OPTION
  digitalWrite(A2, value); //OPTION
}

if(note= 79){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  //digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  digitalWrite(7, value);
  //digitalWrite(8, value);
  //digitalWrite(9, value);
  //digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note= 80){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  //digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  //digitalWrite(7, value);
  digitalWrite(8, value);
  digitalWrite(9, value);
  digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note= 81){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  //digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  //digitalWrite(7, value);
  //digitalWrite(8, value);
  //digitalWrite(9, value);
  //digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note= 82){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  //digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  //digitalWrite(5, value);
  //digitalWrite(6, value);
  digitalWrite(7, value);
  digitalWrite(8, value);
  //digitalWrite(9, value);
  //digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note= 83){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  //digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  //digitalWrite(5, value);
  //digitalWrite(6, value);
  //digitalWrite(7, value);
  //digitalWrite(8, value);
  //digitalWrite(9, value);
  //digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note= 84){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  //digitalWrite(2, value);
  //digitalWrite(3, value);
  //digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  //digitalWrite(7, value);
  //digitalWrite(8, value);
  //digitalWrite(9, value);
  //digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note= 85){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  digitalWrite(2, value);
  digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  //digitalWrite(7, value);
  //digitalWrite(8, value);
  //digitalWrite(9, value);
  //digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note= 86){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  digitalWrite(2, value);
  digitalWrite(3, value);
  //digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  //digitalWrite(7, value);
  //digitalWrite(8, value);
  //digitalWrite(9, value);
  //digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note= 87){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  digitalWrite(2, value);
  digitalWrite(3, value);
  //digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  digitalWrite(7, value);
  digitalWrite(8, value);
  digitalWrite(9, value);
  digitalWrite(A1, value);
  digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note= 88){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  digitalWrite(7, value);
  digitalWrite(8, value);
  digitalWrite(9, value);
  //digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note= 89){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  digitalWrite(7, value);
  digitalWrite(8, value);
  //digitalWrite(9, value);
  //digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note= 90){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  digitalWrite(7, value);
  //digitalWrite(8, value);
  digitalWrite(9, value);
  //digitalWrite(A1, value);
  //digitalWrite(A0, value);
  digitalWrite(A3, value);
  digitalWrite(A2, value);
}

if(note= 91){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  digitalWrite(7, value);
  //digitalWrite(8, value);
  //digitalWrite(9, value);
  //digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note= 92){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  digitalWrite(7, value);
  //digitalWrite(8, value);
  digitalWrite(9, value);
  digitalWrite(A1, value);
  digitalWrite(A0, value);
  digitalWrite(A3, value);
  digitalWrite(A2, value);
}

if(note= 93){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  //digitalWrite(7, value);
  //digitalWrite(8, value);
  //digitalWrite(9, value);
  //digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note= 94){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  //digitalWrite(7, value);
  digitalWrite(8, value);
  digitalWrite(9, value);
  digitalWrite(A1, value);
  digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note= 95){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  //digitalWrite(7, value);
  digitalWrite(8, value);
  digitalWrite(9, value);
  //digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note= 96){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  //digitalWrite(5, value);
  //digitalWrite(6, value);
  //digitalWrite(7, value);
  digitalWrite(8, value);
  digitalWrite(9, value);
  //digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note= 97){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  //digitalWrite(5, value);
  digitalWrite(6, value);
  digitalWrite(7, value);
  digitalWrite(8, value);
  //digitalWrite(9, value);
  digitalWrite(A1, value);
  digitalWrite(A0, value);
  digitalWrite(A3, value);
  digitalWrite(A2, value);
}

if(note= 98){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  //digitalWrite(5, value);
  //digitalWrite(6, value);
  digitalWrite(7, value);
  digitalWrite(8, value);
  //digitalWrite(9, value);
  digitalWrite(A1, value);
  digitalWrite(A0, value);
  digitalWrite(A3, value);
  //digitalWrite(A2, value);
}


 /*since we don't want to "play" all notes we wait for a note between 36 & 44
 if(note>=36 && note<44){
   byte myPin=note-34; // to get a pinnumber between 2 and 9
   digitalWrite(myPin, value);*/
 }
Avatar de l’utilisateur
Wapata
 
Messages: 6
Inscription: Sam 25 Fév 2012 11:53

Re: Flûte MIDI

Message non lude Wapata » Sam 25 Fév 2012 18:36

J'ai trouvé le problème que j'avais sur mon code, j'avais mis des = à la place des ==. Et ça marche carrément moins bien.
Mes bobines sont des 8ohms et fonctionnement en 12 volts. Ce qui leur donne une conso de 0.150A si mes calculs sont justes.
J'utilise une alimentation AT pour mon montage, et bien qu'elle dit pouvoir offrir 8A sur la ligne 12V, le ventilateur se stop à chaque activation de relais. Je n'avais jamais eu un comportement comme celui ci auparavant... Il va falloir que je surveille ça.

En attendant les réglage mécaniques et l'arrivée d'air, voici le fonctionnement:


Code: Tout sélectionner
/*Midi to relay // Wapata 02.2012
 *Based on: Midi In Basic  0.2 // kuki 8.2007
 *
 * -----------------
 * listen for midi serial data, and active outputs for individual notes

 IMPORTANT:
 your arduino might not start if it receives data directly after a reset, because the bootloader thinks you want to uplad a new progam.
 you might need to unplug the midi-hardware RX pin until the board is running your program. that is when that statusLed turns on.

#####################################################################################################################################################
SOMETHING ABOUT MIDI MESSAGES
 midi messages start with one status byte followed by 1 _or_ 2 data bytes, depending on the command

 example midi message: 144-60-100
   the status byte "144" tells us what to do. "144" means "note on".
   in this case the second bytes tells us which note to play (60=middle C)
   the third byte is the velocity for that note (that is how powerful the note was struck= 100)
 
 example midi message: 128-36
   this message is a "note off" message (status byte = 128). it is followed by the note (data byte = 36)
   since "note off" messages don't need a velocity value (it's just OFF) there will be no third byte in this case
   NOTE: some midi keyboards will never send a "note off" message, but rather a "note on with zero velocity"
 
 do a web search for midi messages to learn more about aftertouch, poly-pressure, midi time code, midi clock and more interesting things.
 
 have to talk about how midi message realy is.
#####################################################################################################################################################

HARDWARE NOTE:
The Midi Socket is connected to arduino RX through an opto-isolator to invert the midi signal and seperate the circuits of individual instruments.
connect outputs to pin2-pin9 pinA0-pinA5 on your arduino.

####################################################################################################################################################


 */

//variables setup

byte incomingByte;
byte note;
byte velocity;


int statusLed = 13;   // select the pin for the LED

int action=2; //0 =note off ; 1=note on ; 2= nada


//setup: declaring iputs and outputs and begin serial
void setup() {
  pinMode(statusLed,OUTPUT);   // declare the LED's pin as output
  pinMode(2,OUTPUT); //R1
  pinMode(3,OUTPUT); //R2
  pinMode(4,OUTPUT); //R3
  pinMode(5,OUTPUT); //R4
  pinMode(6,OUTPUT); //R5
  pinMode(7,OUTPUT); //R6
  pinMode(8,OUTPUT); //R7
  pinMode(9,OUTPUT); //R8
  pinMode(A0,OUTPUT); //R9
  pinMode(A1,OUTPUT); //R10
  pinMode(A2,OUTPUT); //R11
  pinMode(A3,OUTPUT); //R12
  pinMode(A4,OUTPUT); //R13 air 1
  pinMode(A5,OUTPUT); //R14 air 2
 
  //start serial with midi baudrate 31250 or 38400 for debugging
  Serial.begin(31250);       
  digitalWrite(statusLed,HIGH); 
}

//loop: wait for serial data, and interpret the message
void loop () {
  if (Serial.available() > 0) {
    // read the incoming byte:
    incomingByte = Serial.read();

    // wait for as status-byte, channel 1, note on or off
    if (incomingByte== 144){ // note on message starting starting
      action=1;
    }else if (incomingByte== 128){ // note off message starting
      action=0;
    }else if (incomingByte== 208){ // aftertouch message starting
       //not implemented yet
    }else if (incomingByte== 160){ // polypressure message starting
       //not implemented yet
    }else if ( (action==0)&&(note==0) ){ // if we received a "note off", we wait for which note (databyte)
      note=incomingByte;
      playNote(note, 0);
      note=0;
      velocity=0;
      action=2;
    }else if ( (action==1)&&(note==0) ){ // if we received a "note on", we wait for the note (databyte)
      note=incomingByte;
    }else if ( (action==1)&&(note!=0) ){ // ...and then the velocity
      velocity=incomingByte;
      playNote(note, velocity);
      note=0;
      velocity=0;
      action=0;
    }else{
      //nada
    }
  }
}

void blink(){
  digitalWrite(statusLed, HIGH);
  delay(100);
  digitalWrite(statusLed, LOW);
  delay(100);
}


void playNote(byte note, byte velocity){
  int value=LOW;
  if (velocity >10){
      value=HIGH;
  }else{
   value=LOW;
  }

if(note== 72){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  //digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  digitalWrite(7, value);
  digitalWrite(8, value);
  digitalWrite(9, value);
  digitalWrite(A1, value);
  digitalWrite(A0, value);
  digitalWrite(A3, value);
  digitalWrite(A2, value);
}

if(note== 73){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  //digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  digitalWrite(7, value);
  digitalWrite(8, value);
  digitalWrite(9, value);
  digitalWrite(A1, value);
  digitalWrite(A0, value);
  digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note== 74){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  //digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  digitalWrite(7, value);
  digitalWrite(8, value);
  digitalWrite(9, value);
  digitalWrite(A1, value);
  digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note== 75){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  //digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  digitalWrite(7, value);
  digitalWrite(8, value);
  digitalWrite(9, value);
  digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note== 76){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  //digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  digitalWrite(7, value);
  digitalWrite(8, value);
  digitalWrite(9, value);
  //digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note== 77){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  //digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  digitalWrite(7, value);
  digitalWrite(8, value);
  //digitalWrite(9, value);
  //digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note== 78){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  //digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  digitalWrite(7, value);
  //digitalWrite(8, value);
  digitalWrite(9, value);
  digitalWrite(A1, value);
  digitalWrite(A0, value);
  digitalWrite(A3, value); //OPTION
  digitalWrite(A2, value); //OPTION
}

if(note== 79){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  //digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  digitalWrite(7, value);
  //digitalWrite(8, value);
  //digitalWrite(9, value);
  //digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note== 80){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  //digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  //digitalWrite(7, value);
  digitalWrite(8, value);
  digitalWrite(9, value);
  digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note== 81){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  //digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  //digitalWrite(7, value);
  //digitalWrite(8, value);
  //digitalWrite(9, value);
  //digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note== 82){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  //digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  //digitalWrite(5, value);
  //digitalWrite(6, value);
  digitalWrite(7, value);
  digitalWrite(8, value);
  //digitalWrite(9, value);
  //digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note== 83){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  //digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  //digitalWrite(5, value);
  //digitalWrite(6, value);
  //digitalWrite(7, value);
  //digitalWrite(8, value);
  //digitalWrite(9, value);
  //digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note== 84){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  //digitalWrite(2, value);
  //digitalWrite(3, value);
  //digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  //digitalWrite(7, value);
  //digitalWrite(8, value);
  //digitalWrite(9, value);
  //digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note== 85){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  digitalWrite(2, value);
  digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  //digitalWrite(7, value);
  //digitalWrite(8, value);
  //digitalWrite(9, value);
  //digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note== 86){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  digitalWrite(2, value);
  digitalWrite(3, value);
  //digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  //digitalWrite(7, value);
  //digitalWrite(8, value);
  //digitalWrite(9, value);
  //digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note== 87){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  digitalWrite(2, value);
  digitalWrite(3, value);
  //digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  digitalWrite(7, value);
  digitalWrite(8, value);
  digitalWrite(9, value);
  digitalWrite(A1, value);
  digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note== 88){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  digitalWrite(7, value);
  digitalWrite(8, value);
  digitalWrite(9, value);
  //digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note== 89){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  digitalWrite(7, value);
  digitalWrite(8, value);
  //digitalWrite(9, value);
  //digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note== 90){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  digitalWrite(7, value);
  //digitalWrite(8, value);
  digitalWrite(9, value);
  //digitalWrite(A1, value);
  //digitalWrite(A0, value);
  digitalWrite(A3, value);
  digitalWrite(A2, value);
}

if(note== 91){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  digitalWrite(7, value);
  //digitalWrite(8, value);
  //digitalWrite(9, value);
  //digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note== 92){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  digitalWrite(7, value);
  //digitalWrite(8, value);
  digitalWrite(9, value);
  digitalWrite(A1, value);
  digitalWrite(A0, value);
  digitalWrite(A3, value);
  digitalWrite(A2, value);
}

if(note== 93){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  //digitalWrite(7, value);
  //digitalWrite(8, value);
  //digitalWrite(9, value);
  //digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note== 94){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  //digitalWrite(7, value);
  digitalWrite(8, value);
  digitalWrite(9, value);
  digitalWrite(A1, value);
  digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note== 95){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  digitalWrite(5, value);
  digitalWrite(6, value);
  //digitalWrite(7, value);
  digitalWrite(8, value);
  digitalWrite(9, value);
  //digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note== 96){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  //digitalWrite(5, value);
  //digitalWrite(6, value);
  //digitalWrite(7, value);
  digitalWrite(8, value);
  digitalWrite(9, value);
  //digitalWrite(A1, value);
  //digitalWrite(A0, value);
  //digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

if(note== 97){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  //digitalWrite(5, value);
  digitalWrite(6, value);
  digitalWrite(7, value);
  digitalWrite(8, value);
  //digitalWrite(9, value);
  digitalWrite(A1, value);
  digitalWrite(A0, value);
  digitalWrite(A3, value);
  digitalWrite(A2, value);
}

if(note== 98){
  digitalWrite(A4, value);
  digitalWrite(A5, value);
  digitalWrite(2, value);
  //digitalWrite(3, value);
  digitalWrite(4, value);
  //digitalWrite(5, value);
  //digitalWrite(6, value);
  digitalWrite(7, value);
  digitalWrite(8, value);
  //digitalWrite(9, value);
  digitalWrite(A1, value);
  digitalWrite(A0, value);
  digitalWrite(A3, value);
  //digitalWrite(A2, value);
}

}
Avatar de l’utilisateur
Wapata
 
Messages: 6
Inscription: Sam 25 Fév 2012 11:53

Re: Flûte MIDI

Message non lude Wapata » Dim 26 Fév 2012 10:57

J'ai oublié le montage électronique, voici donc mes schémas:

Image
Avatar de l’utilisateur
Wapata
 
Messages: 6
Inscription: Sam 25 Fév 2012 11:53

Re: Flûte MIDI

Message non lude Lionel » Mar 28 Fév 2012 18:33

Excellent Pierre !!
Merci et bravo pour ta contribution, j'ai hâte de voir la suite :)
Image - Distributeur officiel Arduino - Conception de shields
Avatar de l’utilisateur
Lionel
 
Messages: 734
Inscription: Mar 21 Déc 2010 09:52
Localisation: Toulouse

Re: Flûte MIDI

Message non lude jaunedeau » Sam 20 Oct 2012 15:14

Bonjour,

As-tu deja trouvé la solution technique pour l'arrivée d'air ? Si oui, je veux bien connaitre ta solution. Si non, jette un oeil a cette video : http://www.dailymotion.com/video/x22ndt_une-vmt_music . La réalisation est étonnament simple (vraiment aussi simple que ce que l'on voit sur la video, il n'y a pas de gros travail de mise au point pour que celà fonctionne).

Tu es sur toulouse ?

Felicitation pour le projet,
jaune.
jaunedeau
 
Messages: 2
Inscription: Sam 20 Oct 2012 15:08

Re: Flûte MIDI

Message non lude Wapata » Dim 28 Oct 2012 17:44

Avec un peut de retard, la réponse:
Pour l'entrée d'air, je ne travaille pas en dépression comme sur un orgue. Donc, je vais tout simplement me servir d'un compresseur.
Avec soit une valve tout ou rien avec un régulateur de débit à la sortie du compresseur, soit avec une valve sur servo moteur, pour faire varier la force de souffle celon le signal de vélocité et d'after-touch MIDI.

J'ai quitté Toulouse il y a trois semaines, et je me remet sur ce projet. Il me reste à piquer un compresseur au voisin, faire l'adaptateur tuyau/flute provisoire, refaire le système de bouchage des trous, tester et revoir la commande d'air.

Et si ma flûte est plus audible que les relais, ce sera bon, si elle l'est moins... il faudra faire autre chose.
Avatar de l’utilisateur
Wapata
 
Messages: 6
Inscription: Sam 25 Fév 2012 11:53

Re: Flûte MIDI

Message non lude bjonnh » Sam 3 Nov 2012 01:57

Tu devrais peut-être ajouter une résistance en série avec ta diode de roue-libre, une bobine dont l'alimentation est coupée produit une grosse surtension, ça t'évitera de mauvaises surprises. Surtout que tu les commandes assez rapidement dans ton projet.
bjonnh
 
Messages: 6
Inscription: Sam 3 Nov 2012 01:45
Localisation: Bordeaux

Re: Flûte MIDI

Message non lude Wapata » Sam 3 Nov 2012 10:01

Mes bobines sont des 8ohms et fonctionnement en 12 volts. Ce qui leur donne une conso de 0.150A si mes calculs sont justes.
Donc, on peut estimer qu'à l'allumage il y a une conso de 7x0.150 = 1.05A et... la même chose à la coupure ? :shock:
Que devrais-je mettre ?

PS: on vois la position des diodes de roues libres sur le dernier screenshoot de Youtube (et sur le schéma) et je dois avouer que cela ne m'enchante pas de retourner mettre des coups de fer dans ces endroits exigus. :?
Avatar de l’utilisateur
Wapata
 
Messages: 6
Inscription: Sam 25 Fév 2012 11:53

Re: Flûte MIDI

Message non lude bjonnh » Dim 4 Nov 2012 11:06

Il me semble, mais c'est à vérifier, que tu n'a pas de surintensité avec des électroaimants en continu. Par contre c'est certain que tu as des surtensions en sortie. Tu peux peut essayer de mettre un gros condensateur de filtrage en sortie de ton alim, ça peut aider. prends un truc du type 4700 μF en 12 V (pour ma part je mets toujours plus que la valeur de tension nominale).
bjonnh
 
Messages: 6
Inscription: Sam 3 Nov 2012 01:45
Localisation: Bordeaux

Re: Flûte MIDI

Message non lude 407zorglub » Jeu 24 Nov 2016 15:49

Bravo pour ce programme! il ça marche super, je me suis permis de l'adapter, en rajoutant la Library #Servo.
https://www.youtube.com/watch?v=OSud_ftKwJE
https://www.youtube.com/watch?v=bVYyJlxziW0
Mais un truc que je ne comprends pas dans le code, la fonction "playNote" n'est pas déclarée au début, comment ça marche?
Et sinon, je cherche à rajouter des fonctions comme aftertouch et pitchbend pour faire des trémolos en jouant sur la variation de pression d'air, comment vous en êtes vous sorti de votre coté?
407zorglub
 
Messages: 1
Inscription: Jeu 24 Nov 2016 14:41


Retourner vers Vos projets, vos idées

Qui est en ligne

Utilisateurs parcourant ce forum: Google [Bot] et 1 invité

cron