Подскажите с analogData
- Войдите на сайт для отправки комментариев
Сб, 31/10/2015 - 15:29
есть скетч где регулируется яркость светодиода удержанием кнопки на ик пульте, но шаг релулировки туь +/- 1. подключил к ленте светодиодной - от нуля до полной ярокости минуту наверное нужно держать кнопку, как в этом коде увеличить шаг увеличения яркости с 1 до 10 к примеру?
#include <IRremote.h> // https://github.com/shirriff/Arduino-IRremote #define RECV_PIN 4 // IR приемник #define OUT1 8// выхода на мосфеты #define OUT2 10 #define POWER_KEY 0x20DF4EB1 // коды пульта ДУ #define KEY1 0x20DFC639 // v- #define KEY2 0x20DF8679 // 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(); } }
1. Заведите переменную byte step=2; // потом опытным путем подберёте значение.
2. Замените analogData1-- analogData1++ analogData2-- analogData2++
соответственно на analogData1-=step analogData1+=step analogData2-=step analogData2+=step
Это всё.
А еще лучше, по команде запускайте цикличное увеличение-уменьшение с задержкой, а в нужный момент останавливайте.
Код зело знакомый, даже очепятки те же. Если брали у Thorn, то в конце холивара реализованы функции автоматического увеличения-уменьшения яркости, с ручной коррекцией.
Спасибо!