logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Dekodowanie wartości NEC ADDR, CMD z pilota IR na Arduino: konwersja na 32-bit

Gelip 06 Lis 2021 21:18 669 7
REKLAMA
  • #1 19694031
    Gelip
    Poziom 36  
    Posty: 5255
    Pomógł: 324
    Ocena: 615
    Jak zmienić kod aby dane wyjściowe były w Serial Monitor zamiast na LCD. Dekoder nie wymaga biblioteki IRRemote tylko wykorzystuje przerwanie INT0 na pinie D2 Arduino:
    Arduino NEC IR remote control decoder

    Wersja LCD:
    Spoiler:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Dodano po 41 [minuty]:

    No dobra, poprawiłem ale to nie są wartości 8-bit HEX NEC ADDR, CMD tylko rozbity kod 32 bit integer na XXXX XX XX. Myślałem iż on dekoduje wartości ADDR i CMD ale jednak nie. Poprawiłem szkic aby wyświetlał po prostu jednym ciągiem 32-bit integer:

    32-bit int: 807F28D7

    zamiast:
    Address:0x807F
    Com:0x28 In:0xD7


    Spoiler:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Dodano po 40 [minuty]:

    P.S. Znalazłem szkic, który dekoduje wartości NEC ADDR i CMD wciśniętego przycisku pilota ale nie konwertuje na 32-bit. Trochę poprawiłem aby wyświetlał ADDR: CMD: zamiast IR BURST:
    Źródło: Event-driven implementation of the NEC IR remote control protocol
    Spoiler:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Nie wiem jak konwertować między 32-bit unsigned a ADDR, CMD ale można używać po prostu dwóch szkiców zamiennie do jednego i drugiego. Odbiornik IR np. TSOP 1736 trzeba podłączyć do pinu D2 Arduino w obu szkicach. Oba szkice nie wymagają biblioteki IRRemote.
  • REKLAMA
  • #2 19694355
    mpier
    Poziom 29  
    Posty: 818
    Pomógł: 153
    Ocena: 141
    Witam,
    Przecież Ci napisałem w przednim temacie, że ten KOD to jest właśnie komenda i adres tylko napisane od tyłu. Przykład: adres, komenda. Kod NEC, zapisany jak wyżyj: serda ~serda adnemok ~adnemok.

    Jeśli ma 16 bitów, to będzie: sedra_igułd adnemok ~adnemok.

    Tak działa biblioteka której używasz.
  • REKLAMA
  • #3 19694398
    Gelip
    Poziom 36  
    Posty: 5255
    Pomógł: 324
    Ocena: 615
    @mpier
    Kolego, nie pomagasz wcale ani w tamtym ani w tym temacie. Piszesz mi w kółko to samo - jakieś ogólniki jak jest zbudowany kod w protokole NEC - ADDR, ~ADDR, CMD, ~CMD

    Po pierwsze w tym temacie są 2 szkice, które nie używają biblioteki IRRemote tylko dekodują kod za pomocą przerwania INT0 z pinu D2 Arduino i pomiaru czasu więc nie wiem o jakiej bibliotece tutaj wspominasz.

    Kod 807F28D7 - wiem dlaczego drugie wartości to 7F i D7 bo to negacje pierwszych (80 NOT=7F i 28 NOT=D7) - można to obliczyć choćby w kalkulatorze Windows w trybie Hex, Byte

    Wiem iż 807F to adres a 28D7 polecenie ale nie jest w formacie NEC 8-bit ADDR, CMD bo prawidlowe wartości dla tego przycisku to dwa bajty ADDR=01, CMD=14

    Chcę wiedzieć jak ręcznie obliczyć ADDR, CMD mając tylko dane np. z Internetu 807F28D7 - zakładamy w tym momencie iż nie mam Arduino Uno ani IDE, żadnego nadajnika ani odbiornika IR tylko kalkulator.
  • REKLAMA
  • Pomocny post
    #4 19694430
    mpier
    Poziom 29  
    Posty: 818
    Pomógł: 153
    Ocena: 141
    @Gelip, bity w bajtach masz, jak Ci wcześniej napisałem, w odwrotnej kolejności. To co odbierasz/wysyłasz to nie jest "komenda" tylko "adnemok".
    Konkretnie:
    Bajt 0x80 (0b10000000) zamieniasz na (0b00000001) co daje 0x01.
    Bajt 0x28 (0b00101000) od tyłu to (0b00010100) co daje właśnie 0x14.

    Wszystko dlatego, że Twoje programy wysyłają bity od MSB do LSB, a pilot odwrotnie.
  • #5 19694668
    Gelip
    Poziom 36  
    Posty: 5255
    Pomógł: 324
    Ocena: 615
    @mpier
    O teraz to pomogłeś. Jakbyś jeszcze mógł polecić jakiś konwerter albo jak w kalkulatorze to obliczyć szybko bo po pierwsze zamiana hex na bin obcina niepotrzebne zera z przodu co utrudnia ręczną konwersję a opcja NOT to nie jest lustrzane odbicie tylko przeciwności 0 i 1

    W sumie to ta wiedza by mi już wystarczyła ale lubię mieć wszystko tip/top. Jakiś automat by się przydał do konwersji bo ręcznie można się pomylić.
  • REKLAMA
  • #6 19695246
    mpier
    Poziom 29  
    Posty: 818
    Pomógł: 153
    Ocena: 141
    Nie znam automatu, najprościej (nie najlepiej) zrobić tak:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    Nadawanie podobnie: składasz dane do wysłania (~CMD CMD ~ADDR ADDR) i odwracasz, albo najpierw odwracasz po jednym bajcie i składasz, np. tak: cmd = 0x14, cmd = odwr32(cmd, 8); kod_do_wysłania |= (uint32_t)(cmd << 8) itd.
  • #7 19731683
    Gelip
    Poziom 36  
    Posty: 5255
    Pomógł: 324
    Ocena: 615
    mpier napisał:
    Nie znam automatu, najprościej (nie najlepiej) zrobić tak:

    I co zrobić z tym kodem? Co to ma być? Aplikacja .exe ??? Podaj pełny kod dla Arduino.

    P.S. Już mam konwerter HEX -> odwrócony HEX. Mam kilka wersji w BASIC'u na ZX Spectrum:
    Konwerter HEX na odwrotność
    ale ta jest najkrótsza:
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod

    Dekodowanie wartości NEC ADDR, CMD z pilota IR na Arduino: konwersja na 32-bit
  • #8 19732747
    mpier
    Poziom 29  
    Posty: 818
    Pomógł: 153
    Ocena: 141
    To był "pełny kod dla Arduino". Niezbyt optymalny, ale dość "łopatologiczny". Oczywiście możesz użyć na PC tak samo. Trudno mi napisać coś konkretnego, bo nie wiem co dokładnie chcesz osiągnąć. Chodzi mi o efekt końcowy.

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik poszukiwał sposobu na modyfikację kodu Arduino, aby dane wyjściowe z dekodera pilota IR były wyświetlane w Serial Monitor zamiast na LCD. W trakcie dyskusji wyjaśniono, że wartości ADDR i CMD w protokole NEC są odwrócone, co prowadzi do nieporozumień w interpretacji danych. Użytkownik zrozumiał, że wartości 32-bitowe, takie jak 807F28D7, można przekształcić na 8-bitowe ADDR i CMD poprzez negację i odwrócenie bitów. Podano również przykłady kodu do konwersji oraz wskazówki dotyczące ręcznego obliczania wartości. Użytkownik poszukiwał również automatycznego narzędzia do konwersji, ale ostatecznie uzyskał pomoc w zakresie implementacji kodu w Arduino.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA