Go Down

Topic: Messaggio midi non inviato (Read 970 times) previous topic - next topic

jaz56

La settimana scorsa ho smanettato un pomeriggio intero e ho finalmente completato il tutto con 5 pulsanti e funziona tutto bene MA non ho capito come mai devo dargli un "aiutino" iniziale io altrimenti subito dopo il power on il controller sembra freezzato, per cui prova che ti prova ho scoperto che se comincio a premere a caso i pulsanti un pò di volte, dopo qualche secondo il tutto funziona bene e si normalizza senza mai interrompersi. Aggiungo che nel frattempo l'ho usato per una decina di ore circa senza problemi, tranne quello della spinta iniziale cioè della pressione random dei pulsanti.

Magari sbaglio ipotesi ma, se i dati midi devono viaggiare sulla usb e non ci vanno, secondo me potrebbe voler dire che la usb potrebbe avere qualche problema hardware o software, o no ? In ogni caso, i dati midi vengono inviati con questo codice

Code: [Select]

void SendMIDI(byte number)                          
{
  Usb.Task();

if( Usb.getUsbTaskState() == USB_STATE_RUNNING ) // LA USB NOT RUNNING

    {
 Serial.println("USB RUNNING"); // se USB si attiva stamperà USB RUNNING

    byte Message[2];                
    Message[0]=0xC0;                  
    Message[1]=number;              
    Midi.SendData(Message);
    delay(10);
    }
}

    

il controllo mi stampa "USB RUNNING" sul serial monitor solo se premo i pusanti a caso altrimenti ho aspettato fino a oltre un'ora e sembrava tutto congelato. e pare che il problema risiederebbe all'interno di Usb.task().

Alla ine della fiera potrei tenermelo anche cosi ma se funzionasse autonomamente sarebbe meglio. Ma secondo voi, per renderlo funzionante e autonomo, quindi senza pressione random dei pulsanti, si deve modificare qualche costante/variabile in qualche file della libreria da qualche parte ? Oppure è un problema della scheda Usb Host Shield ?

Sempre grazie

jaz56

Nel frattempo ho anche fatto caso che tutte le volte che lo avvio, devo sempre pushare 8 volte (sempre 8 volte) a caso sui pulsanti, e succede sempre che al 5° push (sempre al 5°) si sblocca e trasmette il messaggio midi, ma già al 6° ritorna a bloccarsi nuovamente fino a quando non arrivo all'ottavo push pulsante. Questa scena si ripete tutte le volte.

Ho provato a togliere la libreria SPI.h e il funzionamento rimane invariato, mentre io pensavo che non avrebbe funzionato del tutto.

Anime pie già in vacanza ? Alternative a utilizzare la Usb.task() che sembra quella che causa il blocco ?

Standardoil

#17
Aug 01, 2020, 07:50 am Last Edit: Aug 01, 2020, 09:02 am by Standardoil
Se metti il codice
Completo
Che compila
E bene indentato


Ci guardo

Altrimenti la situazione rimane invariata: io sono in ferie e tu hai il problema

Scusa se sembro brusco  ma ti hanno già chiesto varie volte delucidazioni, adesso è il momento di darle...
Prima legge di Nelson (che sono io): La risposta giusta si può ottenere solo dalla domanda giusta, domande sbagliate danno risposte inutili

Non bado a studenti, che copino altrove

Hai problema-Ti domando-Non rispondi: Non ti serve più

jaz56

Rilassati, il mio non è un problema ma solo una curiosità. Amen e buone ferie.

Standardoil

Prima legge di Nelson (che sono io): La risposta giusta si può ottenere solo dalla domanda giusta, domande sbagliate danno risposte inutili

Non bado a studenti, che copino altrove

Hai problema-Ti domando-Non rispondi: Non ti serve più

jaz56

Ma sì, guarda, plonkami pure se ti fa piacere, anche se il codice da te richiesto, con toni devo dire molto gradevoli e per niente bruschi ( noooo), è proprio quello del primo post, sebbene allo stato embrionale e valevole per un solo pulsante ( anche se per distrazione che non ti sto a spiegare, manca il pinMode del pulsante in input)...ma probabilmente non sarò stato io chiaro ad esprimermi.

Tanto, il cuore di questo sketch è l'invio del messaggio midi di program change, quindi 4 istruzioni contate, proprio come le aveva correttamente contate "docdoc", che per altri versi però una mano me l'ha anche data.

Il blocco è dovuto a qualche problema interno alla Usb.task(), probabilmente per noti problemi di non completa compatibilità tra Arduino Uno e la Usb Host Shield o più banalmente per qualche timeout interno alla Usb.task che andrebbe ridimensionato.

Ma

il codice

è quello.

Capiscilo.

Punto.

Go Up