Ик приемник
- Войдите на сайт для отправки комментариев
Ср, 27/03/2019 - 22:47
Начал разбираться с ик приемником.Пытаюсь выполнить небольшой проект по зажиганию ламп с пульта.Вроде работает, но возникает одна проблема.При зажатии кнопки появляется число, которое мешает выполнению запуска реле модуля.И я к сожалению не знаю как сделать так что бы она перестало выводиться или хотя бы выполняло такую же функцию как число предшествующие перед ним.Незнаю вообще возможно ли это или может есть какие-то лазейки.Код внизу
#include "IRremote.h"
int nr = 0;
int r = 0;
IRrecv irrecv(A0);
decode_results results;
void setup() {
// Serial.begin(9600);
irrecv.enableIRIn();
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
}
void loop() {
if ( irrecv.decode( &results )){
// Serial.println( results.value/10000,DEC);
r=results.value/10000;
irrecv.resume();
if (r == 1671) {
digitalWrite(5, LOW);
irrecv.resume();
if ((r == 1671)and(nr==1671)) {
digitalWrite(5, HIGH);
irrecv.resume();
r=332471435;
}}
if (r == 1674) {
digitalWrite(4, LOW);
irrecv.resume();
if ((r == 1674)and(nr==1674)) {
digitalWrite(4, HIGH);
irrecv.resume();
r=32471435;
}}
nr = r;
}
}
По-моему, Вы пошли не тем путём!
Есть такой скетч:
#include "IRLremote.h" #define pinIR 2 // only D2 CHashIR IRLremote; void setup() { Serial.begin(9600); Serial.println(F("Startup")); if (!IRLremote.begin(pinIR)) Serial.println(F("You did not choose a valid pin.")); } void loop() { // Serial.println("0x"); if (IRLremote.available()) { auto data = IRLremote.read(); if (data.command != 292984781) { Serial.print("0x"); Serial.println(data.command, HEX); } } }Работает только с входом D2 !! проверял.
Можно считать значения кнопок своего пульта примерно в таком виде:
Собирабаюсь сделать такой 3-х канальный автомат.
Логика будет примерно такая: кнопки 1, 2, 3 - вкл. и откл. соответствующий канал. Кнопка: 0 - выключает сразу все каналы. После реализации отпишусь.
int занимает 2 байта памяти, и может хранить числа от -32 768 до 32 767
А у Вас:
36r=32471435;Изучайте мат.часть!
Тему предлагаю перенести в песочницу!!
Спасибо.Попробовал все заработало.
Очень хороший способ мусора не выводит,но как же тогда сделать так что бы если значение пришло дважды, то выключалось.Даже способа придумать не могу.
А я придумал (вернее переделал цветомузыкальный счетч одного известного Ардуинщика):
#include "IRLremote.h" // бибилиотека #define pinIR 2 // only D2 - пин ИК приёмника CHashIR IRLremote; uint32_t IRdata; #define MODE 0 // режим при запуске // ----- настройка ИК пульта #define REMOTE_TYPE 3 // 0 - без пульта, 1 - пульт от WAVGAT, 2 - пульт от KEYES, 3 - кастомный пульт // ----- КНОПКИ meanta ПУЛЬТА ----- #if REMOTE_TYPE == 3 #define BUTT_UP 0xF39EEBAD // not worked #define BUTT_DOWN 0x297C76AD // not worked #define BUTT_LEFT 0xF352BCAD // not worked #define BUTT_RIGHT 0x65CF91AD // not worked #define BUTT_OK 0xD53818AD // not worked #define BUTT_1 0xF56DE0E1 #define BUTT_2 0x8C2EE3E1 #define BUTT_3 0x891A1EE1 #define BUTT_4 0x2E6030E1 #define BUTT_5 0x2B4B6BE1 #define BUTT_6 0xC20C6EE1 #define BUTT_7 0xBEF7A9E1 #define BUTT_8 0x4CC703E1 #define BUTT_9 0x49B23EE1 #define BUTT_0 0xF882A5E1 #define BUTT_EPG 0x396104AD // not worked #define BUTT_INFO 0xB0C193E1 // # #endif // ----- КНОПКИ ПУЛЬТА WAVGAT ----- #if REMOTE_TYPE == 1 #define BUTT_UP 0xF39EEBAD #define BUTT_DOWN 0xC089F6AD #define BUTT_LEFT 0xE25410AD #define BUTT_RIGHT 0x14CE54AD #define BUTT_OK 0x297C76AD #define BUTT_1 0x4E5BA3AD #define BUTT_2 0xE51CA6AD #define BUTT_3 0xE207E1AD #define BUTT_4 0x517068AD #define BUTT_5 0x1B92DDAD #define BUTT_6 0xAC2A56AD #define BUTT_7 0x5484B6AD #define BUTT_8 0xD22353AD #define BUTT_9 0xDF3F4BAD #define BUTT_0 0xF08A26AD #define BUTT_STAR 0x68E456AD #define BUTT_HASH 0x151CD6AD #endif // ----- КНОПКИ ПУЛЬТА KEYES ----- #if REMOTE_TYPE == 2 #define BUTT_UP 0xE51CA6AD #define BUTT_DOWN 0xD22353AD #define BUTT_LEFT 0x517068AD #define BUTT_RIGHT 0xAC2A56AD #define BUTT_OK 0x1B92DDAD #define BUTT_1 0x68E456AD #define BUTT_2 0xF08A26AD #define BUTT_3 0x151CD6AD #define BUTT_4 0x18319BAD #define BUTT_5 0xF39EEBAD #define BUTT_6 0x4AABDFAD #define BUTT_7 0xE25410AD #define BUTT_8 0x297C76AD #define BUTT_9 0x14CE54AD #define BUTT_0 0xC089F6AD #define BUTT_STAR 0xAF3F1BAD #define BUTT_HASH 0x38379AD #endif #define MODE_AMOUNT 3 // количество каналов boolean Flag_C1, Flag_C2, Flag_C3; byte C1 = 4; //пин канала №1 byte C2 = 5; //пин канала №2 byte C3 = 6; //пин канала №3 volatile boolean ir_flag; byte this_mode = MODE; void setup() { pinMode(C1, OUTPUT); pinMode(C2, OUTPUT); pinMode(C3, OUTPUT); Serial.begin(9600); Serial.println(F("Startup")); IRLremote.begin(pinIR); } void loop() { #if REMOTE_TYPE != 0 if (IRLremote.available()) { auto data = IRLremote.read(); IRdata = data.command; ir_flag = true; Serial.print("0x"); Serial.println(data.command, HEX); } if (ir_flag) { // если данные пришли switch (IRdata) { // режимы case BUTT_1: this_mode = 1; Flag_C1 = ! Flag_C1; chan_01(); break; case BUTT_2: this_mode = 2; Flag_C2 = ! Flag_C2; chan_02(); break; case BUTT_3: this_mode = 3; Flag_C3 = ! Flag_C3; chan_03(); break; case BUTT_4: this_mode = 4; break; case BUTT_5: this_mode = 5; break; case BUTT_6: this_mode = 6; break; case BUTT_7: this_mode = 7; break; case BUTT_8: this_mode = 8; break; case BUTT_9: this_mode = 9; break; case BUTT_0: { this_mode = 0; Flag_C1 = LOW; chan_01(); Flag_C2 = LOW; chan_02(); Flag_C3 = LOW; chan_03(); } break; } IRdata = 0; // для ожидания следующего нажатия !!! #endif // Serial.println(this_mode); delay(10); } ir_flag != true; } void chan_01() { // переключение кан.1 digitalWrite(C1, Flag_C1); Serial.print(C1); Serial.println(Flag_C1); } void chan_02() { // переключение кан.2 digitalWrite(C2, Flag_C2); Serial.print(C2); Serial.println(Flag_C2); } void chan_03() { // переключение кан.3 digitalWrite(C3, Flag_C3); Serial.print(C3); Serial.println(Flag_C3); } // Sketch uses 3768 bytes (12%) of program storage space. Maximum is 30720 bytes. // Global variables use 218 bytes (10%) of dynamic memory, leaving 1830 bytes for local variables. Maximum is 2048 bytes.Есть возможность использовать другие пульты и легко добавлять новые каналы.
Потом сюда может быть и цветомузыку вставлю дополнительно
Да еще есть маленький вопрос может кто-нибудь знает как конвернтировать переменную типа auto в переменную типа intger?Буда рад если кто-нибудь ответит.
Есть такой скетч:
#include "IRLremote.h" #define pinIR 2 // only D2 CHashIR IRLremote; void setup() { Serial.begin(9600); Serial.println(F("Startup")); if (!IRLremote.begin(pinIR)) Serial.println(F("You did not choose a valid pin.")); } void loop() { // Serial.println("0x"); if (IRLremote.available()) { auto data = IRLremote.read(); if (data.command != 292984781) { Serial.print("0x"); Serial.println(data.command, HEX); } } }Работает только с входом D2 !! проверял.
адрес библиотеки можно, которые нашёл не работают.
что за число 292984781 - ? в строке 16.
Я вроде сделал свой проект с лампами если кому интресно скетч внизу.
#include "IRLremote.h" #define pinIR 2 bool i = true; bool j = false; bool g = true; bool h = false; CHashIR IRLremote; void setup() { Serial.begin(9600); pinMode(5,OUTPUT); pinMode(4,OUTPUT); IRLremote.begin(pinIR); digitalWrite(5,HIGH); digitalWrite(4,HIGH); } void loop() { if (IRLremote.available()) { auto data = IRLremote.read(); if (data.command != 292984781) {Serial.print("0x"); Serial.println(data.command, HEX);} //----------------------------------------------------------------------- if((data.command == 0xF39EEBAD)and(i==true)) { digitalWrite(5, LOW); i = false; j = true; data.command = 0; } if((data.command == 0xF39EEBAD)and(j==true)) {digitalWrite(5, HIGH); i = true; j = false; } //----------------------------------------------------------------------- if((data.command == 0x18319BAD)and(h==true)) { digitalWrite(4, LOW); h = false; g = true; data.command = 0; } if((data.command == 0x18319BAD)and(g==true)) {digitalWrite(4, HIGH); h = true; g = false; } //----------------------------------------------------------------------- if(data.command == 0x4AABDFAD) { digitalWrite(5, HIGH); digitalWrite(4, HIGH);} }//1 иф }//loopЛогика такова 1 нажатие включение 2 нажатие выклюение.Кнопка 3 выключение всех ламп.Работает на 2 реле
адрес библиотеки можно, которые нашёл не работают.
я скачивал здесь. Зелёная кнопка "Скачать архив".
Да еще есть маленький вопрос может кто-нибудь знает как конвернтировать переменную типа auto в переменную типа intger?Буда рад если кто-нибудь ответит.
Полистал книжку "C++ 3а 21 день" - нет таких типов!
Да еще есть маленький вопрос может кто-нибудь знает как конвернтировать переменную типа auto в переменную типа intger?Буда рад если кто-нибудь ответит.
Полистал книжку "C++ 3а 21 день" - нет таких типов!
Хорошая или нет не знаю, но явно старинная. auto из свежего.
Хорошая или нет не знаю, но явно старинная. auto из свежего.
Книжка толстая:
Здешний сервер не даёт мне закачать фотки!
yBepena xopocก knigka. https://www.cprogramming.com/c++11/c++11-auto-decltype-return-value-afte...
yBepena xopocก knigka. https://www.cprogramming.com/c++11/c++11-auto-decltype-return-value-afte...
Есть такой скетч:
#include "IRLremote.h" #define pinIR 2 // only D2 CHashIR IRLremote; void setup() { Serial.begin(9600); Serial.println(F("Startup")); if (!IRLremote.begin(pinIR)) Serial.println(F("You did not choose a valid pin.")); } void loop() { // Serial.println("0x"); if (IRLremote.available()) { auto data = IRLremote.read(); if (data.command != 292984781) { Serial.print("0x"); Serial.println(data.command, HEX); } } }Работает только с входом D2 !! проверял.
адрес библиотеки можно, которые нашёл не работают.
что за число 292984781 - ? в строке 16.
Переведите его в HEX и погуглите.
Хороший вопрос.Так чсе таки что это за число
neimeet znacenia B sketch ot Bac prosto knopka znacenia ir kontrol.
что за число 292984781 - ? в строке 16.
Хороший вопрос.Так чсе таки что это за число
Занялся опять пультами и вот теперь могу ответить!
Это число выдаёт китайский WAVGAT пульт, вместе с полезной информацией, при нажатии на любую кнопку. Часто мешает. Снижает быстродействие программы!