|
給你一段我前陣子做的呼吸燈程序
- //以系統時鐘進行呼吸燈點燈控制程式(多工) 1~20漸弱;21~27維持;28~47漸強;48~54維持
- //呼吸燈開啟,漸增/漸減各20段+維持亮/滅各7段=共54段
- B_COUNTER = int( (millis()-BREATHE_START_TIME)/B_SPEED ); //以運作時間計算步驟數
- if ( B_COUNTER <= 20 ) //1~20步驟(漸弱)
- analogWrite( BREATHE, (20-B_COUNTER)*12 );
- else
- {
- if ( B_COUNTER <= 27 ) //21~27步驟(維持最暗)
- analogWrite( BREATHE, 0 );
- else
- {
- if ( B_COUNTER <= 47 ) //28~47步驟(漸強)
- analogWrite( BREATHE, (B_COUNTER-27)*12 );
- else
- {
- if ( B_COUNTER <= 54 ) //48~54步驟(維持最亮)
- analogWrite( BREATHE, 255 );
- else
- BREATHE_START_TIME = millis(); //全部步驟執行完後復歸,重新計時
- }
- }
- }
复制代码
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變化值或步驟數(含反應程序)
|
|