Может я просто где-то недогоняю, но у меня вопрос: как сделать это задание? Пока вот что получилось: Код (Javascript): var ir = require('@amperka/ir-receiver') .connect(P7); var light = require('@amperka/led') .connect(P1); var powerCode = 0xffa857; var unpowerCode = 0xff807f; ir.on('receive', function(code, repeat) { if (repeat) { return; } if (code === powerCode) { light.turnOn(); } if (code === unpowerCode) { light.turnOff(); } });
blackbars1408 Воспользовался твоим кодом , добавил его в "театральное освещение" все работает отлично !!! var ir = require('@amperka/ir-receiver') .connect(P7); var light = require('@amperka/led') .connect(P1); var powerCode = 0x1689d02f; var unpowerCode = 0x1689d827; var light = require('@amperka/led') .connect(P1) .turnOn() .brightness(0); var button = require('@amperka/button') .connect(P3); var anim = require('@amperka/animation') .create() .reverse(); anim.on('update', function(val) { light.brightness(val); }); button.on('press', function() { anim.reverse().play(); }); ir.on('receive', function(code, repeat) { if (repeat) { anim.reverse().play() ; } if (code === powerCode) { light.turnOn(); } if (code === unpowerCode) { light.turnOff(); } });
Доброго времени суток! Столкнулся с проблемой в этом же задании. Не понимаю как сделать так, чтобы при первом включении нажатие одной кнопки определялось на включение, а второй на выключение автоматически. Пытался задать условие, что код включения не равен коду выключения, но оно вообще не работает. Думаю, что можно как-то задать приоритет выполнения функций, чтобы сначала прописывалась одна, на включение, а потом уже вторая на выключение, но пока не хватает знаний. Код (Javascript): var ir = require('@amperka/ir-receiver') .connect(P7); var light = require('@amperka/led') .connect(P1); var powerCodeOn = null; var powerCodeOff = null; powerCodeOn = !powerCodeOff; ir.on('receive', function(code,repeat) { if(repeat) { return; } if(powerCodeOn === null) { powerCodeOn = code; } if(code === powerCodeOn) { light.turnOn(); } }); ir.on('receive', function(code,repeat) { if(repeat) { return; } if(powerCodeOff === null) { powerCodeOff = code; } if(code === powerCodeOff) { light.turnOff(); } }); Если ошибка именно в коде, то прошу подсказать в чем проблема. Если нужно учить "мат. часть", то уже пошёл...
Вы два раза используете отслеживание событий ir.on('receive'...), что есть не правильно. Если Вам вообще все равно какой одной кнопкой включать лишь бы потом выключалось только той же, что и включалось, то: Код (Javascript): var ir = require('@amperka/ir-receiver') .connect(P7); var light = require('@amperka/led') .connect(P1); var powerTrig = false; var powerCode; ir.on('receive', function(code,repeat) { if(repeat) { return; } if(!powerTrig) { //проверка на включение, false - выключен, true - включен // попадаем сюда, если powerTrig = false light.turnOn(); powerCode = code; powerTrig = !powerTrig; // powerTrig = !false = true }else if(code === powerCode) { // попадаем сюда, если powerTrig = true и код соответствует коду включения light.turnOff(); powerTrig = !powerTrig; } });
Спасибо за ваш ответ, но дело в том, что я хочу получить следующий результат: жму произвольную кнопку, ее код забивается в память и свет включается. Жму другую произвольную кнопку, ее код также забивается в память и свет выключается. Теперь до перезагрузки системы первая кнопка будет включать, а вторая выключать. Из-за этого и было второе отслеживание события ir.on(), пытался отследить вторую произвольную кнопку. Ну, и бардак получился, конечно же)
о как... ну тогда Код (Javascript): var ir = require('@amperka/ir-receiver') .connect(P7); var light = require('@amperka/led') .connect(P1); var powerTrig = false, powerCodeOn = '', powerCodeOff = ''; ir.on('receive', function(code,repeat) { if(repeat) { return; } if(!powerTrig) { if(powerCodeOn === '') { powerCodeOn = code; light.turnOn(); powerTrig = !powerTrig; }else if(code === powerCodeOn){ light.turnOn(); powerTrig = !powerTrig; } }else{ if(powerCodeOff === '') { powerCodeOff = code; light.turnOff(); powerTrig = !powerTrig; }else if(code === powerCodeOff){ light.turnOff(); powerTrig = !powerTrig; } } }); как-то так...
Отлично, спасибо - все работает! Только у меня вопрос по логике кода. Как я понимаю, переменную var powerTrig = false мы ввели, чтобы разделить воспринимаемые сигналы на две ветки: кнопка .turnOn() и кнопка .turnOff(), но не могу понять для чего в конце каждого условия ставили powerTrig = !powerTrig?
На здоровье! Триггер powerTrig нужен, чтобы не отслеживать сигнал включения при включенном состоянии и наоборот - не отслеживать выключение при выключенном состоянии. Это дает возможность назначать для включения и выключения одну и ту же кнопку. А powerTrig = !powerTrig переключает состояния. Можно было бы использовать вместо этого напрямую powerTrig = true и powerTrig = false, но я привык отрицаниями/перевёртышами. Код (Javascript): состояние = выкл если(состояние === выкл){ ... вкл состояние = вкл // !выкл (не выкл) } иначе { ... выкл состояние = выкл // !вкл (не вкл) } Можно и по-другому обыграть алгоритм с условиями, но имхо так логичней и организованней...
В условия f(powerCodeOff === '') разве не требуется добавить && code !== powerCodeOn для того чтобы это обязательно была другая кнопка?
Код позволяет использовать одну и туже кнопку на вкл/вкл. Прочитайте следующие посты, там даются некоторые разъяснения по коду.