Skocz do zawartości

Raspberry pico python uart protocol


Pomocna odpowiedź


from machine import Pin, UART
import utime

keyb = bytearray(4)
mouse = bytearray(7)

UART1 = UART(1, baudrate=115200, bits=8, parity=None, stop=1)
button1 = machine.Pin(7, machine.Pin.IN, machine.Pin.PULL_UP)
button2 = machine.Pin(6, machine.Pin.IN, machine.Pin.PULL_UP)
keyb = [0xFE,0x04,0x00,0x00,0x00]
#mouse = [0XFD,0x05,0x02,0x00,0x00]
while True:
    if button1.value() == 1:
     
     keyb[3]=(0x00)
     
     
    elif button1.value() == 0:
     keyb[3]=(0x1b)

  
    if button2.value() == 1:
     keyb[4]=(0x00)
    
    elif button2.value() == 0:
     keyb[4]=(0x1d)
    
    UART1.write(bytes(keyb))
    utime.sleep(0.09)
    
    
    #print(bytes(keyb))

Mam taki problem, chciałbym wysłać do buforu tablice hexów po naciśnięciu przycisku dany element w tablicy jest nadpisany . Nie znalazłem nic o buforze protokołu UART w sieci dlatego powstał taki kod, który podmienia jeden element po naciśnięciu przycisku i wysyła poprawnie raport, ale drugi if nie działa i powoduje nadpisanie całego raportu i reset połączenia.  Nie wiem czy dla tak prostej operacji muszę zagłębić się w topologię fifo i DMA ? 

Edytowano przez rafalmrok
Link do komentarza
Share on other sites

>>> keyb = bytearray(4)
>>> keyb[3] = 0x00
>>> keyb[4] = 0x00
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    keyb[4] = 0x00
IndexError: bytearray index out of range
>>> 

To ja zostawię takie coś i pozwolę ci się domyśleć co poszło nie tak 🙂

Link do komentarza
Share on other sites

A u mnie działa...

>>> keyb = bytearray(4)
>>> keyb = [0xFE,0x04,0x00,0x00,0x00]
>>> keyb[3] = 0x11
>>> keyb[4] = 0x22
>>> print(bytes(keyb))
b'\xfe\x04\x00\x11"'

To ja zostawię takie coś i pozwolę się koledze wątkotwórcy domyśleć dlaczego to działa i co jest nie tak 🙂

 

Link do komentarza
Share on other sites

if button1.value() == 0:
     keyb[3]=(0x1b)

    elif button2.value() == 0:
     keyb[4]=(0x1d)
    else:
     keyb[3]=(0x00)
     keyb[4]=(0x00)
    UART1.write(bytes(keyb))
    utime.sleep(0.09)
    
    
    print(bytes(keyb))
       

działa! dzięki nie wiem czy wam o to chodziło ale dodałem else: jeszcze zostało dodanie drugiego raportu mouse i pico będzie mistrzem bo  w C na arduino potrafiłem zapisac jedną funkcjonalnośc w trybie COMBO bluetooh HID. Dodanie drugiego raportu zawsze kończyło się niepowodzeniem.  

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

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

Dodanie drugiego raportu poszło gładko, PICO się zwróciło, mam keyboard i mysz z jednego bluetooth.  PICO mistrz, ale spróbuje napisać to na arduino, bo sobie wyjaśniłem parę rzeczy, myślę że z gamepadem też mi pujdzie gładko. Pozdro.

Link do komentarza
Share on other sites

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!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.