Go Down

Topic: chip 74hc4051 (Read 1 time) previous topic - next topic

ZioZio

mi hai abbandonato ???

Brunello

Veramente avevo chiesto cosa volevi inviare sulla MIDI quando premevi un pulsante.
Es. Premi il pulsante 1, cosa invii quando deve essere On o Off ?
"C' è chi legge Guerra & Pace e non ci capisce un tubo vuoto; c'è chi legge l'etichetta delle patatine fritte e ci trova la spiegazione del mondo"

ZioZio

Premo il pulsante 1 volta e deve essere High,  lo ripremo lo stesso pulsante e deve essere Low.. ho sbagliato a capire? Sul programma dove andrò ad utilizzare questa "effettiera" schiacciando un determinato pulsante dovrà rimanere acceso il pulsante virtuale sul programma fino a quando non lo premo di nuovo e quindi si spegne.

Brunello

ok, e questo era chiaro.
Pero' io ho chiesto cosa deve inviare sul canale midi, a codesto programma che dovrai utilizzare, quando viene premuto un tasto ?
"C' è chi legge Guerra & Pace e non ci capisce un tubo vuoto; c'è chi legge l'etichetta delle patatine fritte e ci trova la spiegazione del mondo"

ZioZio

intendi una NOTA o un CC?
un canale 1 e un CC che va dal numero 40 in poi..
se non è questo non ho capito e sono una capra..

ZioZio

ok, e questo era chiaro.
Pero' io ho chiesto cosa deve inviare sul canale midi, a codesto programma che dovrai utilizzare, quando viene premuto un tasto ?
intendi una NOTA o un CC?
un canale 1 e un CC che va dal numero 40 in poi..
se non è questo non ho capito e sono una capra..
era questo che volevi sapere?

Brunello

e quindi una cosa del genere ?

Code: [Select]

for (a = 0; a <= 7; a++) {
    bit1 = bitRead(a, 0);
    bit2 = bitRead(a, 1);
    bit3 = bitRead(a, 2);
    digitalWrite(4, bit1);
    digitalWrite(5, bit2);
    digitalWrite(6, bit3);
    multiPul(a , 2);
    multiPul(a + 8, 3);
  }

void multiPul(int contatore, int digitalPin) {
  pulsante[contatore] = digitalRead(digitalPin);
  if (pulsante[contatore] != old_pulsante[contatore])
  {
    sendeMIDI(controlChange, (40 + contatore), pulsante[contatore]);
  }
  old_pulsante[contatore] = pulsante[contatore] ;
}
"C' è chi legge Guerra & Pace e non ci capisce un tubo vuoto; c'è chi legge l'etichetta delle patatine fritte e ci trova la spiegazione del mondo"

ZioZio

Code: [Select]

Arduino:1.6.11 (Mac OS X), Scheda:"Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

nuovo_multiplexer:113: error: expected unqualified-id before 'for'
  for (a = 0; a <= 7; a++) {
  ^
nuovo_multiplexer:113: error: 'a' does not name a type
  for (a = 0; a <= 7; a++) {
              ^
nuovo_multiplexer:113: error: 'a' does not name a type
  for (a = 0; a <= 7; a++) {
                      ^
/Users/djziozio/Documents/Arduino/nuovo_multiplexer/nuovo_multiplexer.ino: In function 'void multiPul(int, int)':
nuovo_multiplexer:126: error: 'old_pulsante' was not declared in this scope
   if (pulsante[contatore] != old_pulsante[contatore])
                              ^
nuovo_multiplexer:130: error: 'old_pulsante' was not declared in this scope
   old_pulsante[contatore] = pulsante[contatore] ;
   ^
exit status 1
expected unqualified-id before 'for'

Questo report potrebbe essere più ricco di informazioni con l'opzione
"Mostra un output dettagliato durante la compilazione"
abilitata in File -> Impostazioni


perchè mi da questi errori? me li dava anche quando avevo fatto il mio codice.. dove sta l'errore?

Brunello

ohi ohi.......
Guarda che il report ti dice dove e' l'errore

ok, posta lo sketch ultimo, cosi' aggiustiamo qualche assegnazione e probabilmente qualche parentesi
"C' è chi legge Guerra & Pace e non ci capisce un tubo vuoto; c'è chi legge l'etichetta delle patatine fritte e ci trova la spiegazione del mondo"

ZioZio

Code: [Select]

int controlChange = 176; // Control-Change MIDI canale 1

//multiplexer analogico (A0-A1)
int potenziometro[16];
int controller[16];
int controllerAlt[16];

int i = 0;

//potenziometro esterno (A2)
int controllerNumero = 36;
int controller2 = 0;
int controllerAlt2 = 0;
int poti = 0;


//pin digitali Multiplexer (5-6-7)
int bit1 = 0;
int bit2 = 0;
int bit3 = 0;


//multiplexer pulsanti (3-4)
int pulsante[16] = {0};
int old_pulsante[16] = {0};

int a = 0;

//encoder 1
int pinA1 = A7;
int pinB1 = A8;
int pulsante1 = 46;

//encoder 2
int pinA2 = A5;
int pinB2 = A6;
int pulsante2 = 44;

//encoder 3
int pinA3 = A3;
int pinB3 = A4;
int pulsante3 = 42;




void setup() {
 //Select-Pins 4051s potenziometri e pulsanti
 pinMode(4, OUTPUT);
 pinMode(5, OUTPUT);
 pinMode(6, OUTPUT);

//
 pinMode (pulsante, INPUT);
 
//Sensore prossimita
 pinMode(7, OUTPUT); //Trigger
 pinMode(8, INPUT); //Echo
 
 Serial.begin(9600);
}

void loop() {

//potenziometro esterno
 poti = analogRead(A2);
 controller2 = map(poti,0,1023,0,127);

 if (controller2 != controllerAlt2) {
  Serial.write(controlChange);
  Serial.write(controllerNumero);
  Serial.write(controller2);

  controllerAlt2 = controller2;
 
 }
 
  // multiplexer analogico A0 A1
  for (i = 0; i <= 7; i++) {
  bit1 = bitRead(i,0);
  bit2 = bitRead(i,1);
  bit3 = bitRead(i,2);

  digitalWrite(4, bit1);
  digitalWrite(5, bit2);
  digitalWrite(6, bit3);

  multiPot(i,A0);
  multiPot(i+8,A1);
 }
}

void multiPot(int contatore,int analogPin) {
  potenziometro[contatore] = 0.2 * potenziometro[contatore] + 0.8 * analogRead(analogPin);
  controller[contatore] = map (potenziometro[contatore],0,1023,0,127);
  if  (controller[contatore] != controllerAlt[contatore]); {
    sendeMIDI(controlChange, (20+contatore), controller[contatore]);
    controllerAlt[contatore] = controller[contatore];
  }
}

void sendeMIDI(int statusByte,int dataByte1, int dataByte2) {
  Serial.write(statusByte);
  Serial.write(dataByte1);
  Serial.write(dataByte2);

}

// multiplexer pulsanti

 for (a = 0; a <= 7; a++) {
    bit1 = bitRead(a, 0);
    bit2 = bitRead(a, 1);
    bit3 = bitRead(a, 2);
   
    digitalWrite(4, bit1);
    digitalWrite(5, bit2);
    digitalWrite(6, bit3);
   
    multiPul(a , 2);
    multiPul(a + 8, 3);
  }

void multiPul(int contatore, int digitalPin) {
  pulsante[contatore] = digitalRead(digitalPin);
   if (pulsante[contatore] != old_pulsante[contatore])
  {
    sendeMIDI(controlChange, (40 + contatore), pulsante[contatore]);
  }
  old_pulsante[contatore] = pulsante[contatore] ;
 
 }

Brunello

Code: [Select]


int controlChange = 176; // Control-Change MIDI canale 1

//multiplexer analogico (A0-A1)
int potenziometro[16];
int controller[16];
int controllerAlt[16];

int i = 0;

//potenziometro esterno (A2)
int controllerNumero = 36;
int controller2 = 0;
int controllerAlt2 = 0;
int poti = 0;


//pin digitali Multiplexer (5-6-7)
int bit1 = 0;
int bit2 = 0;
int bit3 = 0;


//multiplexer pulsanti (3-4)
int pulsante[16] = {0};
int old_pulsante[16] = {0};

int a = 0;

//encoder 1
int pinA1 = A7;
int pinB1 = A8;
int pulsante1 = 46;

//encoder 2
int pinA2 = A5;
int pinB2 = A6;
int pulsante2 = 44;

//encoder 3
int pinA3 = A3;
int pinB3 = A4;
int pulsante3 = 42;


void setup() {
  //Select-Pins 4051s potenziometri e pulsanti
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  //
  pinMode (pulsante, INPUT);
  //Sensore prossimita
  pinMode(7, OUTPUT); //Trigger
  pinMode(8, INPUT); //Echo
  Serial.begin(9600);
}

void loop() {
  //potenziometro esterno
  poti = analogRead(A2);
  controller2 = map(poti, 0, 1023, 0, 127);
  if (controller2 != controllerAlt2) {
    Serial.write(controlChange);
    Serial.write(controllerNumero);
    Serial.write(controller2);
    controllerAlt2 = controller2;
  }

  // multiplexer analogico A0 A1
  for (i = 0; i <= 7; i++) {
    bit1 = bitRead(i, 0);
    bit2 = bitRead(i, 1);
    bit3 = bitRead(i, 2);

    digitalWrite(4, bit1);
    digitalWrite(5, bit2);
    digitalWrite(6, bit3);

    multiPot(i, A0);
    multiPot(i + 8, A1);
  }
  Lett_puls();  // esegue la lettura dei pulsanti
} // Fine Loop

void multiPot(int contatore, int analogPin) {
  potenziometro[contatore] = 0.2 * potenziometro[contatore] + 0.8 * analogRead(analogPin);
  controller[contatore] = map (potenziometro[contatore], 0, 1023, 0, 127);
  if  (controller[contatore] != controllerAlt[contatore]); {
    sendeMIDI(controlChange, (20 + contatore), controller[contatore]);
    controllerAlt[contatore] = controller[contatore];
  }
}

void sendeMIDI(int statusByte, int dataByte1, int dataByte2) {
  Serial.write(statusByte);
  Serial.write(dataByte1);
  Serial.write(dataByte2);
}

// multiplexer pulsanti
void Lett_puls() {
  for (a = 0; a <= 7; a++) {
    bit1 = bitRead(a, 0);
    bit2 = bitRead(a, 1);
    bit3 = bitRead(a, 2);
    digitalWrite(4, bit1);
    digitalWrite(5, bit2);
    digitalWrite(6, bit3);
    multiPul(a , 2);
    multiPul(a + 8, 3);
  }
}

void multiPul(int contatore, int digitalPin) {
  pulsante[contatore] = digitalRead(digitalPin);
  if (pulsante[contatore] != old_pulsante[contatore])
  {
    sendeMIDI(controlChange, (40 + contatore), pulsante[contatore]);
  }
  old_pulsante[contatore] = pulsante[contatore] ;
}
"C' è chi legge Guerra & Pace e non ci capisce un tubo vuoto; c'è chi legge l'etichetta delle patatine fritte e ci trova la spiegazione del mondo"

ZioZio

il codice lo carica (grazie) ma non lo vede il midiserial e quindi il programma da usare..

Brunello

Non conosco la MIDI e tantomeno codesto programma

ma quando ti chiedevo cosa dovevi inviare era riferito a questo

Code: [Select]
sendeMIDI(controlChange, (40 + contatore), pulsante[contatore])

Il primo Byte e' fisso.... 176
il secondo byte è un numero da 40 in su'
Il terzo byte cosa deve essere ?
"C' è chi legge Guerra & Pace e non ci capisce un tubo vuoto; c'è chi legge l'etichetta delle patatine fritte e ci trova la spiegazione del mondo"

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy