Пальцами, очевидно - зажимаете две или три кнопки одновременно, получаете зажатую комбинацию кнопок. Вы этого хотели?
Так делайте, в чём проблема? К библиотеке IRremote есть примеры - смотрите, изучайте, дописывайте под ваши нужды.
Ок, к Iskre JS разве нет примеров работы c ИК-сенсором? http://wiki.amperka.ru/робототехника:ir-servo-robot Что мешает взять код, и на его основе сделать?
создайте массив с элементами правильной комбинации, затем по нажатии сравнивайте нажатия поэлементно, не забывая про счетчики и сбросы...
добрый вечер йа только начинающий в этом деле но для Дуни сделал бы таг Код (C++): //создал бы массив с нужной комбинацией нажатия. нажатия последовательные, одновременные не получались на моем пульте int CODE[] = {3,0,9,7 }; int ENTERED_combination[4] ; // массив куда будут попадать ввденные данные //затем создал бы цикл где все проверялось бы Код (C++): while (OPENING_waiting ==1) { if (irrecv.decode(&results)) // если что то пришло на приемниг { Input_signal(); ENTERED_combination[i] =(полученные данные) ; translateIR(); // функция для перевода НЕХ в "нормальные" значения, но можно и в НЕХ оставить i++; // прибавляем 1 что бы записать следующее значение в след ячейку irrecv.resume(); delay(100); } / if (i==4 ) //если набрали 4 сигнала, или сколько там будет нужно { int a =0; //то проверяем совпадают ли данные в масивах . можно было и чрез for но лень было писать if ( CODE[0] == ENTERED_combination[0] && CODE[1] == ENTERED_combination[1] && CODE[2] == ENTERED_combination[2] && CODE[3] == ENTERED_combination[3]) { Serial.println("ZASHIBIS"); //если данные в каждой ячейке совпали то делаем что либо и обнуляем все данные в массиве куда попадают принятые данные i=0; ENTERED_combination[0] = 0; ENTERED_combination[1] = 0; ENTERED_combination[2] = 0; ENTERED_combination[3] = 0; //если данные не совпали то пишем ошибка обнуляем все принятые данные и начинаем сначала else if ( CODE[0] != ENTERED_combination[0] || CODE[1] != ENTERED_combination[1] || CODE[2] != ENTERED_combination[2] || CODE[3] != ENTERED_combination[3]) Serial.println("ERROR"); i=0; //обнуляем идентификатор ячейки массива ENTERED_combination[0] = 0; ENTERED_combination[1] = 0; ENTERED_combination[2] = 0; ENTERED_combination[3] =0; Кот чисто теоретический не компилировлся. написан только для примера
Ну давайте вместе подумаем. У меня что-то получилось, да не то. Код (Javascript): var receiver = require('@amperka/ir-receiver') .connect(P3); var projector = require('@amperka/led').connect(P2); var press = []; //массив, который заполняется при нажатии на кнопки пульта var pass = [378077439, 378126399]; //последовательность кнопок, при которой должна загораться лампочка receiver.on('receive', function(code) { press.push (code);{ //заполнение массива press if (press.length > 2) { press.shift(); //проверка длинны массива press и удаление кода кнопки с конца, если кодов в массиве больше 2 for (var i = 0; i < press.length; i++) { if (press [i] == pass [i]) { projector.turnOn(); //сравнение двух массивов и зажигание лампочки } } } } }); Тут я как-то не правильно сравниваю массивы. Потому как лампочка загорается при условии, что в массиве press имеется два кода и один из них из массива pass. А нужно, чтобы совпадали два и в нужной последовательности. Какие идеи?
В общем, в ходе ковыряния сделал следующие выводы, возможно ошибочные. 1. Обнулять массив с нажатиями кнопок не обязательно. Я сделал так, что массив всегда хранит конкретное число значений, а все, что больше, удаляется с конца. 2. Проверку равенства двух массивов лучше вынести в отдельную функцию, где присваивать флаги false и true. 3. Надо что-то делать с залипанием кнопок. Чуть задержал палец на нажатой кнопке, в массив сразу прилетает два, а то и три одинаковых кода. Для этого в библиотеке для ИК приемника есть обработчик repeat, но мне уже было лень разбираться. В целом получилось у меня вот так, вроде работает Код (Javascript): var receiver = require('@amperka/ir-receiver') .connect(P3); var projector = require('@amperka/led').connect(P2); var press = []; var pass = [378077439, 378126399, 378110079]; function check(a, b) { var i = a.length; if (i != b.length) return false; while (i--) { if (a[i] !== b[i]) return false; } return true; } receiver.on('receive', function(code) { press.push (code); if (press.length > 3) { press.shift(); if (check (press, pass) === true) { projector.toggle(); } } }); Любые замечания, предложения и критика приветствуются.
знаком только со своим пкитайским приемником. там проще если долго держишь нажатой кнопку или нажал несколько кнопок то приходит F#0000. всегда одно и тоже и это значение легко игнорируется в коде. едиственно предположение, сделать для определенной комбинации свой массив типа Код (C++): var pass_1[9] = {3,7,8,0,7,7,4,3,9} var pass_2[9] = {4,3,6,4,5,7,5,6,7} var pass_3[9] = {3,4,5,3,4,3,4,6,7} и потом делать сравнение и проверку по заполнению массива а после уже какое либо действие и последующий сброс. так проще по крайней мере для меня. рад был бы помочь но сам в процессе изучения С++, тут совет гуру нужен) я с залипанием боролся тупо delay(100), как только что то пришло и расшифровалось на приемнике. может и вам сделать какую нибудь задержку?