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

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2149|回复: 2

[分享] 利于点灯科技实现亮度缓慢变化

[复制链接]
发表于 2021-7-12 17:27 | 显示全部楼层 |阅读模式
搞技术的文笔不是很好,做出来的东西还是很好用的.做了个天猫精灵控制的台灯,每次打开的时候忽然亮,尤其晚上起来尿尿的时候,被灯光刺的完全没睡意了.
所以加上了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个月后要狗命
发表于 2021-9-6 15:30 | 显示全部楼层
用的8266 吗?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 11:57 , Processed in 0.071434 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表