14-08-2019, 00:37
Przykład z serial event masz w Arduino IDE, zobacz jak to tam wygląda. Jak masz do odebrania ten jeden bajt to nie potrzebujesz serialEvent(), on jest po to by zebrać np. całą linię tekstu, albo określoną liczbę bajtów, więc jest tam jakaś zmienna string lub tablica gdzie wrzucasz te swoje 3 i jak tyle nazbierasz to sygnalizujesz do pętli głównej by coś z tym zrobić.
Arduino IDE -> Przykłady ->04. Komunikacja-> Serial event. Gdzieś tu na forum wrzuciłem przykład ze zbieraniem znaków aż do znaku końca linii, umieszczenie w tablicy i obróbka.
W Twoim przypadku powinieneś zebrać całą ramkę danych tego komunikatu midi, jak już znajdziesz jego koniec to wtedy w evencie ustawiasz flagę dla innej funkcji w programie, że masz cała ramkę. Ta inna funkcja bierze tą całą ramkę i wyjmuje z niej pierwsze 3 bajty, reszta do kosza. Możesz też odebrać i zapisać do tablicy 3-elementowej te pierwsze 3 bajty i resztę po prostu nie zapisywać, czekasz tylko na koniec ramki i zgłaszasz zakończenie.
Inaczej każde 3 bajty będziesz traktował jako te pierwsze. Nie wiem jak wygląda ramka midi, czy jest stała i po prostu zliczasz odebrane bajty, czy jest zmienna i jest jakiś znacznik początku i końca, czy w którymś bajcie jest podana długość danej ramki. To wszystko trzeba przeanalizować i obsłużyć w event, a gotowca przekazać do innej funkcji w loop. Wtedy w loop po prostu robisz if(ramka_gotowa==1) bierz_te_3_bajty();
Arduino IDE -> Przykłady ->04. Komunikacja-> Serial event. Gdzieś tu na forum wrzuciłem przykład ze zbieraniem znaków aż do znaku końca linii, umieszczenie w tablicy i obróbka.
W Twoim przypadku powinieneś zebrać całą ramkę danych tego komunikatu midi, jak już znajdziesz jego koniec to wtedy w evencie ustawiasz flagę dla innej funkcji w programie, że masz cała ramkę. Ta inna funkcja bierze tą całą ramkę i wyjmuje z niej pierwsze 3 bajty, reszta do kosza. Możesz też odebrać i zapisać do tablicy 3-elementowej te pierwsze 3 bajty i resztę po prostu nie zapisywać, czekasz tylko na koniec ramki i zgłaszasz zakończenie.
Inaczej każde 3 bajty będziesz traktował jako te pierwsze. Nie wiem jak wygląda ramka midi, czy jest stała i po prostu zliczasz odebrane bajty, czy jest zmienna i jest jakiś znacznik początku i końca, czy w którymś bajcie jest podana długość danej ramki. To wszystko trzeba przeanalizować i obsłużyć w event, a gotowca przekazać do innej funkcji w loop. Wtedy w loop po prostu robisz if(ramka_gotowa==1) bierz_te_3_bajty();
Miło być decenianym https://buycoffee.to/kaczakat