日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

和12岁小同志搞创客开发:手撕代码,做一款遥控灯

發布時間:2023/11/27 生活经验 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 和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岁小同志搞创客开发:手撕代码,做一款遥控灯的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。