Что изменить в скече для фиксации кнопки?
- Войдите на сайт для отправки комментариев
Пнд, 18/04/2016 - 19:57
Ребят, нашол скеч управление нагрукой через ИК пульт. Но возник вопрос. У автора скечь сделан так, чтобы на выходах шим плавно менялось напряжение, а мне нужно, чтобы кнопки ИК, фиксировались на любых аналоговых выходах, как на цифровых, и не плавно.
Например: нажал кнопку 1, и пока держу, есть 5в на A1 , отпустил кнопку нет 5в.
Пульт у меня такойже т.е сначало у любой кнопки идёт код, например FF20DF а после удержания FFFFFF...
Вот тот скеч
#include <IRremote.h> // https://github.com/shirriff/Arduino-IRremote #define RECV_PIN 11 // IR приемник #define OUT1 9// выхода на мосфеты #define OUT2 10 #define POWER_KEY 0x40BF30CF // коды пульта ДУ #define KEY1 0x40BF7887 // v- #define KEY2 0x40BFF807 // v+ #define KEY3 0xC03FC03F #define KEY4 0xC03F40BF byte analogData1, analogData2 = 0; // значения аналогово выхода uint32_t val; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { irrecv.enableIRIn(); //Serial.begin(9600); } void loop() { if (irrecv.decode(&results)) { // если пришел пакет if (results.value != 0xFFFFFFFF){ // и этот пакет не FF val = results.value; // сохраняем правельный пакет в переменную } // если пришел FF, соответственно пропускаем. /// сверяем значение из переменной val.. если пришла команда повтора (пакет с FF) /// в переменной останется прошлый, правельный, пакет и код выполнится повторно. if (val == KEY1){ if (analogData1 != 0)analogData1--; // если шим не равно 0 отнимаем 1 analogWrite(OUT1, analogData1); // устанавливаем значение в выход } if (val == KEY2){ // и это вторая кнопка if (analogData1 < 255) analogData1++; // если шим меньше 255 прибовляем 1 analogWrite(OUT1, analogData1); // устанавливаем значение } if (val == KEY4){ if (analogData2 != 0)analogData2--; analogWrite(OUT2, analogData2); } if (val == KEY3){ if (analogData2 < 255) analogData2++; analogWrite(OUT2, analogData2); } /// if (results.value == POWER_KEY) { if (analogData1 != 0 && analogData2 != 0){ // если ШИМ неравно 0 analogWrite(OUT1, 0); // выключаем analogWrite(OUT2, 0); analogData1 = 0; analogData2 = 0; } else { analogWrite(OUT1, 255); // включаем analogWrite(OUT2, 255); analogData1 = 255; analogData2 = 255; } } /*Serial.println(val, HEX); //// ТЕСТЫ! Serial.println(results.value, HEX); Serial.println(analogData1); Serial.println(analogData2); Serial.println(); */ irrecv.resume(); } }
вместо analogWrite(Ax,NNN); писать digitalWrite(Ax,0 или 1);
вместо analogWrite(Ax,NNN); писать digitalWrite(Ax,0 или 1);
вы его наверное совсем в тупик поставили, не найдет он в своем скоче эти строки, не найдет.
ТС помигай для начала светодиодиком на 13 ноге, разбери что каждая строка делает и для чего нужна, когда поймешь что каждая строка делает то и снизойдет разумение где-что менять. а так получается вопрос: напишите за меня. вопрос конечно простой, но удочку дали, наживку уже даже нацепили, дальше сам. или пиши в теме "ищу исполнителя"
Ребят в принципе разобрался.
Вот так можно одной кнопкой включать и выключать реле используя флаг состояния.
Вот так вроде удаётся задействовать пока кнопка нажата.
Но теперь появилась другая проблема. Дело в том, что я с помощью ИК пульта, пытаюсь управлять кнопками MP3 плеера, через оптопары. И всё бы нечего если бы не особенности самого плеера. Дело в том, что у него получается, на двух кнопках, по 3 разных функцыи.
т.е
Кнопка1 перемотка назад; переключение на предыдущий трек и Громкость Volum-
Кнопка2 перемотка вперед; переключение на следующий трек и Громкость Volum+
И фсе эти фунцыи зависят от времени нажатия кнопок. т.е нажал и тутже отпустил переключил трек, нажал и держишь не более 0.4 секунды перематываеш трек, держиш более 0.5 секунды меняешь громкость.
Как быть прикручивать таймеры на микросикунды ? Или это безнодёжно?