Помогите написать скетч с использованием библиотеки IRremote.
- Войдите на сайт для отправки комментариев
Чт, 18/07/2019 - 01:37
Moderator : пожалуйста, вставьте код правильно - http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
Каким-то образом, после нажатия определенных комбинаций на пульте, мне нужно чтоб микроконтроллер запомнил четыре кнопки нажатые после, нажатия этой комбинации.
Вставьте код согласно правилам форума.
Переработайте логику работы скетча. Используйте два флага для определения комбинации нажатых кнопок, первый для первой комбинации, второй - для второй комбинации. Если комбинация не верна - сбросить флаг. Сейчас внутреннее условие у вас никогда не выполнится.
boolean ik_flag = false; #include <IRremote.h> IRrecv irrecv(2); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value,HEX); if (ik_flag == true && results.value == 0xFFB04F ) { // с помощью этой конструкции, при комбинации нажатий определеных кнопок на пульте должна выполнятся задуманная мной программа /* Serial.println("начало работы программы"); // чтоб я видел что программа работает int i=0; // int aray[4]; // while (i<4) { // здесь должна быть программа которая запоминает четыре кнопки на пульте, нужных мне кнопки. if (irrecv.decode(&results) { // ------- второй раз эта конструкция не работает, я не знаю как записать эти кнопки (а точнее коды этих кнопок) в память микроконтроллера aray[i] = results.value; // irrecv.resume(); // } // i++; // } // */ } else{ if( results.value == 0xFF6897 ) {ik_flag = true;} else {ik_flag = false;} } // вторая часть конструкции irrecv.resume(); } }чтоб было понятнее что я вообще пытаюсь сделать: должно получится что то типа самопрограммируемого робота или машинки которая будет управлятся с помощью ик пульта. запрограмированной комбинации кнопок, будет включатся программа которая будет запоминать первые четыре кнопки в переменные или массив, с помощью этих переменных, коды будут подставленны в определенные участки кода которые уже и будут определять что будет выполнятся при нажатии клавиши на ик пульте. Короче говоря, я хочу чтоб в нужный момент я мог менять кнопки управления, это даст возможность спользовать любой попавшийся под руку пульт. А вообще это больше из интереса. Но мне нехватает знаний, в особенности знаний как работает эта библеотека, в интернете ничего толкового я не нашел.
Вставьте код согласно правилам форума.
Переработайте логику работы скетча. Используйте два флага для определения комбинации нажатых кнопок, первый для первой комбинации, второй - для второй комбинации. Если комбинация не верна - сбросить флаг. Сейчас внутреннее условие у вас никогда не выполнится.
не 2 а несколько (смотря сколько нажатий у него в комбинации)!!!!
а так ваще поддерживаю
Вставьте код согласно правилам форума.
Переработайте логику работы скетча. Используйте два флага для определения комбинации нажатых кнопок, первый для первой комбинации, второй - для второй комбинации. Если комбинация не верна - сбросить флаг. Сейчас внутреннее условие у вас никогда не выполнится.
boolean ik_flag = false; boolean ik_flag2 = false; #include <IRremote.h> IRrecv irrecv(2); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value,HEX); if (results.value == 0xFF6897) {ik_flag = true; } else { if (ik_flag == true && results.value == 0xFFB04F ) {ik_flag2 = true;} else { ik_flag = false; ik_flag2 = false; } } irrecv.resume(); } }написанно согласно вашим указанием, огромное спасибо за наставление, щяс осталось придумать как записать шифры кнопок в память мк, но я думаю, надеюсь, с этим проблем не возникнет! еще раз спасибо
Друзья, у меня появилась новая проблемма. Я новичек в этом деле и возможно это вам покажется глупостью, но я никак не могу разобратся с этим.
Проблемма в том что в массив идет запись одних чисел, а при выводе значений ячеек массива оказывается что записаны совсем другие
вот скетч
boolean scikl_flag = false; boolean ik_flag = false; boolean ik_flag2 = false; int i = -2; int aray[4]; #include <IRremote.h> IRrecv irrecv(2); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); } void loop() { if (irrecv.decode(&results)) { //begin // этот кусок кода дает возможность после нажатия комбинации двух клавишь на пульте, записывать четыре шифра кнопок // для дальнейшего самопрограммирования проэкта if (results.value == 0xFF6897) {ik_flag = true; } else { if (ik_flag == true && results.value == 0xFFB04F ) {ik_flag2 = true;} else { ik_flag = false; ik_flag2 = false; } } if (ik_flag == true && ik_flag2 == true) {i=-1;} scikl_flag = true; while (i>=0 && i<4 && scikl_flag == true ) { Serial.print("записалось число "); Serial.println(i); Serial.println(results.value,HEX); aray[i]=results.value; Serial.println(); if (i==4) {i=-1;} scikl_flag = false; } if (i!=-2) {i++;} // end. if (results.value == 0xFF02FD) { for (int k=0; k<4; k++) { Serial.print("Записанное число "); Serial.println(aray[k],HEX); } } вот входные/выходные данныеПо мотивам темы android2202 скетч для кодового замка, с вводом кода с IR пульта:
//////////////////////////////////////////////////////////////////// // Кодовый замок от кладовки где ардуинки лежат, на IR пульте от МТС //////////////////////////////////////////////////////////////////// #include <IRremote.h> IRrecv irrecv(3); decode_results results; unsigned long Kod[] = { 0xA561A35C, 0xA561639C, 0xA561E31C, 0xA561916E, 0xA561FB04}; // секретный <код> [1234] + [ok] void setup() { Serial.begin(9600); irrecv.enableIRIn(); } void loop() { boolean fOk = false; // флаг Ok int nkey = 0; do { while(!irrecv.decode(&results)); // ждём посылки IR Serial.println(results.value, HEX); // смотрим код в мониторе if ( results.value == 0xFFFFFFFF) // длинное нажатие, повтор { irrecv.resume(); continue; } if ( results.value == Kod[nkey++]) fOk = true; // Ok else { fOk = false; // не Ok irrecv.resume(); break; } irrecv.resume(); } while ( nkey < (sizeof(Kod)/sizeof(Kod[0]))); // размер <кода> if (fOk) { Serial.println("<<< Ok >>>"); // Угадали код - бинго } }Тревожит большое число вызовов irrecv.resume();
Видимо не лезет в int aray[4] числа типа FFA25D ...
В описании вижу:
class decode_results { public: decode_type_t decode_type; // UNKNOWN, NEC, SONY, RC5, ... unsigned int address; // Used by Panasonic & Sharp [16-bits] unsigned long value; // Decoded value [max 32-bits] int bits; // Number of bits in decoded value volatile unsigned int *rawbuf; // Raw intervals in 50uS ticks int rawlen; // Number of records in rawbuf int overflow; // true iff IR raw code too long };Видимо не лезет в int aray[4] числа типа FFA25D ...
В описании вижу:
class decode_results { public: decode_type_t decode_type; // UNKNOWN, NEC, SONY, RC5, ... unsigned int address; // Used by Panasonic & Sharp [16-bits] unsigned long value; // Decoded value [max 32-bits] int bits; // Number of bits in decoded value volatile unsigned int *rawbuf; // Raw intervals in 50uS ticks int rawlen; // Number of records in rawbuf int overflow; // true iff IR raw code too long };Огромное спасибо, поставил unsigned long все работает
не 2 а несколько (смотря сколько нажатий у него в комбинации)!!!!
а так ваще поддерживаю
Для данной задачи даже если усложнить комбинации двух флагов «за глаза».
Огромное спасибо, поставил unsigned long все работает
это самый приятный момент на форумах - что вопрошающему помогли и он понял как именно помогли))) Удачи!