利于点灯科技实现亮度缓慢变化-Arduino中文社区 - Powered by Discuz! Archiver

xz376220024 发表于 2021-7-12 17:27

利于点灯科技实现亮度缓慢变化

搞技术的文笔不是很好,做出来的东西还是很好用的.:lol:lol:lol做了个天猫精灵控制的台灯,每次打开的时候忽然亮,尤其晚上起来尿尿的时候,被灯光刺的完全没睡意了.
所以加上了PWM功能,当调节亮度的时候就会慢慢亮,或者是慢慢熄灭。
下面是PWM部分。(末尾我会将整个文件都压缩供大家观摩)
void XZ_One_PWMM(void)//uint16_t dat
{

if(millis() > time_1 + PWM_TIM)//延时,通过系统时钟的方式
    {
      time_1 = millis();//保存系统时间
      if(PWM_Dat > New_PWM_Dat)//暗一点
      {
      PWM_Dat--;
      analogWrite(PIN_PWM, PWM_Dat);
      }
      else if (PWM_Dat < New_PWM_Dat)//亮一点
      {
      PWM_Dat++;
      analogWrite(PIN_PWM, PWM_Dat);
      }
    }
else if(millis() < time_1)time_1 = millis();//防止millis()溢出 ,溢出后会出现millis() < time_1 导致xit
}




#define PWM_TIM 20//PWM调整时延时 单位 MS 毫秒

if(millis() > time_1 + PWM_TIM)//延时,通过系统时钟的方式
上面这两行是个延时的功能,利用millis()函数获取系统启动后的时间,这玩意一直往上加,大约50天后溢出。所以这句就能实现延时的功能millis() > time_1 + PWM_TIM。
就实现了每20ms改变一次灯的亮度,这样在我们眼睛看起来就是慢慢的亮。
analogWrite(PIN_PWM, PWM_Dat); 这句的作用是输出改变后的值,PWM的范围在0-255之间(我用的是esp8266 12F)
else if(millis() < time_1)time_1 = millis();如果用系统时钟做延时一定得注意溢出后的状态 要不然2个月后要狗命:lol:lol:lol:lol

weiqinglong51 发表于 2021-7-12 19:52

放只狗呀

ldfzwx 发表于 2021-9-6 15:30

用的8266 吗?
页: [1]
查看完整版本: 利于点灯科技实现亮度缓慢变化