Arduino 開關控制小燈持續亮之具體思路

2022-05-29 18:33:07 字數 2040 閱讀 9108

我們用開關控制燈的亮滅的時候,希望只需要按一下按鍵就可以做到燈一直亮著。而在《arduino魔法書》中——有彈性的按鍵這一節主要講了消除抖動函式,但是沒有講這個程式的原理。

書中的**如下

const

int led = 9

;const

int button = 2

;boolean lastbutton =low;

boolean currentbutton =low;

boolean ledon = false

;void

setup()

boolean debounce(boolean last)

return

current;

}void

loop()

lastbutton =currentbutton;

digitalwrite(led,ledon);

//put your main code here, to run repeatedly:

}

首先,我們假設沒有抖動,只關注 loop()函式的部分,

currentbutton = debounce(lastbutton);

這時等價於

current = digitalread(button);

首先需要想的是:

當按下的時候,燈能夠一直亮著。

如果使用digitalread來讀當前的值,當按完以後,燈就會熄滅。所以,利用乙個條件語句:條件是:按下按鍵,動作(或者結果)是燈持續亮。

用**表示如下

所以必須更改原來的條件和動作。先考慮動作,不妨把燈亮變成乙個狀態量,而不是臨時讀取的量,這裡定義為 ledon. 

那麼接下來需要想的是如何更改 ledon 這個值呢?那就是通過按鍵的狀態變化來考慮了。另外,我們也想要燈亮時再次按下按鍵的時候,能夠熄滅燈。所以可以用到乙個反轉語句:

ledon = !ledon;

接下來就是條件的問題了:無論你是想持續點亮燈還是熄滅燈,這時候按鍵的狀態總是 high,而之前的狀態總是 low.

所以你可以用以下語句決定是否執行反轉語句:

if(lastbutton = low&& currentbutton = high);

來進行判斷。

然後之下的語句:lastbutton = currentbutton,此時,lastbutton 的值變為 high,然後重新返回 loop()函式的第一行,進入debounce()函式,此時,你已經不再按鍵了,所以返回的 currentbutton 的值為low,然後已經返回值後執行下一條語句,也就是if()的條件語句,因為lastbutton = high ,currentbutton = low ,所以不滿足條件,直接執行 lastbutton = currentbutton,這時,lastbutton 和 currentbutton 的值都為 low。

下一次你再進行按鍵的時候,就會反轉 ledon的數值,ledon熄滅。

之所以要消除抖動,是因為如果不消除抖動,currentbutton 的值是不確定的,所以會導致結果的無法**,不能人為地掌控。

如何消除抖動呢,書中寫道5ms之後,抖動一般都會消失,所以 delay(5); 之後再次讀取數值。

但是需要時時刻刻讀取嗎?不需要,所以可以加乙個條件語句。

也就是 if (last! = current)

如果沒必要進行5ms的等待了再次讀取,那麼程式變成這樣:

boolean debounce(boolean last)

此時如果last = current ,返回值都是沒有消除抖動的,所以消除抖動需要有乙個 if 也需要延時delay.

那麼,如果沒有if 語句呢?我認為是可行的。經過實驗我認為只要延長時間,讀兩次數即可。

之所以會存在抖動,我認識是抖動的時間遠遠地長於程式執行一條語句的時間,此時需要延時再進行讀數。

外部中斷控制LED燈開關

在51微控制器中,有2路外部中斷輸入int0 p3.2 和int1 p3.3 2路中斷觸發訊號 低電平觸發和下降沿觸發。中斷允許暫存器ie 0 禁止中斷 1 使能中斷 tf1 定時 計數器t1溢位中斷請求標誌位 0 無中斷請求 1 有中斷請求 tr1 定時 計數器t1啟動位 0 停止 定時 計數器 ...

python控制燈開關 通過樹莓派控制電燈開關

需要的材料 1.杜邦線 2.繼電器 3.電燈 4.銅線若干 gpio說明 繼電器說明 輸入部分 vcc 接5v電源正極 按繼電器電壓供電 gnd 接5v電源負極 in 繼電器模組訊號觸發端 低電平觸發有效 高電平與低電平含義 高電平觸發指的是用vcc端的正極電壓與觸發端連線的一種觸發方式,當觸發端有...

Arduino藍芽控制三色燈

最近開始研究arduino,網上關於arduino的材料,特別是中文的,不是很多。所以想要把自己實現的每一步都給記錄一下。以後如果忘了,可以再看看。看到網上有不少人實現用藍芽控制小燈,所以自己也動手小geek一下。藍芽模組用的是 買的,40塊錢乙個,雖說也有貴的,但是便宜的感覺功能上差不多。這裡用到...