Arduino Forum

International => Italiano => Generale => Topic started by: jaz56 on Jul 11, 2020, 03:18 pm

Title: Messaggio midi non inviato
Post by: jaz56 on Jul 11, 2020, 03:18 pm
Salve, avrei in mente di realizzare un midicontroller a 12 pulsanti da connettere a vari multieffetti midi per basso o chitarra, in modo che alla pressione di un pulsante arduino dovrà inviare al multifx il messaggio midi  corrispondente al numero della patch che a sua volta corrisponderà ad un suono ben preciso e per farla breve ho iniziato ad usare Arduino UNO + USB Host Shield con cui poi caricherò il codice adeguato. Qui il codice

Code: [Select]

#include <SPI.h>
#include <Usb.h>
#include <usbhub.h>
#include <usbh_midi.h>



USB  Usb;
USBH_MIDI  Midi(&Usb);


void setup()

{

if (Usb.Init() == -1)
{while(1);}

}

///////////////////////////////////////////////////////////////

void loop()

      {

Usb.Task();
 if( Usb.getUsbTaskState() == USB_STATE_RUNNING )

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

}

Title: Re: Messaggio midi non inviato
Post by: gpb01 on Jul 11, 2020, 03:38 pm
>jaz56:   ti ricordo che in conformità al regolamento (http://forum.arduino.cc/index.php?topic=149082.0), punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

In pratica, tutto il tuo codice (... anche se si tratta di poche righe) dovrà trovarsi racchiuso tra due tag: [code] _il _tuo_ codice_ [/code] così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo. Grazie. :)

Guglielmo
Title: Re: Messaggio midi non inviato
Post by: gpb01 on Jul 11, 2020, 06:24 pm
... emmm ... io lo avevo anche ben specificato ... dovevi EDITARE il tuo post iniziale e NON crearne uno nuovo ;)

Guglielmo
Title: Re: Messaggio midi non inviato
Post by: jaz56 on Jul 11, 2020, 06:33 pm
Wow ce l'ho fatta. Adesso helpatemi

(qui il prosecco è buono )
Title: Re: Messaggio midi non inviato
Post by: jaz56 on Jul 11, 2020, 10:07 pm
gpb01..c'è per caso ancora qualcosa che non ho rispettato ?


Edit

adesso a casa mi sono accorto che ho dimenticato qualcosina nel codice. Lo correggo
Title: Re: Messaggio midi non inviato
Post by: jaz56 on Jul 12, 2020, 01:44 am
Bho adesso funziona, anche se ho capito che qualcosa che non mi servirà posso escluderla ( vedi codice allegato).

Code: [Select]


#include <usbmidi.h>
#include <MIDI.h>

MIDI_CREATE_DEFAULT_INSTANCE ();


Serial.begin(115200);




A proposito, visto che per collegare Arduino al multieffetto userei la porta usb dell' USB Host Shield, posso approfittare che i due pin digitali per Tx e Rx rimangono inutilizzati per mettere due led o due pulsanti o possono esserci problemi ?

Title: Re: Messaggio midi non inviato
Post by: gpb01 on Jul 12, 2020, 08:47 am
gpb01..c'è per caso ancora qualcosa che non ho rispettato ?
No, tutto a posto, ma ... NON aspettarti risposte in tempi brevi ... specie di Sabato e Domenica e d'Estate ... :D

Guglielmo
Title: Re: Messaggio midi non inviato
Post by: jaz56 on Jul 12, 2020, 12:03 pm
no problem
Title: Re: Messaggio midi non inviato
Post by: docdoc on Jul 13, 2020, 10:57 am
Bho adesso funziona, anche se ho capito che qualcosa che non mi servirà posso escluderla ( vedi codice allegato).
Hm, il codice che hai postato contiene solo 4 istruzioni, dov'è il resto?

Quote
A proposito, visto che per collegare Arduino al multieffetto userei la porta usb dell' USB Host Shield, posso approfittare che i due pin digitali per Tx e Rx rimangono inutilizzati per mettere due led o due pulsanti o possono esserci problemi ?
Non ho mai usato una USB Host Shield (che comunque ho letto che non producono più) ma direi nessun problema, a patto che tu non usi la seriale (D0-D1) in alcun altro modo e che la USB Host Shield non usi a sua volta quei pin per le sue operazioni.

Ma se sei in "crisi" di pin, visto che parli di 12 pulsanti, perché non usi gli analogici? Si possono usare come normali pin digitali...


Title: Re: Messaggio midi non inviato
Post by: gpb01 on Jul 13, 2020, 12:19 pm
Non ho mai usato una USB Host Shield (che comunque ho letto che non producono più) ...
... quella ufficiale aveva anche SERI problemi hardware tanto che, una volta montata, NON potevi più usare null'altro che usava il bus SPI !!!  :o

Guglielmo
Title: Re: Messaggio midi non inviato
Post by: jaz56 on Jul 13, 2020, 03:29 pm
Hm, il codice che hai postato contiene solo 4 istruzioni, dov'è il resto?
il resto non c'è ancora, volevo solo verificare se il messaggio midi lo inviava oppure no e non lo invia perchè pare che l'istruzione
Code: [Select]
if( Usb.getUsbTaskState() == USB_STATE_RUNNING )
 fallisca

Non ho mai usato una USB Host Shield (che comunque ho letto che non producono più) ma direi nessun problema, a patto che tu non usi la seriale (D0-D1) in alcun altro modo e che la USB Host Shield non usi a sua volta quei pin per le sue operazioni.
grazie

Ma se sei in "crisi" di pin, visto che parli di 12 pulsanti, perché non usi gli analogici? Si possono usare come normali pin digitali...
sì quello lo sapevo, basta definirli come input. Al limite userò Arduino MEGA che ne ha in abbondanza, modificando probabilmente il futuro codice.

A proposito, leggevo anche che si può semplicemente usare l' ATMEGA328P con 2 condensatori e un quarzo ma ho anche letto che quel chip il quarzo dovrebbe avercelo già internamente. Confermate ?
Title: Re: Messaggio midi non inviato
Post by: docdoc on Jul 13, 2020, 03:46 pm
il resto non c'è ancora, volevo solo verificare se il messaggio midi lo inviava oppure no e non lo invia perchè pare che l'istruzione
Code: [Select]
if( Usb.getUsbTaskState() == USB_STATE_RUNNING )
 fallisca
Beh innanzitutto tra le righe che hai postato non c'è neanche la setup() (e c'è invece una Serial.begin "orfana"), quindi come faresti a verificare che faccia qualcosa?

Se hai fatto uno sketch, sempre utile postare quello (e per intero), se invece parli di uno degli sketch di esempio della libreria (è questo che stavi provando?), non solo sarebbe meglio postare tutto quel codice, ma dovresti anche specificare esattamente quale libreria stai usando perché esistono quantomeno sia la MIDIUSB (https://github.com/arduino-libraries/MIDIUSB) di Arduino, sia la USBMIDI (https://github.com/BlokasLabs/USBMIDI) di tal BlokasLabs. Non è che hai qualche "mix" di librerie ad esempio?

Una volta che ci avrai chiarito questo, prendi uno degli esempi e provalo, e vedi che cosa succede, e se dovesse fallire posta lo sketch e l'errore esatto.

Quote
sì quello lo sapevo, basta definirli come input. Al limite userò Arduino MEGA che ne ha in abbondanza, modificando probabilmente il futuro codice.
Se non ti bastano altre 6 porte (o 4 se hai qualche device I2C come ad esempio un display), meglio la Mega. Ma stando a quanto hai detto finora, secondo me ti bastano.
Title: Re: Messaggio midi non inviato
Post by: jaz56 on Jul 13, 2020, 05:54 pm
Beh innanzitutto tra le righe che hai postato non c'è neanche la setup()
hai guardato il codice nel primo post ?

(e c'è invece una Serial.begin "orfana"),
quella l'avevo messa per usarla con il Monitor seriale ma la tolgo subito, anzi tolgo anche la libreria usbmidi.h tanto non serve.

Se hai fatto uno sketch...
... minimale solo per vedere se con quelle 4 istruzioni riuscivo ad attivare un program change che però non si attiva e la compilazione non dà alcun errore.

Se non ti bastano altre 6 porte (o 4 se hai qualche device I2C come ad esempio un display), meglio la Mega. Ma stando a quanto hai detto finora, secondo me ti bastano.
per lo scopo del momento, potrei farcela solo con le porte di Arduino UNO.
Title: Re: Messaggio midi non inviato
Post by: docdoc on Jul 14, 2020, 08:51 am
hai guardato il codice nel primo post ?
Certo, ma se poi dici "Bho adesso funziona" per me hai cambiato qualcosa, e postare solo quattro righe di codice (ed io mi riferivo ovviamente a quelle) non aiuta molto a capire.

Quote
... minimale solo per vedere se con quelle 4 istruzioni riuscivo ad attivare un program change che però non si attiva e la compilazione non dà alcun errore.
Non so, se il codice è come quello del primo post, tu stavi mandando 100 Program Change al secondo: se ne vuoi mandare solo uno, metti le istruzioni nel setup() magari dopo un delay(5000) per mandarlo dopo 5 secondi dall'accensione.

Se hai poi tolto librerie non utili o comunque modificato il programma, posta quello nuovo, per intero così magari vediamo. E comunque non ho ancora capito bene se alla fine ti funzioni o meno (ma anche se funzionasse postare il codice corretto sarebbe un modo per aiutare eventualmente altri con il tuo stesso problema o dubbio...).
Title: Re: Messaggio midi non inviato
Post by: jaz56 on Jul 14, 2020, 03:45 pm
Certo, ma se poi dici "Bho adesso funziona" per me hai cambiato qualcosa, e postare solo quattro righe di codice (ed io mi riferivo ovviamente a quelle) non aiuta molto a capire.
no, non ho cambiato niente e non so perchè ha funzionato, ma in quel frattempo avevo spento il pc e quando l'ho riavviato ho ricaricato il codice e il messaggio midi lo ha invato tant'è che nel multieffetto si è attivata la patch del suono inviata.

Non so, se il codice è come quello del primo post, tu stavi mandando 100 Program Change al secondo: se ne vuoi mandare solo uno, metti le istruzioni nel setup() magari dopo un delay(5000) per mandarlo dopo 5 secondi dall'accensione.
sì lo so che il codice andrebbe modificato ma per quello che era il mio scopo, cioè verificare rapidamente se il messaggio midi arrivasse fino al multieffetto, mi andava bene cosi ;-)

Se hai poi tolto librerie non utili o comunque modificato il programma, posta quello nuovo, per intero così magari vediamo. E comunque non ho ancora capito bene se alla fine ti funzioni o meno (ma anche se funzionasse postare il codice corretto sarebbe un modo per aiutare eventualmente altri con il tuo stesso problema o dubbio...).
ho solo tolto quello che ho scritto in un mio post precedente e quelle 4 righe di codice funzionano. Non ho aggiunto altro codice perchè adesso non ho tempo e devo preparare due esami ma se invece avessi tu un codice completo che fa quello di cui ho bisogno e che spiego nel primo post, passalo pure qui perchè in giro non ho trovato niente che faccia questo.


[/quote]
Title: Re: Messaggio midi non inviato
Post by: jaz56 on Jul 27, 2020, 08:01 pm
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
Title: Re: Messaggio midi non inviato
Post by: jaz56 on Aug 01, 2020, 01:54 am
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 ?
Title: Re: Messaggio midi non inviato
Post by: Standardoil on Aug 01, 2020, 07:50 am
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...
Title: Re: Messaggio midi non inviato
Post by: jaz56 on Aug 01, 2020, 03:47 pm
Rilassati, il mio non è un problema ma solo una curiosità. Amen e buone ferie.
Title: Re: Messaggio midi non inviato
Post by: Standardoil on Aug 01, 2020, 05:23 pm
Plonk
Title: Re: Messaggio midi non inviato
Post by: jaz56 on Aug 02, 2020, 01:47 am
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.