Ciao a tutti, sto creando un controller midi con due fotoresistenze, il problema è che ne funziona solo una e non riesco a capire dove sbaglio.
ecco il codice:
byte noteON = 144;//note on command
byte noteON2 = 100;//
int analogPin = A0;
int analogPin2 = A2;
void setup() {
Serial.begin(9600);
}
void loop() {
int analogVal = analogRead(analogPin);//read data
//we have to scale the lsr data to fit between 0 and 127 (this is the range of MIDI notes)
byte note = map(analogVal, 0, 900, 0, 127);//use the 0-900 range I measured
MIDImessage(noteON, note, 100);//turn note on
delay(300);//hold note for 300ms
MIDImessage(noteON, note, 0);//turn note off (note on with velocity 0)
delay(200);//wait 200ms until triggering next note
int analogVal2 = analogRead(analogPin2);
byte note2 = map(analogVal2, 0, 900, 0, 127);
MIDImessage(noteON2, note2, 100);
delay(300);
MIDImessage(noteON2, note2, 0);//turn note off (note on with velocity 0)
delay(200);
}
//send MIDI message
void MIDImessage(byte command, byte data1, byte data2) {
Serial.write(command);
Serial.write(data1);
Serial.write(data2);
}
Nella foto in allegato si vede il mio progetto e funziona solo la resistenza a sinistra quella con il collegamento analogico 0
Guardati bene il circuito sulla breadbord.
Il sensore alla sinistra lo hai collegato tra +5V e massa (cerchio blu) mentre quello alla destra (cerchiato di rosso) l' hai collegato 2 volte alla massa.
Grazie mille, proprio un errore da pivello. ora funziona ma se lo collego a garageband ad esempio mi fa solo note acute sia in un sensore che nell'altro e non riesco a capire perché.
Grazie mille.
bocinci:
Grazie mille, proprio un errore da pivello. ora funziona ma se lo collego a garageband ad esempio mi fa solo note acute sia in un sensore che nell'altro e non riesco a capire perché.
Grazie mille.
Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento
Ho un'altro problema, ho aggiunto un potenziometro che suona anche lui, il problema è che se il codice lo uso solo esclusivamente per il potenziometro funziona, se invece metto tutto insieme funzionano solo i sensori e non quello. Volevo sapere se sapete dirmi il motivo e soprattutto se è possibile fare in modo che ogni sensore sia uno strumento diverso su Logic.
Grazie mille spero possiate aiutarmi perché è un progetto molto importante.
Scusatemi se sbaglio a fare qualcosa nel forum.
byte noteON = 144;//note on command
byte noteON2 = 144;//
int analogPin = A0;
int analogPin2 = A2;
byte noteON3 = 144;//note on command
int potPin = A1;
void setup() {
Serial.begin(9600);
}
void loop() {
int analogVal = analogRead(analogPin);//read data
//we have to scale the lsr data to fit between 0 and 127 (this is the range of MIDI notes)
byte note = map(analogVal, 0, 700, 0, 127);//use the 0-900 range I measured
MIDImessage(noteON, note, 100);//turn note on
delay(300);//hold note for 300ms
MIDImessage(noteON, note, 0);//turn note off (note on with velocity 0)
delay(200);//wait 200ms until triggering next note
int analogVal2 = analogRead(analogPin2);
byte note2 = map(analogVal2, 0, 700, 0, 127);
MIDImessage(noteON2, note2, 100);
delay(300);
MIDImessage(noteON2, note2, 0);//turn note off (note on with velocity 0)
delay(200);
int potVal = analogRead(potPin);//read data from potentiometer
//we have to scale the potentiometer data to fit between 0 and 127 (this is the range of MIDI notes)
byte note3 = map(potVal, 0, 1023, 0, 127);
MIDImessage(noteON3, note, 100);//turn note on
delay(0);//hold note for 300ms
}
//send MIDI message
void MIDImessage(byte command, byte data1, byte data2) {
Serial.write(command);
Serial.write(data1);
Serial.write(data2);
}
Non conosco il MIDI, ma mi vien da dire che c'è differenza fra questo
int analogVal2 = analogRead(analogPin2);
byte note2 = map(analogVal2, 0, 700, 0, 127);
MIDImessage(noteON2, note2, 100);
delay(300);
MIDImessage(noteON2, note2, 0);//turn note off (note on with velocity 0)
delay(200);
e questo:
int potVal = analogRead(potPin);//read data from potentiometer
//we have to scale the potentiometer data to fit between 0 and 127 (this is the range of MIDI notes)
byte note3 = map(potVal, 0, 1023, 0, 127);
MIDImessage(noteON3, note, 100);//turn note on
delay(0);//hold note for 300ms
Dal lato logic, credo che ogni sensore non possa essere uno stumento diverso.
Il SW sul computer dovrebbe identificare il singolo strumento tramite ogni singola MIDI che ad esso è collegata.
Per avere note differenti puoi agire sulle funzioni map dei singoli sensori.
Sapendo che MIDI accetta un range 0-127, mi viene da presupporre che se al primo sensore lo mappi fra 85-127 faccia solo note acute, il secondo fra 43-85 faccia i medi, ed il potenziometro 0-43 fai i bassi.
Scusate di nuovo, volevo chiedere una cosa, come posso far durare di più una nota? perché note cambiano in continuazione. Mi piacerebbe che la nota che mi crea il potenziometro rimanga "premuta" fino a quando non sono io a cambiare.
Grazie mille
quel delay è quello che passa tra una nota e l'altra ho provato ma se metto 3 secondi ad esempio passano 3 secondi dalla nota successiva ma non rimane suonata