




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2相關(guān)知識(shí)34任務(wù)小結(jié)與練習(xí)1任務(wù)實(shí)施任務(wù)引入與目標(biāo)ESP32的Serial2操作一、任務(wù)引入與目標(biāo)任務(wù)目標(biāo)任務(wù)7實(shí)現(xiàn)串口設(shè)備A的按鍵按下后,通過(guò)Serial2發(fā)送控制命令給串口設(shè)備B。其中,A設(shè)備以JSON格式發(fā)送字符串,B設(shè)備接收解析后控制LED亮滅。任務(wù)引入前面幾個(gè)任務(wù)都是針對(duì)Serial操作的,Serial比較適合用于程序打印調(diào)試信息。如果要進(jìn)行與其他串口設(shè)備的串口通信,則使用Serial2串口是比較方便的。二、相關(guān)知識(shí)Arduino中的宏定義在Arduino中,宏定義是一種預(yù)處理指令,可以用來(lái)創(chuàng)建常量或簡(jiǎn)化代碼。通過(guò)宏定義,程序員可以在程序中使用自定義的符號(hào)來(lái)代替常量或表達(dá)式。例如:#defineLED_PIN13該宏定義13為L(zhǎng)ED_PIN,這樣我們就可以在程序中使用LED_PIN來(lái)代替數(shù)字13。如果我們要改變使用的引腳,則只需要修改這個(gè)宏定義,而不需要修改整個(gè)程序。強(qiáng)制類型轉(zhuǎn)換在Arduino中,強(qiáng)制類型轉(zhuǎn)換是將一種數(shù)據(jù)類型的值轉(zhuǎn)換為另一種數(shù)據(jù)類型的值的過(guò)程。強(qiáng)制類型轉(zhuǎn)換可以幫助我們?cè)诓煌瑪?shù)據(jù)類型之間進(jìn)行轉(zhuǎn)換,并允許我們使用不同的算術(shù)和邏輯操作。比較常見(jiàn)的是C語(yǔ)言風(fēng)格的強(qiáng)制類型轉(zhuǎn)換,這種轉(zhuǎn)換使用括號(hào)將要轉(zhuǎn)換的值包圍起來(lái),并指定要轉(zhuǎn)換的目標(biāo)類型。例如:intx=10;floaty=(float)x;在這個(gè)例子中,我們將整數(shù)變量x強(qiáng)制轉(zhuǎn)換為浮點(diǎn)數(shù),并將結(jié)果存儲(chǔ)在浮點(diǎn)型變量y中。三、任務(wù)實(shí)施實(shí)施設(shè)備部署了Arduino開(kāi)發(fā)環(huán)境的計(jì)算機(jī)。實(shí)施過(guò)程1.硬件連接串口的引腳可以查看表1-2。引腳連接如下:Button_out———ESP32A_IO26
Button_GND———ESP32A_GNDButton_VCC———ESP32A_VCC
ESP32A_IO17———ESP32B_IO16ESP32A_IO16———ESP32B_IO17
ESP32A_GND———ESP32B_GNDLED_R———ESP32B_IO25
LED_GND———ESP32B_GND串口名Arduino名TXRXUART0Serialpin1(TXD0)pin3(RXD0)UART1Serial1pin10pin9UART2Serial2pin17pin16表1-2ESP32的串口引腳三、任務(wù)實(shí)施連接示意如圖1-19所示。實(shí)物連接如圖1-20所示。圖1-19任務(wù)7硬件連接示意圖圖1-20任務(wù)7硬件連接實(shí)物圖三、任務(wù)實(shí)施constintbuttonPin=26;//thenumberofthepushbuttonpinintbuttonState=0;//variableforreadingthepushbuttonstatusuint16_tLightStatus=0;voidsetup(){Serial.begin(9600);Serial2.begin(9600);pinMode(buttonPin,INPUT);}voidloop(){buttonState=digitalRead(buttonPin);}2.設(shè)備A程序(1)按鍵檢測(cè)。在02-Button的示例程序基礎(chǔ)上修改,代碼如下:if(buttonState==HIGH){if(LightStatus==0){Serial2.print("{\"LightStatus\":0}\n");Serial.print("{\"LightStatus\":0}\n");LightStatus=1;}else{Serial2.print("{\"LightStatus\":1}\n");Serial.print("{\"LightStatus\":1}\n");LightStatus=0;}}三、任務(wù)實(shí)施下載運(yùn)行,發(fā)現(xiàn)每按下一次,設(shè)備A的Serial會(huì)打印很多條內(nèi)容,說(shuō)明按下一次會(huì)檢測(cè)到多次,如圖1-21所示。這是什么原因呢?需要了解一下按鍵的知識(shí),如圖1-22所示。從按鍵按下之后輸出電平的變化可知:對(duì)按鍵的檢測(cè),需要考慮干擾情況(需要延時(shí)再檢測(cè)),再考慮按鍵長(zhǎng)按的情況(需要等待釋放)。圖1-21打印按鍵檢測(cè)結(jié)果圖1-22按鍵電路輸出電平變化情況三、任務(wù)實(shí)施constintbuttonPin=26;//thenumberofthepushbuttonpinintbuttonState=0;//variableforreadingthepushbuttonstatusuint16_tLightStatus=0;voidsetup(){Serial.begin(9600);Serial2.begin(9600);pinMode(buttonPin,INPUT);}(2)增加消抖和等待釋放處理的按鍵檢測(cè)。在上面分析的基礎(chǔ)上,修改代碼如下:voidloop(){//buttonState=digitalRead(buttonPin);if(digitalRead(buttonPin)==HIGH){delay(10);//延時(shí)消抖if(digitalRead(buttonPin)==HIGH){while(digitalRead(buttonPin));//等待釋放//Serial2發(fā)送給設(shè)備B,并從Serial打印if(LightStatus==0){Serial2.print("{\"LightStatus\":0}\n");Serial.print("{\"LightStatus\":0}\n");LightStatus=1;}else{Serial2.print("{\"LightStatus\":1}\n");Serial.print("{\"LightStatus\":1}\n");LightStatus=0;}}}三、任務(wù)實(shí)施延時(shí)的時(shí)間為10ms,運(yùn)行發(fā)現(xiàn)工作正常了,每按下一次按鍵,只會(huì)打印一次,如圖1-23所示。當(dāng)按鍵按下后,除了從Serial打印{"LightStatus":1}(已經(jīng)看到的效果),也從Serial2輸出同樣的字符串,這個(gè)字符串是滿足JSON對(duì)象格式的,供Serial所連接的設(shè)備B解析處理。圖1-23考慮消抖和等待釋放后的按鍵檢測(cè)結(jié)果3.設(shè)備B程序使用之前的OneKeyValue程序。將Serial接收改為Serial2接收,Serial2也需要初始化,解析過(guò)程不變。代碼如下:#include<ArduinoJson.h>StringinputString="";//aStringtoholdincomingdataboolstringComplete=false;//whetherthestringiscomplete//引腳定義#defineLIGHT25//產(chǎn)品標(biāo)識(shí)符StringIdentifier="LightStatus";三、任務(wù)實(shí)施voidsetup(){//initializeserial:Serial.begin(9600);Serial2.begin(9600);//reserve200bytesfortheinputString:inputString.reserve(200);pinMode(LIGHT,OUTPUT);}voidloop(){//printthestringwhenanewlinearrives:if(stringComplete){Serial.println(inputString);//解析,控制,約定Json格式:{"LightStatus":1},{"LightStatus":0}StaticJsonBuffer<200>jsonBuffer;JsonObject&root=jsonBuffer.parseObject(inputString);if(!root.success()){Serial.println("parseObject()failed");inputString="";stringComplete=false;return;}constchar*val=root[Identifier];if(val!=NULL){constuint16_tLightStatus=root[Identifier];if(LightStatus==1){digitalWrite(LIGHT,HIGH);}else{digitalWrite(LIGHT,LOW);}Serial.print("LightStatus:");Serial.println(LightStatus);}//clearthestring:inputString="";stringComplete=false;}serial2Event();}三、任務(wù)實(shí)施圖1-25開(kāi)燈效果4.結(jié)果展示設(shè)備A每按下一次按鍵,會(huì)發(fā)送一個(gè)命令給設(shè)備B,比如某一次按下后控制LED熄滅,如圖124所示;下一次按下后,就可以控制LED點(diǎn)亮,如圖1-25所示。通過(guò)設(shè)備A的按鍵,控制設(shè)備B的LED燈,工作正常。voidserial2Event(){while(Serial2.available()){//getthenewbyte:charinChar=(char)Serial2.read();
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 高中數(shù)學(xué)分層練習(xí)(壓軸題)06:函數(shù)與導(dǎo)數(shù)(30題)【含解析】
- 水池專項(xiàng)施工方案
- 洗手洗腳池施工方案
- 電梯施工方案模板
- 基于涉入理論的高爾夫球手地方依戀研究
- 6到12歲的感統(tǒng)訓(xùn)書(shū)籍
- consider的固定搭配和例句總結(jié)
- 2025年往年英語(yǔ)a b級(jí)試題及答案
- 燈火闌珊處高情商回復(fù)
- 4-氨基-丁酸叔丁酯醋酸鹽
- 日常采購(gòu)維修合同范本
- 2024-2025年第二學(xué)期一年級(jí)語(yǔ)文教學(xué)進(jìn)度表
- 企業(yè)員工職務(wù)犯罪預(yù)防
- 2025年貴州省高職單招醫(yī)學(xué)類職業(yè)技能測(cè)試題庫(kù)及答案(備考刷題)
- 5《水污染》教學(xué)設(shè)計(jì)-2023-2024學(xué)年科學(xué)六年級(jí)下冊(cè)冀人版
- 2025年安徽電氣工程職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 幼兒園開(kāi)學(xué)教職工安全教育培訓(xùn)
- 2025-2030年中國(guó)發(fā)酵豆粕行業(yè)運(yùn)行態(tài)勢(shì)及投資前景規(guī)劃研究報(bào)告
- 酒店建設(shè)項(xiàng)目施工總承包合同
- 2025年政府采購(gòu)代理機(jī)構(gòu)考試題庫(kù)及答案
- 第14課《第一次世界大戰(zhàn)》中職高一下學(xué)期高教版(2023)世界歷史全一冊(cè)
評(píng)論
0/150
提交評(píng)論