Problem z portem USB MIDI w Arduino LEONARDO - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica) +--- Wątek: Problem z portem USB MIDI w Arduino LEONARDO (/watek-problem-z-portem-usb-midi-w-arduino-leonardo) |
Problem z portem USB MIDI w Arduino LEONARDO - RyGa - 29-02-2024 Szanowni koledzy. Widzę że będę musiał Was poprosić o pomoc albo jakąś sugestię. Postanowiłem zrobić keyboard. Skorzystałem z tego projektu (Projekr 1). Oczywiście rozbudowałem go do matrycy 8x8. Wgrałem szkic do Arduino UNO i wszystko ładnie zagrało. Ale do tego potrzebne są na PC-ecie dwie aplikacje do wirtualnych portów, loopMIDI i hairless. Wygodniej było by mi podłączyć USB i żeby komputer od razu go widział. Wobec tego kupiłem sobie Arduino LEONARDO, ponieważ ma on USB natywne. Niestety, po wgraniu tego szkicu komputer a ściśle programy, które grały na UNO tutaj nie wydają żadnego dźwięku. Komputer widzi płytkę "Arduino Leonardo". By się upewnić czy wszystko dobrze z płytką, wgrałem inny szkic z innego projektu (Projekt 2). I on zagrał. tyle że jest to wersja bardzo uproszczona i mnie niezadowalająca, 16 dźwięków. Być może jest to prosta sprawa ale nie mogę sobie z tym poradzić. To prosił bym o jakąś radę albo sugestię w którym kierunku iść. Chyba że w ogóle to nie jest możliwe. Z góry dziękuję za zainteresowanie się moim projektem. Załączam też szkice do obydwu tych projektów. RE: Problem z portem USB MIDI w Arduino LEONARDO - oscarX - 29-02-2024 (29-02-2024, 09:55)RyGa napisał(a): Szanowni koledzy. Co widzi komputer jak wgrasz szkic 2? Skoro pierwszy projekt rozbudowałeś sam do klawiatury matrycowej to wystarczy zrobić to samo z drugim projektem. Wygląda jednak, że mniej roboty będzie jak weźmiesz projekt 1, zmienisz include na MIDIUSB.h i skopiujesz tam funkcje noteOn() i noteOff() z drugiego projektu, może jakieś proste dopasowanie kodu i powinno zadziałać. RE: Problem z portem USB MIDI w Arduino LEONARDO - RyGa - 01-03-2024 Dziękuję za szybką reakcję. Jeśli chodzi o komputer to w UNO występuje jako USB-SERIAL CH340 a w LEONARDO w obu projektach jako "Arduino Leonardo". Jak już pisałem w pierwszym projekcie na LEONARDO nie działa z żadnym programem muzycznym MIDI. Może i Twoja, oskarX rada jest dobra, ale może jej nie potrafię zastosować i dlatego w dalszym ciągu nie udaje mi się uruchomić płytki tak jak bym chciał. W pierwszym projekcie na UNO działa przez porty wirtualne przez loopMIDI i hairless. W drugim projekcie działa bezpośrednio przez USB i odrazu pracuje z programami muzycznymi. Obydwa projekty są zbudowane na różnych kodach. Próba pogodzenia funkcji z obydwu kodów nie zabardzo mi wychodzi. Czy w jedną czy w drugą stronę. Wyskakuje za dużo błędów. A nie jestem na tyle obeznany w funkcjach i zawiłościach w programowaniu Arduino. Dlatego zamieściłem się w Piaskownicy. Cały czas się edukuję i eksperymenuję. Prosząc o radę, chciałem pójść trochę na skróty. Prosił bym jeszcze o inne sugestie i rady. RE: Problem z portem USB MIDI w Arduino LEONARDO - MadMrQ - 01-03-2024 Pierwszy szkic działa na Arduino UNO więc na Leonardo też powinien działać bez problemu jeżeli chodzi o klawiaturę matrycową. Różnica będzie tkwiła w sposobie komunikacji z komputerem. Na początek musisz w pierwszym skeczu dodać: Kod: #include "MidiUSB.h" Midi to transmisja trzech danych: kanał, nuta, nacisk klawisza dlatego w pierwszym skeczu masz funkcję noteOn w postaci: Kod: void noteOn(int cmd, int pitch, int velocity) { Program pcha przez seriala do kompa właśnie te trzy dane i stąd w kodzie dotyczącym poszczególnych klawiszy masz wywołania funkcji noteOn w postaci: Kod: if (groupValue1 != 0 && !keyPressed[col]) { Jako kanał wszędzie użyta jest wartość 0x91, nuta jest określona w matrycy keyToMidiMap, a noteVelocity ma zadeklarowaną na początku kodu wartość 127. W drugim kodzie działa to troszkę inaczej, ponieważ masz wykorzystywaną bibliotekę MidiUSB i funkcja noteOn ma towarzysza w postaci noteOff i ma postać: Kod: void noteOn(byte pitch) { Wywołanie przy naciśnięciu klawisza powinno mieć najprawdopodobniej postać: Kod: if (groupValue1 != 0 && !keyPressed[col]) { a po puszczeniu: Kod: if (groupValue1 == 0 && keyPressed[col]) { Poniżej masz całość - kompiluje się poprawnie, ale czy działa tak jak powinno nie mam jak sprawdzić: Kod: #include <Keyboard.h> RE: Problem z portem USB MIDI w Arduino LEONARDO - oscarX - 01-03-2024 Ja bym jeszcze dodał, że jeśli chcesz połączyć przyciski klawiatury muzycznej w matryce to musisz ją zabezpieczyć przed błędnym odczytem gdy przyciśniete są 3 lub więcej przycisków naraz - co zdarza się w muzyce. Na przykład można do każdego klawisza dodać diodę (w sumie 64 diody). RE: Problem z portem USB MIDI w Arduino LEONARDO - RyGa - 01-03-2024 Dziękuję bardzo. Biorę się za testowanie. O diodach w matrycy wiem. Dziękuję. RE: Problem z portem USB MIDI w Arduino LEONARDO - kaczakat - 01-03-2024 Może nie próbuj przeskakiwać etapów, na Leonardo najpierw zrób klawiaturę matrycową, są do tego gotowe biblioteki z przykładami. Jak już będziesz miał działające 64 przyciski to dopiero wróć do pożenienia tego z MIDI, to już prosta funkcja, odczyta jakieś wciśnięcie to dany przycisk wysyła z odpowiednim kodem MIDI. Zwróć uwagę, że UNO ma SPI na pinach 11,12,13, a w Leonardo nie ma tego w tym miejscu, te piny są na złączu 6 pin do programowania. Z drugiej strony masz tak jakby 3 piny dodatkowe, 0 i 1 też nie jest podłączone do UART i też je tu można wykorzystać do matrycy, wiec w ogóle nie potrzebujesz scalaka rejestru przesuwnego, jeśli nic więcej nie podłączasz, masz 19 pinów I/O do dyspozycji. RE: Problem z portem USB MIDI w Arduino LEONARDO - RyGa - 01-03-2024 Dziękuję bardzo kolegom za pomoc szczególnie MadMrQ za poprawienie mojego kodu. Wszystko zadziałało. Mam teraz dobry punkt wyjścia do dalszej edukacji i dokładnej analizy, co i dlaczego. Wezmę też pod uwagę sugestie kolegi kaczakat. RE: Problem z portem USB MIDI w Arduino LEONARDO - MadMrQ - 01-03-2024 Cieszę się, że mogłem pomóc. |