和12岁小同志搞创客开发:手撕代码,做一款遥控灯
機緣巧合在網上認識一位12歲小同志,從零開始系統輔導其創客開發思維和技巧。
項目專欄:https://blog.csdn.net/m0_38106923/category_11097422.html?
本篇博文是創客開發:手撕代碼篇的最后一節,項目在之前使用Mind+編程中講到過:和12歲小同志搞創客開發:如何驅動紅外遙控器?
這次將通過代碼的方式進一步理解紅外遙控器的使用。
我們知道家里的那些遙控器,不管是電視還是空調都是通過紅外來控制的,我們這次也通過紅外來做個遙控燈。
在開始之前,先來個預熱實驗,通過串口來了解下如何使用紅外接收管和遙控器。
項目連線效果如下所示:
驅動程序如下所示:
#include <IRremote.h>int RECV_PIN = 10;IRrecv irrecv(RECV_PIN);decode_results results;void setup()
{Serial.begin(9600);irrecv.enableIRIn(); // Start the receiver
}void loop() {if (irrecv.decode(&results)) {Serial.println(results.value, HEX);irrecv.resume(); // Receive the next value}
}
下載完成后,打開Arduino IDE的串口監視器(Serial Monitor),設置波特率baud為:9600,與代碼中Serial.begin(9600)相匹配。
設置完后,用Mini遙控器的按鈕對著紅外接收管的方向,任意按個按鈕,都能在串口監視器上看到相對應的代碼。如下圖所示,按數字“0”,接收到對應16進制的代碼是FD30CF。每個按鈕都有一個特定的16進制的代碼。
如果按住常按一個鍵不放就是出現“FFFFFFFF”。
在串口中,正確接收的話,應該收到以FD開頭的六位數。如果遙控器沒有對準紅外接收管的話,可能會接收到錯誤的代碼。如下圖所示:
預熱完之后,我們言歸正傳,開始制作遙控燈。硬件設備其實就是在原有的基礎上,加了個LED燈,效果如下圖所示:
實現代碼如下所示:
#include <IRremote.h> //調用IRremote.h庫
int RECV_PIN = 10; //定義RECV_PIN變量為10
int ledPin = 3; // LED – digital 3
boolean ledState = LOW; // ledstate用來存儲LED的狀態
IRrecv irrecv(RECV_PIN); //設置RECV_PIN(也就是11引腳)為紅外接收端
decode_results results; //定義results變量為紅外結果存放位置void setup(){Serial.begin(9600); //串口波特率設為9600irrecv.enableIRIn(); //啟動紅外解碼pinMode(ledPin,OUTPUT); // 設置LED為輸出狀態
}void loop() {//是否接收到解碼數據,把接收到的數據存儲在變量results中if (irrecv.decode(&results)) { //接收到的數據以16進制的方式在串口輸出 Serial.println(results.value, HEX);//一旦接收到電源鍵的代碼, LED翻轉狀態,HIGH變LOW,或者LOW變HIGHif(results.value == 0xFD00FF){ledState = !ledState; //取反 digitalWrite(ledPin,ledState); //改變LED相應狀態 } irrecv.resume(); // 繼續等待接收下一組信號}
}
在這里,我們多定義了一個變量ledState,通過名字應該就可以看出來含義了,用來存儲LED的狀態的,由于LED狀態就兩種(1或者0),所以我們使用boolean變量類型。
setup()函數中,對使用串口,啟動紅外解碼,數字引腳模式進行設置。
到了主函數loop(),一開始還是先判斷是否接收到紅外碼,并把接收到的數據存儲在變量results中。
if (irrecv.decode(&results))
一旦接收到數據后,程序就要做兩件事。第一件事,判斷是否接收到了電源鍵的紅外碼。
if(results.value == 0xFD00FF)
第二件事,就是讓LED改變狀態。
ledState = !ledState; //取反
digitalWrite(ledPin,ledState); //改變LED相應狀態
最后,繼續等待下一組信號。
irrecv.resume(); // 繼續等待接收下一組信號
總結
以上是生活随笔為你收集整理的和12岁小同志搞创客开发:手撕代码,做一款遥控灯的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 和12岁小同志搞创客开发:手撕代码,做一
- 下一篇: LabVIEW生成应用程序(exe)和安