查看: 391|回复: 7

[未解决] 想在原有的项目上加上一个呼吸灯怎么做才不影响原程序

[复制链接]

该用户从未签到

发表于 2021-6-11 11:54 | 显示全部楼层 |阅读模式
如题,想在原来的程序上加上一个呼吸灯,但是程序中的delay会影响到程序的其他部分,想问问大佬们有没有好方法解决这个问题
微信图片编辑_20210611115343.jpg

签到天数: 118 天

[LV.6]常住居民II

发表于 2021-6-13 20:23 | 显示全部楼层
sjdynake 发表于 2021-6-11 15:51
加上灯实现呼吸效果,就是怕delay影响其他程序,发的这个就是参考

給你一段我前陣子做的呼吸燈程序


  1. //以系統時鐘進行呼吸燈點燈控制程式(多工) 1~20漸弱;21~27維持;28~47漸強;48~54維持
  2. //呼吸燈開啟,漸增/漸減各20段+維持亮/滅各7段=共54段
  3. B_COUNTER = int( (millis()-BREATHE_START_TIME)/B_SPEED );   //以運作時間計算步驟數

  4. if ( B_COUNTER <= 20 )                  //1~20步驟(漸弱)
  5.         analogWrite( BREATHE, (20-B_COUNTER)*12 );
  6. else
  7. {
  8.         if ( B_COUNTER <= 27 )              //21~27步驟(維持最暗)
  9.                 analogWrite( BREATHE, 0 );
  10.         else
  11.         {
  12.                 if ( B_COUNTER <= 47 )          //28~47步驟(漸強)
  13.                         analogWrite( BREATHE, (B_COUNTER-27)*12 );
  14.                 else
  15.                 {
  16.                         if ( B_COUNTER <= 54 )      //48~54步驟(維持最亮)
  17.                                 analogWrite( BREATHE, 255 );
  18.                         else
  19.                                 BREATHE_START_TIME = millis();  //全部步驟執行完後復歸,重新計時
  20.                 }
  21.         }
  22. }
复制代码

BREATHE 定義呼吸燈的 I/O PIN,需支援 PWM 功能
B_SPEED 定義呼吸燈的變化速度,定義 100=100ms/STEP
B_COUNTER 是個 int 型式的計數器,用來計算呼吸燈的 STEP 值
BREATHE_START_TIME 記錄呼吸燈啟動的時間,可於 setup() 中先設定初始值=millis(),型式 unsigned long
每一個 STEP 的 PWM 變化值為 12 的倍數,最暗 0、最亮 255

其他就讓系統時間 millis() 去決定 B_COUNTER 值、該做什麼控制,就有呼吸燈效果了,
總的來說這個呼吸燈是屬於速度快的類型 ^^
如果覺得不滿意,可自己調整 SPEED 值、PWM變化值或步驟數(含反應程序)

该用户从未签到

发表于 2021-6-11 15:33 | 显示全部楼层
你的意思是,还想在加一个灯实现呼吸效果吗?还是想在你本来的程序上,加上你贴图的这个程序?

该用户从未签到

 楼主| 发表于 2021-6-11 15:51 | 显示全部楼层
int_i 发表于 2021-6-11 15:33
你的意思是,还想在加一个灯实现呼吸效果吗?还是想在你本来的程序上,加上你贴图的这个程序? ...

加上灯实现呼吸效果,就是怕delay影响其他程序,发的这个就是参考

该用户从未签到

发表于 2021-6-11 16:44 | 显示全部楼层
那你得发你的程序。或者用定时器

该用户从未签到

发表于 2021-6-12 16:19 | 显示全部楼层
使用rtos,或者scoop

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2021-6-13 19:14 | 显示全部楼层
millis() 函数了解一下

该用户从未签到

 楼主| 发表于 2021-6-16 10:54 | 显示全部楼层
shouzama 发表于 2021-6-13 20:23
給你一段我前陣子做的呼吸燈程序

get!٩( 'ω' )و 感谢大佬
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐

点灯APP界面配置乱码
点灯APP界面配置乱码
界面配置导出页面的内容乱码
esp32s2 在Arduino IDE调试USB CDC
esp32s2 在Arduino IDE调
各位大佬好,最近尝试弄清如何使用esp32s2的usb功能。然后在Github上找的代码,放到自
天气显示屏代码开源与部分说明
天气显示屏代码开源与部分
前言:这个帖子可能有点乱(其实是第一次写那么长代码的帖子),本来想分几篇慢慢写的
教你让OLED动起来!多重字符串版!
教你让OLED动起来!多重字
大家都知道:arduino单片机是单线程的 而上次教程中的多段字符串的运行速度必须一致
DIY炫彩灯带,竟如此简单,更有硬件开发工具免费领!
DIY炫彩灯带,竟如此简单
什么是涂鸦Arduino SDK? Arduino 是全球最流行的开源硬件平台,涂鸦官方推出的 Ardui
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表