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

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...