![]() |
Wysyłanie dużych wiadomości poprzez serial - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Programowanie w Arduino (https://forum.arduinopolska.pl/dzial-programowanie-w-arduino) +--- Wątek: Wysyłanie dużych wiadomości poprzez serial (/watek-wysy%C5%82anie-du%C5%BCych-wiadomo%C5%9Bci-poprzez-serial) |
Wysyłanie dużych wiadomości poprzez serial - grzechutex - 05-04-2024 Witam, próbuje stworzyć oświetlenie ambient do mojego monitora poprzez zbieranie informacji o średnim kolorze w 114 kwadratach po brzegach mojego monitora. Stworzyłem skrypt w Pythonie który zbiera dla mnie te informacje i przechowuje w liście w postaci koloru HEX. Jako że kwadratów jest 114 a w przypadku wysłania dochodzi jeszcze przecinek, łącznie będę wysyłał jednocześnie 912 znaków. Nie jestem obiegany z Serial, ale najwyższa ilość znaków jaką udało mi się wysłać i odebrać poprzez Arduino to 219. Czy jest możliwość wysłania takiej długiej wiadomości? A może któryś z was ma lepszy pomysł jak te informacje przekazać. Pozdrawiam. RE: Wysyłanie dużych wiadomości poprzez serial - MadMrQ - 05-04-2024 Bufor seriala ma coś około 64 bajtów, więc do momentu kiedy odczytujesz na tyle szybko, że dane w buforze się nie kumulują ponad tą wartość, powinieneś dać radę przepchnąć te dane znak po znaku. Po odebraniu zapisujesz w jakimś array'u i interpretujesz dane. Problemem może być prędkość samej transmisji. Przy 9600 masz 960 znaków na sekundę plus "obrobienie" odebranych danych, co słabo rokuje jeżeli chodzi o Twoje zastosowania. Także jak dla mnie zabawa z doborem prędkości transmisji albo z wielkością bufora transmisji szeregowej. RE: Wysyłanie dużych wiadomości poprzez serial - Jarewa0606 - 06-04-2024 Bufor serial-a można zwiększyć do zapotrzebowania. RE: Wysyłanie dużych wiadomości poprzez serial - oscarX - 06-04-2024 (06-04-2024, 06:07)Jarewa0606 napisał(a): Bufor serial-a można zwiększyć do zapotrzebowania. Masz na myśli jakąś metodę obiektu Serial, czy dorobienie własnej obsługi? RE: Wysyłanie dużych wiadomości poprzez serial - MadMrQ - 06-04-2024 W pliku Hardwareserial.h jest coś takiego: SERIAL_TX_BUFFER_SIZE tu bym szukał. RE: Wysyłanie dużych wiadomości poprzez serial - Jarewa0606 - 06-04-2024 Dokładnie tam w core. tylko Uno zbytnio się nie nadaje bo zeżre sporo pamięci ram a tam szastać zbytnio nie ma czym, wybrał bym esp do tego projektu lub mega. RE: Wysyłanie dużych wiadomości poprzez serial - oscarX - 06-04-2024 (06-04-2024, 08:36)MadMrQ napisał(a): W pliku Hardwareserial.h jest coś takiego: Czyli taka "customizacja" biblioteki. RE: Wysyłanie dużych wiadomości poprzez serial - MadMrQ - 06-04-2024 Oczywiście w przypadku kolegi @grzechutex raczej potrzebna będzie zmiana dla bufora odczytu SERIAL_RX_BUFFER_SIZE. Możesz próbować wysyłać dane pakietami - np. w taki sposób, że urządzenie wysyłające czeka na potwierdzenie odbioru pierwszego pakietu zanim wyśle drugi, ale to burzy całą ideę transmisji asynchronicznej jaką jest Serial. Do mrugania LEDami możesz przetestować: https://github.com/FastLED/FastLED RE: Wysyłanie dużych wiadomości poprzez serial - oscarX - 06-04-2024 (06-04-2024, 20:14)MadMrQ napisał(a): Oczywiście w przypadku kolegi @grzechutex raczej potrzebna będzie zmiana dla bufora odczytu SERIAL_RX_BUFFER_SIZE. Nie sądze by problemem była prędkość. Dane serialem idą na tyle wolno, że atmega spokojnie obrobi je na bieżąco, ale można to zrobić pod warunkiem, że dane będą przesyłane w taki sposób, że nie będzie potrzeby skompletowania całości komunikatu, że na podstawie kilku znaków można będzię ustalić kolor jakiegoś LEDa i zapomnieć o odebranych danych. Jakiś znacznik początku, potem kolejne liczby powodują wysterowanie poszczególnych LEDów - kolejno w miarę jak dane nadchodzą. Ten znacznik początku dla synchronizacji ramki - może być nawet nowa linia. Prosty automat stanów taktowany odbieranymi znakami. bez dłuższej pauzy na jakąkolwiek czynność. Największy problem sam wskazałeś - będzie można sterować tym podświetleniem raz na sekundę. A stosowanie jakiegoś flow-control w tego typu real-time-owej aplikacji jest bez sensu - jak się nie wyrobimy, to lepiej zapomnieć w starociach i wziąć aktualne dane. RE: Wysyłanie dużych wiadomości poprzez serial - Łowiczak - 14-04-2024 (05-04-2024, 20:17)grzechutex napisał(a): Witam, próbuje stworzyć oświetlenie ambient do mojego monitora poprzez zbieranie informacji o średnim kolorze w 114 kwadratach po brzegach mojego monitora. Stworzyłem skrypt w Pythonie który zbiera dla mnie te informacje i przechowuje w liście w postaci koloru HEX. Jako że kwadratów jest 114 a w przypadku wysłania dochodzi jeszcze przecinek, łącznie będę wysyłał jednocześnie 912 znaków. Nie jestem obiegany z Serial, ale najwyższa ilość znaków jaką udało mi się wysłać i odebrać poprzez Arduino to 219. Czy jest możliwość wysłania takiej długiej wiadomości? A może któryś z was ma lepszy pomysł jak te informacje przekazać. Pozdrawiam. 1. przecinek przecież jest zbędny, bo separatorem może być znak # 2. ja nieraz stosowałem swoje algorytmy kompresji w grach..., w tym przypadku masz sporo możliwości co zmniejszy twój strumień do np 50 znaków jak nie mniej 000 to znak G 111 to znak H 00 to znak I 11 to znak J 01 to znak K 10 to znak L ... i.t.d. |