steeams Napisano Wrzesień 4, 2018 Udostępnij Napisano Wrzesień 4, 2018 (edytowany) Czesc, Mam skrypt, ktory ma za zadanie odczytac pojedynczego char'a przeslanego przez UART z ATMEGI: BOSS_SITE = "https://forbot.pl/forum/" SERIAL_PORT = "/dev/ttyACM0" BAUD_RATE = 9600 import serial import webbrowser sp = serial.Serial(SERIAL_PORT, BAUD_RATE, timeout = 5) sp.flush() print ("Boss Button") while(1): # Sit and wait forever response = sp.read(1) # get one byte if response == "O": print ("Got OK Byte. Waiting for button press.") elif response == "X": print ("Got Boss Byte! Alarm!") webbrowser.open(BOSS_SITE) else: print ("Got nothing. Still waiting.") Skrypt jest z ksiazki, problem jest taki, ze nic nie dostaje, tzn. po odpaleniu skryptu mam tylko Got nothing. Still waiting. Odpalajac kontrolnie gtkterm i ustawiajac takie same parametry widze ze na uC wszystko dziala tak jak trzeba. Gdzie moze lezec problem? Dostepy, zajety port? Dodam ze uzywam python3 oraz ubuntu. EDIT: Dorzucilem print(response) i sprawdzilem co dostaje wedlug skryptu. Jest to: b' '. Jesli wcisne przycisk na uC to dostaje b'X'. Z czego wynika taki typ otrzymanych danych? EDIT 2: Ok. Rozwiazalem uzywajac funkcji response.decode('utf-8'). Troche wyskoczylem z tym pytaniem, bo nie zman pythona, ale sobie poradzilem 🙂Temat do zamkniecia/usuniecia Edytowano Wrzesień 4, 2018 przez steeams 2 Cytuj Link do komentarza Share on other sites More sharing options...
Nawyk Wrzesień 4, 2018 Udostępnij Wrzesień 4, 2018 Oby więcej takich tematów na forum 😉 Cytuj Link do komentarza Share on other sites More sharing options...
deshipu Wrzesień 4, 2018 Udostępnij Wrzesień 4, 2018 Zamiast kodować z bajtów do stringa, możesz też po prostu porównywać z bajtami, czyli na przykład z b'X' zamiast z 'X'. Cytuj Link do komentarza Share on other sites More sharing options...
Zbig Maj 25, 2021 Udostępnij Maj 25, 2021 Dzień dobry! Mam podobny problem z wykrywaniem odebranych znaków w micropythonie. Fragment kodu: uart0 = machine.UART(0, 9600, parity=None, stop=1, bits=8, rx=rxPin, tx=txPin) rec_buffer = [] global cmd_received cmd_received = false while True: if uart0.any() >0: rec_buffer = uart0.read(9) print(rec_buffer) if rec_buffer[0] == b'@': cmd_received = True print ("@ received") Problem w tym, że instrukcja if rec_buffer[0] == b'@': wydaje się nie działać, bo flaga cmd_received nie jest ustawiana, chociaż print(rec_buffer) wyświetla dokładnie b'@'. Kolega steeams sugerował użycie funkcji response.decode('utf-8') - jak to zastosować w moim konkretnym przypadku? I jak rozpoznać więcej charakterystycznych znaków w odebranej ramce (chodzi o zaadresowanie konkretnego odbiorcy wiadomości)? BTW. czytanie 9 znaków jest trochę "na wyrost", ale nie ma tu większego znaczenia. Uczę się "używać" Micropythona na RPi Pico i korzystam ze środowiska Thonny. Pozdrawiam, Zbig Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
Zbig Maj 28, 2021 Udostępnij Maj 28, 2021 Dzień dobry! Znalazłem rozwiązanie, temat można zamknąć. Pozdrawiam, Zbig Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!