




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
2相關(guān)知識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的按鍵按下后,通過Serial2發(fā)送控制命令給串口設(shè)備B。其中,A設(shè)備以JSON格式發(fā)送字符串,B設(shè)備接收解析后控制LED亮滅。任務(wù)引入前面幾個任務(wù)都是針對Serial操作的,Serial比較適合用于程序打印調(diào)試信息。如果要進(jìn)行與其他串口設(shè)備的串口通信,則使用Serial2串口是比較方便的。二、相關(guān)知識Arduino中的宏定義在Arduino中,宏定義是一種預(yù)處理指令,可以用來創(chuàng)建常量或簡化代碼。通過宏定義,程序員可以在程序中使用自定義的符號來代替常量或表達(dá)式。例如:#defineLED_PIN13該宏定義13為LED_PIN,這樣我們就可以在程序中使用LED_PIN來代替數(shù)字13。如果我們要改變使用的引腳,則只需要修改這個宏定義,而不需要修改整個程序。強(qiáng)制類型轉(zhuǎn)換在Arduino中,強(qiáng)制類型轉(zhuǎn)換是將一種數(shù)據(jù)類型的值轉(zhuǎn)換為另一種數(shù)據(jù)類型的值的過程。強(qiáng)制類型轉(zhuǎn)換可以幫助我們在不同數(shù)據(jù)類型之間進(jìn)行轉(zhuǎn)換,并允許我們使用不同的算術(shù)和邏輯操作。比較常見的是C語言風(fēng)格的強(qiáng)制類型轉(zhuǎn)換,這種轉(zhuǎn)換使用括號將要轉(zhuǎn)換的值包圍起來,并指定要轉(zhuǎn)換的目標(biāo)類型。例如:intx=10;floaty=(float)x;在這個例子中,我們將整數(shù)變量x強(qiáng)制轉(zhuǎn)換為浮點(diǎn)數(shù),并將結(jié)果存儲在浮點(diǎn)型變量y中。三、任務(wù)實(shí)施實(shí)施設(shè)備部署了Arduino開發(fā)環(huán)境的計算機(jī)。實(shí)施過程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)按鍵檢測。在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會打印很多條內(nèi)容,說明按下一次會檢測到多次,如圖1-21所示。這是什么原因呢?需要了解一下按鍵的知識,如圖1-22所示。從按鍵按下之后輸出電平的變化可知:對按鍵的檢測,需要考慮干擾情況(需要延時再檢測),再考慮按鍵長按的情況(需要等待釋放)。圖1-21打印按鍵檢測結(jié)果圖1-22按鍵電路輸出電平變化情況三、任務(wù)實(shí)施constintbuttonPin=26;//thenumberofthepushbuttonpinintbuttonState=0;//variableforreadingthepushbuttonstatusuint16_tLightStatus=0;voidsetup(){Serial.begin(9600);Serial2.begin(9600);pinMode(buttonPin,INPUT);}(2)增加消抖和等待釋放處理的按鍵檢測。在上面分析的基礎(chǔ)上,修改代碼如下:voidloop(){//buttonState=digitalRead(buttonPin);if(digitalRead(buttonPin)==HIGH){delay(10);//延時消抖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í)施延時的時間為10ms,運(yùn)行發(fā)現(xiàn)工作正常了,每按下一次按鍵,只會打印一次,如圖1-23所示。當(dāng)按鍵按下后,除了從Serial打印{"LightStatus":1}(已經(jīng)看到的效果),也從Serial2輸出同樣的字符串,這個字符串是滿足JSON對象格式的,供Serial所連接的設(shè)備B解析處理。圖1-23考慮消抖和等待釋放后的按鍵檢測結(jié)果3.設(shè)備B程序使用之前的OneKeyValue程序。將Serial接收改為Serial2接收,Serial2也需要初始化,解析過程不變。代碼如下:#include<ArduinoJson.h>StringinputString="";//aStringtoholdincomingdataboolstringComplete=false;//whetherthestringiscomplete//引腳定義#defineLIGHT25//產(chǎn)品標(biāo)識符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開燈效果4.結(jié)果展示設(shè)備A每按下一次按鍵,會發(fā)送一個命令給設(shè)備B,比如某一次按下后控制LED熄滅,如圖124所示;下一次按下后,就可以控制LED點(diǎn)亮,如圖1-25所示。通過設(shè)備A的按鍵,控制設(shè)備B的LED燈,工作正常。voidserial2Event(){while(Serial2.available()){//getthenewbyte:charinChar=(char)Serial2.read();
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年公共衛(wèi)生執(zhí)業(yè)醫(yī)師考試面臨的挑戰(zhàn)試題及答案
- 2024藥劑學(xué)學(xué)習(xí)方法的有效性評估試題及答案
- 委托簽訂合同委托協(xié)議
- 2024年專利考試的熱點(diǎn)問題試題及答案
- 安置房土地出讓合同協(xié)議
- 家電合作協(xié)議合同模板
- 學(xué)員籃球測試題及答案
- 2024年西醫(yī)臨床知識追蹤試題及答案
- 提高計算機(jī)二級考試成績的策略試題及答案
- 衛(wèi)生管理課程培訓(xùn)試題及答案
- 2024年云南省煙草專賣局畢業(yè)生招聘考試真題
- 青島市李滄區(qū)教育系統(tǒng)招聘中小學(xué)教師筆試真題2024
- 福建省部分地市2025屆高中畢業(yè)班4月診斷性質(zhì)量檢測英語試題(含答案無聽力音頻無聽力原文)
- 2025山東能源集團(tuán)中級人才庫選拔高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2024年司法考試完整真題及答案
- 雷雨-劇本原文-高中語文雷雨劇本原文
- 2016-2023年南通師范高等??茖W(xué)校高職單招(英語/數(shù)學(xué)/語文)筆試歷年考點(diǎn)試題甄選合集含答案解析
- 全國煉油廠一覽
- 2023年全國中學(xué)生生物學(xué)聯(lián)賽試題( 含答案解析 )
- 如愿二聲部合唱簡譜文檔
- 西師版三年級數(shù)學(xué)(下冊)第一單元試題
評論
0/150
提交評論