ПДУ с протоколом RC5 для начинающего

uaruar
Offline
Зарегистрирован: 10.12.2014

Добрый день!Неоходима помощь начинающему.Приобрел Arduino Mega 2560, первоначальные шаги со светодиодами изучил. После решил сделать включение и выключение УНЧ с ПДУ и другими функциями. Со скетчем IRremote насколько смог разобрался, считал код кнопки Power с ПДУ от т/в «Орион» (работает по протоколу NEC),  вообщем вкл. выкл. заработало на макетке. Далее специально купил пульт для УНЧ а у него как оказался протокол RC5. Код IRremote с данного ПДУ считывается, вставляю его в скетч и пробую вкл. выкл., программка работает, но вкл. и выкл., происходит со второго нажатия кнопки Power. Перепробовал все имеющиеся ПДУ и картина получается аналогичная. Протокол NEC работает а RC5 – не так как надо. Пытался в Инете найти информацию – вроде есть, но так все заумно изложено и не для новичков это точно.  Куда «копать»не понятно. Окажите помощь, думаю, данная тема будет интересна многим начинающим.

 За ранее Всем благодарен!

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012
NEC: Carrier frequency of 38kHz
RC5: Carrier frequency of 36kHz
Это можно посмотреть здесь: http://www.sbprojects.com/knowledge/ir/index.php
 
А какой скетч работает, какой не работает, например, какие коды, нам, не телепатам - неведомо, потому и можно только поиграть в Что Где Когда.
Хотя может найдутся телепаты?
 
uaruar
Offline
Зарегистрирован: 10.12.2014

ИК – приемники использовал для NEC на 38 кГц, RC5 на 36 кГц. Простой заменой в макетке. Скетч для считывания кода кнопок использовал:

* IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv

 * An IR detector/demodulator must be connected to the input RECV_PIN.

 * Version 0.1 July, 2009

 * Copyright 2009 Ken Shirriff

 * http://arcfn.com

 */

#include <IRremote.h>

 int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

 decode_results results;

 void setup()

{

  Serial.begin(9600);

  irrecv.enableIRIn(); // Start the receiver

}

void loop() {

  if (irrecv.decode(&results)) {

    Serial.println(results.value, HEX);

    irrecv.resume(); // Receive the next value

  }

}

 Скетч для вкл. выкл.

#include <IRremote.h> // это скачанная библиотека

 int RECV_PIN = 13; //вход ИК приемника

 IRrecv irrecv(RECV_PIN);

 decode_results results;

 int a=0; // переменная переключения режима, при нажатии кнопки она принимает значение +1

 void setup()

 {

 irrecv.enableIRIn(); // включить приемник

 pinMode(11, OUTPUT);

}

 void loop() {

if (irrecv.decode(&results)) {

 delay(300); // задержка перед выполнением определения кнопок, чтобы избежать быстрое двойное нажатие

 if (results.value == 0xC50C30BA) {a=a+1;} // обработка нажитя клавиши, здесь переменная принимает значение +1

 // начинаем включать светодиод на пинах

 if (a==1){digitalWrite(11, HIGH);} else {digitalWrite(11, LOW); a=0;} // действие после нажатия кнопки, если переменная стала равна 1 то

 { //

 delay(20); //пауза между повторами //

 } //

 irrecv.resume(); //

 }

 }

С уважением!

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Мне интересно, зачем пишите код a = a + 1, вместо a = 1.
Нажмете 2 раза или пульт выдаст 2 кода и получите a = 2.
Зачем? Ответ мне не нужен, нозачем.!

uaruar
Offline
Зарегистрирован: 10.12.2014

...Мне интересно, зачем пишите код a = a + 1, вместо a = 1. Нажмете 2 раза или пульт выдаст 2 кода и получите a = 2...

Так не получается - происходит вкл. от пульта а выкл. нет (одна кнопка Power).

Возможно, до конца не разобрался (первая неделя в освоении). Если не правильно укажите как необходимо.

С уважением!

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Посмотрите разницу для разных пультов при долгом нажатии, NEC не повторяет код, а RC-5 повторяет. Это приведёт к тому, что скетч будет работать по разному для разных пультов. Теперь скетч, для NEC он будет работать корректно, а для RC-5 будет переключать питание пока нажата кнопка на пульте. Как правильно исправить скетч, надо смотреть отдельно. Конечно можно нажимать коротко, но если как нибудь кто то сядет на пульт, будет плохо устройству, которое управляется.