ricomincio da capo

Ciao a tutti,
sono nuovo di arduino e... dopo il successo del led che si accende e si spegne
(dalla felicità qui a casa siamo ancora a tavola festeggiando l'avvenimento
con soppressata e vino in stile "Sagra del Led", ah ah ah),
dopo 8 settimane nell'intento di realizzare un nuovo codice, è giunta haimè tanta delusione...
anche la lavatrice dalla tristezza ha smesso di funzionare e se continuo a creare errori nel listato,
mi sà che anche i rubinetti del bagno fanno sciopero...

cosichè, sono qui stasera a chiedere il vostro voto (?!?)
ehmmm, volevo dire il vostro aiuto per un piccolo progetto di controller midi con arduino..

  • e vabbè però se fate queste facce - è il mio primo post, un pò di entusiasmo ragà!!
    in sostanza vorrei codificare i valori di un touch screen in valori midi da inviare ad un dispositivo...
    dispositivo midi, bravi... vedo che siete attenti..

la funzione midi.sendControlChange proprio non vuole capire quello che voglio fargli fare
e tra l'altro non sò neanche io cosa gli chiesto di fare?!?

il mio codice è questo:

// touch screen 


int y1 = A0;
int x2 = A1;
int y2 = A2;
int x1 = A3;

void setup() { 
  Serial.begin(9600);
} 

int readX(){
  pinMode(y1, INPUT);
  pinMode(x2, OUTPUT);
  pinMode(y2, INPUT);
  pinMode(x1, OUTPUT);

  digitalWrite(x2, LOW);
  digitalWrite(x1, HIGH);

  delay(5); //pause to allow lines to power up

  return analogRead(y1);
}

int readY(){

  pinMode(y1, OUTPUT);
  pinMode(x2, INPUT);
  pinMode(y2, OUTPUT);
  pinMode(x1, INPUT);

  digitalWrite(y1, LOW);
  digitalWrite(y2, HIGH);

  delay(5); //pause to allow lines to power up

  return analogRead(x2);
}

void loop()
{
  int x = readX();
  int y = readY();


  if(x < 1000 & y < 1000){
    Serial.print("x: ");
    Serial.print(x-100);
    Serial.print(" - y: ");
    Serial.println(y- 130);  
  }

  delay(100); //just to slow this down so it is earier to read in the terminal - Remove if wanted

}

vi chiedo la cortesia di aiutarmi a capire dove sbaglio..
ringrazio anticipatamente per l'aiuto.

molok:
la funzione midi.sendControlChange proprio non vuole capire quello che voglio fargli fare
e tra l'altro non sò neanche io cosa gli chiesto di fare?!?

Partiamo da una cosa semplice: tu cosa vuoi che faccia?

CoreZilla:
Partiamo da una cosa semplice: tu cosa vuoi che faccia?

ciao CoreZilla,
grazie mille per aver risposto..
in sostanza vorrei pilotare dal touch screen remoto il touch screen del korg kaoss pad via cavo midi..
secondo te la funzione midi.sencControlChange impostata è corretta?

Da quello che ho visto il Korg Kaoss ha un MIDI OUT e nessuni MIDI IN .....

scusami in effetti dovevo essere più specifico,
mi riferivo a questi due prododdi in particolare:

hanno sia la connessione MIDI IN che in MIDI OUT..

quindi per quello che voglio fare io è: MIDI OUT da arduino a MIDI IN del korg kaoss pad 2 o 3..

molok:
scusami in effetti dovevo essere più specifico,
mi riferivo a questi due prododdi in particolare:

http://post.thestranger.com/images/blogimages/2008/12/11/1229021318_small_korg-koass-pad-2.jpg
Pictures and images Korg Kaoss Pad 3 KP3 - Audiofanzine

hanno sia la connessione MIDI IN che in MIDI OUT..

Ho dato un'occhiata al manualozzo di KAOSS PAD KP3+ (http://www.korg.com/us/support/download/manual/0/124/2115/) .... meglio che te lo leggi bene prima di pensare di fare qulcosa

quindi per quello che voglio fare io è: MIDI OUT da arduino a MIDI IN del korg kaoss pad 2 o 3..

Se arduino deve mandare dei comandi a korg direi di sì

si in effetti ho prelevato i dati proprio dal manuale:

(0xB0,92,127) note on
(0xB0,0,0); note off

soltanto che nel listato la funzione:

MIDI.sendControlChange(0xB0,92,127);

mi dà errore nell'IDE..

come posso risolvere secondo te?

L'istruzione MIDI.sendControlChange(note, velocity, channel) richiede questi parametri.

Sei sicuro che i valori corrispondano?

cyberhs:
L'istruzione MIDI.sendControlChange(note, velocity, channel) richiede questi parametri.

Sei sicuro che i valori corrispondano?

ciao cyberhs,
grazie anche a te per la partecipazione al mio post...

in effetti la funzione midi send che rappresenti è giusta,
ma io pensavo di inviare valori del touch screen ed è per questo che ho inserito quella funzione..

boh! sono un pò confuso, forse sto sbagliando tutta la logica..

molok:
boh! sono un pò confuso, forse sto sbagliando tutta la logica..

Quel programma in effetti è totalmente illogico :slight_smile:

paulus1969:
Quel programma in effetti è totalmente illogico :slight_smile:

quindi, ricomincio da capo 2?
ah ah ah...

a prescindere che rifaccio tutto, promesso..
ma ho sempre il dubbio sula struttura di midi send da utilizzare..
su internet ne ho trovate tantissime e sul playground di arduino ho trovato la seguente:

MIDI.send(type, data1, data2, channel)

dove nel mio caso il valore type si identificherebbe in CC, quindi controll change...

cercate di avere pazienza, sono nuovo del concetto e struttura funzioni di arduino,
io ero abituato a far accendere e spegnere il led, adesso non lo posso più fare perchè
s'è bruciato il led e devo trovare un'alternativa.. ah ah ah ah..

in effetti grazie alla segnalazione di paulus1969 è meglio partire per gradi,
curando punto per punto le periferiche..
pertanto, nel code del mio primo post ho modificato il codice inserendo
solo le funzioni di controllo per il touch screen..

partendo dal touch screen, secondo voi è corretta l'impostazione del listato?

Se ci fai vedere come lo hai modificato, ti possiamo dire qualcosa.

Però è meglio agire diversamente.

PRIMA cerca di capire se questi comandi MIDI sono corretti. Quindi fai qualcosa che invia soltanto i comando MIDI per vedere cosa accade.

Invia comando 1 - delay 1 secondo - invia comando 2 - delay ....

Fatto questo, si potrà passare al resto.

Così potrai capire dove sono gli errori ad ogni cosa che aggiungi.

ciao paulus1969,
ok, ti posto il firmware per il touch screen:

int y1 = A0;
int x2 = A1;
int y2 = A2;
int x1 = A3;

void setup() {
  Serial.begin(9600);
}

int readX(){
  pinMode(y1, INPUT);
  pinMode(x2, OUTPUT);
  pinMode(y2, INPUT);
  pinMode(x1, OUTPUT);

  digitalWrite(x2, LOW);
  digitalWrite(x1, HIGH);

  delay(5); //pause to allow lines to power up

  return analogRead(y1);
}

int readY(){

  pinMode(y1, OUTPUT);
  pinMode(x2, INPUT);
  pinMode(y2, OUTPUT);
  pinMode(x1, INPUT);

  digitalWrite(y1, LOW);
  digitalWrite(y2, HIGH);

  delay(5); //pause to allow lines to power up

  return analogRead(x2);
}

void loop()
{
  int x = readX();
  int y = readY();


  if(x < 1000 & y < 1000){
    Serial.print("x: ");
    Serial.print(x-100);
    Serial.print(" - y: ");
    Serial.println(y- 130); 
  }

  delay(100); //just to slow this down so it is earier to read in the terminal - Remove if wanted

}

questo funziona, solo che ogni tanto invia valori al serial monitor anche se non tocco il touch screen.
comunque, credo di aver risolto eliminando i ritardi..

da qui poi credo di dover fare ad esempio:

void midisendCC(char command, char value1, char value2) {
  Serial.write(command);
  Serial.write(value1);
  Serial.write(value2);

per poter impostare nel loop ad esempio:

if ((x > 0) & (y > 0)) { 
midisendCC (0XB0, 92, 127);  //midi on
}
else ((x = 0) & (y = 0)) {
midisendCC (0XB0, 0, 0);  //midi off
}

ho fatto questo ma non funziona...

Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare.
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.

OCCHIO: se qui intendi usare AND

if ((x > 0) & (y > 0)) {

hai commesso un errore, DEVI usare && &&=> AND logico & => AND sui bit

grazie nid69ita, ho corretto subito..
ma ho dovuto inserire manualmente i tag "code" perchè quando
quoto una risposta non mi appare la legenda in alto dei tag..
boh! forse devo aggiornare il browser?

if ((x > 0) & (y > 0)) {

hai commesso un errore, DEVI usare && &&=> AND logico & => AND sui bit
[/quote]

ho seguito il tuo suggerimento (&&=> AND logico) ma ancora non invio nulla.

Il code è il primo, indicato con </>, prima di B I U ...

Secondo me devi provare per prima cosa ad inviare i semplici comandi MIDI intervallati da un delay, solo questo, per vedere se funziona e se stai mandando i giusti comandi al MIDI.
Tutto il resto lascialo perdere, if, and, ...

Scrivi una cosa SEMPLICISSIMA che faccia SOLO QUESTO

comando
passa 1 secondo
altro comando
passa 1 secondo
altro comando