Делаю простейший ночничек. для ребенка.
сетодиод и кнопка. при включении он должен плавно зажечься до яркости запомненой при настройке в еепром (с ЕЕПРОМ пока не реализовал) если нажимать коротко один раз то должен на минимум. если двойной клик то на максимум а если удерживать то изменяться яркость. в моем случае не изменяется направление регулировки яркости. не могу понять что я не так напартачил. ну и может кто посоветует лучше алгоритм изменения яркости, что бы обойти восприятие глазом нелинейности. боюсь я напартачил что то в обработке кнопок
сетодиод и кнопка. при включении он должен плавно зажечься до яркости запомненой при настройке в еепром (с ЕЕПРОМ пока не реализовал) если нажимать коротко один раз то должен на минимум. если двойной клик то на максимум а если удерживать то изменяться яркость. в моем случае не изменяется направление регулировки яркости. не могу понять что я не так напартачил. ну и может кто посоветует лучше алгоритм изменения яркости, что бы обойти восприятие глазом нелинейности. боюсь я напартачил что то в обработке кнопок
вот проба пера не пинайте сильно:
#define BTN_PIN 7 // кнопка п
#define LED 11 // светодиод
#include "GyverButton.h"
GButton butt1(BTN_PIN);
int Tbrightness = 0; // текущая яркость
int Cbrightness = 255; // целевая яркость
int DirBright =1; //направление изменения яркости 1 вверх 0 вниз
int Fade = 10; // скорость изменения яркости
void setup() {
pinMode(LED, OUTPUT);
}
void loop() {
butt1.tick();
analogWrite(LED, Tbrightness);
delay(Fade);
if (butt1.isSingle()) Cbrightness=1; // одиночное нажати минималка
if (butt1.isDouble()) Cbrightness=255; // двойной клик максималка
if (Tbrightness < Cbrightness) Tbrightness ++;
if (Tbrightness > Cbrightness) Tbrightness --;
if (butt1.isHold()) BrChange(); // при удержании меняем яркость
if (butt1.isRelease())DirBright=!DirBright;// при отпускании меняем направление изменения яркости
}
void BrChange (){
Fade = 15+(255/Tbrightness); // попытка сделать плавнее изменение яркости
if (DirBright)
{
Cbrightness++;
if (Cbrightness==256)
{
Cbrightness--;
DirBright = 0;
}
}
else
{
if (Cbrightness==0)
{
Cbrightness++;
DirBright = 1;
}
}
}
Изменено: