|
功能簡(jiǎn)介:5個(gè)微動(dòng)開關(guān)接到arduino的UNO R3 I/O口;
定義一個(gè)虛擬串口連接藍(lán)牙模塊;
微動(dòng)開關(guān)加了去抖動(dòng);
每個(gè)開關(guān)按下然后彈起會(huì)從串口發(fā)送一段字符串。
源碼:
- // 引腳定義
- int buttonPin[5] ={2,4,7,8,12}; // 按鍵位置
- const int ledPin = 13; // led位置
- // 定義變量
- int ledState = LOW; // 當(dāng)前l(fā)ed狀態(tài)
- int buttonState[5] = {0}; // 讀取的當(dāng)前按鍵狀態(tài)
- int lastButtonState[5] = {0}; // 上次讀取的按鍵狀態(tài)
- int a[5]={0};
- // 使用長(zhǎng)整型變量
- long lastDebounceTime[5] = {0}; // 上次按鍵觸發(fā)時(shí)間
- long debounceDelay = 50; // 去抖時(shí)間,根據(jù)實(shí)際情況調(diào)整
- #include <SoftwareSerial.h>
- //使用軟件串口,能將數(shù)字口模擬成串口
- SoftwareSerial BL(5, 6); //新建對(duì)象,接收腳為5,發(fā)送腳為6
- void setup() {
- BL.begin(115200);
- for(int i=0;i<5;i++){
- pinMode(buttonPin[i],INPUT);
- }
- pinMode(ledPin, OUTPUT);
- // 初始化led的狀態(tài)
- digitalWrite(ledPin, ledState);
- }
- void loop() {
- int reading[5]={0};
- for(int j=0;j<5;j++){
- reading[j] = digitalRead(buttonPin[j]);// 讀取按鍵狀態(tài)賦值到一個(gè)變量
- //如果按鍵狀態(tài)變化,不過(guò)是由于抖動(dòng)還是按鍵按下造成的下面的程序都需要進(jìn)行這一步處理
- if (reading[j] != lastButtonState[j]) {
- // 復(fù)位去抖時(shí)間,就是把當(dāng)前時(shí)間保存下來(lái)
- lastDebounceTime[j] = millis();
- }
- if ((millis() - lastDebounceTime[j]) > debounceDelay) {
- // 等過(guò)了去抖時(shí)間,再次去檢測(cè)按鍵的狀態(tài)
- if (reading[j] != buttonState[j]) {
- buttonState[j] = reading[j];
- // 如果按鍵仍然保持上次的狀態(tài),我們認(rèn)為這個(gè)按鍵按下是真實(shí)有效的
- if (buttonState[j] == HIGH) {
- ledState = HIGH;
- //BL.println("0000000000000000");
- }
- else {
- ledState = LOW;
- switch(j){
- case 0:BL.println("aa00000000000000");break;
- case 1:BL.println("00aa000000000000");break;
- case 2:BL.println("00000000aa000000");break;
- case 3:BL.println("0000aa0000000000");break;
- case 4:BL.println("0000000000aa0000");break;
- }
- }
- }
- }
- // 把led的最終結(jié)果輸出到對(duì)應(yīng)的引腳
- digitalWrite(ledPin, ledState);
- // 保存當(dāng)前值,一邊下一個(gè)循環(huán)檢測(cè)的時(shí)候使用
- …………余下代碼請(qǐng)下載附件…………
復(fù)制代碼
下載:
Switch5_0314.rar
(1.2 KB, 下載次數(shù): 21)
2017-3-18 11:48 上傳
點(diǎn)擊文件名下載附件
|
|