Arduino Polska Forum

Pełna wersja: IR odczyt kodów z pilota i sterowanie silnikiem DC- problem
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Witajcie.

Jestem początkującym "zawodnikiem" jeśli chodzi o arduino. Tak naprawdę jest to mój drugi projekt z wykorzystaniem płytki. Do tej pory korzystałem z gotowych kodów gdzie modyfikowałem je na własne potrzeby i potrzeby projektu ( silniki servo). Tym razem mierzę się ze sterowaniem silnikiem DC i kontrolą go za pomocą pilota IR. Korzystam z silnika DC sterownika ULN2003, Odbiornika IR VS1838B oraz Arduino Nano. po spięciu wszystkiego użyłem kodu 
Kod:
#include <IRremote.h>

int RECV_PIN = 6;

IRrecv irrecv(RECV_PIN);

decode_results  results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); 
}

void loop() {
  if (irrecv.decode(&results))  {
  
    Serial.println(results.value, HEX);
    irrecv.resume();
  }
}
I tu ok do tego momentu jakby wszystko gra. Następnie odpaliłem monitor portu szeregowego żeby zczytać kody z przycisków pilota... Kody faktycznie się wyświetlają ale... Pilot od dvd - każde naciśnięcie tego samego przycisku generuje inny kod w monitorze... drugi pilot od po radia samochodowego (podobny do pilotów od sterowania ledami) - każdy przycisk wyrzuca ten sam kod przycisku... No lekko zbaraniałem... O ile przy pilotach od radia i ledów sytuacja jest taka sama i tu może być coś nie tak z pilotami o tyle pilot DVD i ten sam przycisk daje różne kody - co jest nielogiczne...
Wywalałem również z kodu wartość "HEX" żeby nie wyświetlał wartości szesnastkowo - nic to nie zmienia. 

Może ktoś coś podpowiedzieć co robię nie tak ?
(21-03-2024, 08:27)dRoooopED napisał(a): [ -> ]Witajcie.

Pilot od dvd - każde naciśnięcie tego samego przycisku generuje inny kod w monitorze... drugi pilot od po radia samochodowego (podobny do pilotów od sterowania ledami) - każdy przycisk wyrzuca ten sam kod przycisku... No lekko zbaraniałem... O ile przy pilotach od radia i ledów sytuacja jest taka sama i tu może być coś nie tak z pilotami o tyle pilot DVD i ten sam przycisk daje różne kody - co jest nielogiczne...
Wywalałem również z kodu wartość "HEX" żeby nie wyświetlał wartości szesnastkowo - nic to nie zmienia. 

Może ktoś coś podpowiedzieć co robię nie tak ?

Piloty mogą w kodzie zaszywać licznik - by rozróżnić kolejne naciśnięcia klawisza od powtarzania jednego klawisza.
Wtedy część jest stałym kodem a część się zmienia.
Możesz wrzucić taką serie kodów (najlepiej w HEX).
(21-03-2024, 14:33)oscarX napisał(a): [ -> ]
(21-03-2024, 08:27)dRoooopED napisał(a): [ -> ]Witajcie.

Pilot od dvd - każde naciśnięcie tego samego przycisku generuje inny kod w monitorze... drugi pilot od po radia samochodowego (podobny do pilotów od sterowania ledami) - każdy przycisk wyrzuca ten sam kod przycisku... No lekko zbaraniałem... O ile przy pilotach od radia i ledów sytuacja jest taka sama i tu może być coś nie tak z pilotami o tyle pilot DVD i ten sam przycisk daje różne kody - co jest nielogiczne...
Wywalałem również z kodu wartość "HEX" żeby nie wyświetlał wartości szesnastkowo - nic to nie zmienia. 

Może ktoś coś podpowiedzieć co robię nie tak ?

Piloty mogą w kodzie zaszywać licznik - by rozróżnić kolejne naciśnięcia klawisza od powtarzania jednego klawisza.
Wtedy część jest stałym kodem a część się zmienia.
Możesz wrzucić taką serie kodów (najlepiej w HEX).
Ok jak tylko będę w domu (pewnie wieczorem/w nocy będę walczył dalej). A co z samym kodem? Powinno być ok? Może ewentualnie ogarnąć pilot np od radia/tunera domowego? I to sprawdzić... Tak czy siak postaram się coś podesłać jak najszybciej.
Biblioteki mają możliwość dekodowania różnych protokołów IR, np. popularne NEC, RC5, LG, Samsung. Jak nie wiesz jaki to protokół to wgrywasz ogólny kod z rozpoznawaniem protokołu, patrzysz co wypluwa, potem w ostatecznej wersji informujesz w szkicu, jak ma rozumieć przylatujący kod, czyli definiujesz protokół, to wtedy powinien już działać OK.
Popularne chińskie moduły pilota z diodą IR mają raczej wszystkie NEC, jak potrzebujesz wiele pilotów do jednego odbiornika to lepiej zainwestować 20 zł i kupić sobie parę takich samych (na Ali wychodzi 20pln za 5 z wysyłką).
Ten od radia to pewnie też NEC.
Oto kilka kodów w HEX z jednego klawisza pilota DVD:
D8CCF55
906E0E7C
1B8A85E5
7D9CBC71
2DDCDFD
C452A71D
9292A051
Dobra chyba już mam. Daje wartości takie same przy każdym kliknięciu i inne dla wszystkich klawiszy.
Kod:
#include<IRremote.h>

IRrecv IR (2);



void setup() {
IR.enableIRIn();
Serial.begin(9600);
}

void loop() {
if(IR.decode()){
  Serial.println(IR.decodedIRData.decodedRawData,DEC);
  delay(1000);
  IR.resume();
}
}