Buongiorno a tutti, è da un paio di settimane che sfrutto il periodo di quarantena forzata per noi Italiani, per cercare di creare un controller per questo pedale: Zoom ms-50g
La mie dotazioni per la realizzazione del progetto sono: Arduino Uno, UsbHost, il suddetto pedale, il cavo usb-minuUsb per pilotarlo e tanta tanta pazienza.
Ho spulciato in ogni dove per cercare di risolvere da me il problema, quando sono arrivato quasi al traguardo ho trovato un programma già scritto e le spiegazioni dettagliate per la realizzazione hardware... ma qui è nato il problema: il progetto online prevedeva un host usb già programmata per ricevere il serial.write direttamente dal piedino TX di Arduino, ovviamente mi sono orientato su questo HostUsb anch'io ma per la legge di Murphy non è più in produzione, quindi ho ripiegato sulla più comune scheda HostUsb presente su Amazon.
Ho installato tutte le librerie relative, e ho provato se funzionava attraverso il programma di esempio per leggere da tastiera che restituisce il codice ASCII, tutto perfettamente funzionante.
Il mio problema adesso è quello di dirottare il SerialWrite dal piedino Tx all'uscita Usb per essere inviato al pedale da controllare.
Ho provato a fare copia e incolla dai diversi progetti di esempio con scarsi risultati, ma non riesco a trovare molte informazioni su come utilizzare la libreria USB Host Shield 2.0.
Vi allego il programma che ho trovato (quello originale che non prevede la presenza dell'HostUsb) e spero in un vostro aiuto perchè sono ad un passo dal traguardo e non mi voglio arrendere proprio ora che ho scoperto questo bellissimo mondo
int presetSwitch[] = {17,16,15,14}; // presets 1 to 4
const int rangeSwitch = 18; // add or disminish +4 (range)
const int patchLed[] = {2,3,4,5}; //led per patch
const int bankLed = 12; // led for bank on/off
int range = 0;
int programChangeValue = 0; // if you want to begin from preset 1
int dlay = 260; // adjust this to taste
/******************************************************/
void setup()
{
for(int i=0; i<4; i++)
{
pinMode(presetSwitch, INPUT_PULLUP);
pinMode(patchLed, OUTPUT);
digitalWrite(patchLed, LOW);
}
pinMode(bankLed, OUTPUT);
digitalWrite(bankLed, LOW);
pinMode(rangeSwitch, INPUT_PULLUP);
//Serial.begin(9600);
Serial.begin(31250); /* for midi communication - pin 1 TX */
}
/*********************************************************/
void midiProg(byte pcNum)
{
Serial.write(0xC0); //midi program change status
Serial.write(pcNum);
}
/*********************************************************/
void rangeValue() //select presets 1 to 4 or 5 to 8
{
if (digitalRead(rangeSwitch)!= HIGH)
{
range = range +4; // add 4
digitalWrite(bankLed, HIGH);
delay(dlay);
if(range >4) // add as many ranges you like (multiples of four)
{
range = 0; // minus 4
digitalWrite(bankLed, LOW);
}
//Serial.print("range = ");
//Serial.println(range);
}
}
/*********************************************************/
void clearAllLeds(int except)
{
for(int j=0; j<4; j++)
{
digitalWrite(patchLed[j], LOW);
}
digitalWrite(patchLed[except], HIGH);
}
/*********************************************************/
void loop()
{
rangeValue();
for(int i=0; i<4; i++)
{
if(digitalRead(presetSwitch)!= HIGH)
{
programChangeValue = i + range;
//Serial.println(programChangeValue);
midiProg(programChangeValue);
clearAllLeds(i);
delay(dlay);
}
}
}