# Lesson 3:UART、超音波模組 ###### tags: `基於物聯網之實境應用設計` ## UART * (Universal Asynchronous Receiver/Transmitter)非同步收發傳輸器 * 同步、非同步 ![](https://i.imgur.com/8mIsmRM.png) * 單工、半雙工、全雙工 ![](https://vvl.me/images/16/09/data-stream.png) * 實現多種非同步傳輸介面,ex:RS-232,RS-422 * USB-to-UART ![](https://i.imgur.com/6DsmOhM.png) ![](https://i.imgur.com/OdtmM1H.png) * Baud rate是單位時間內傳輸資訊的個數,單位bits/sec。非同步傳輸裡,傳送端與接收端必需選擇相同的傳輸速率(1200, 2400, 4800, 9600等等) ## Serial library * 7697要跟電腦通訊的時候,使用 Serial 指令 * Serial port 使用 TX (pin 1) 跟 RX (pin 0) 這兩個腳位來傳送與接收資料。 * 實作:接收PC的輸入 ```C++ void setup() { Serial.begin(9600);//設定baud rate Serial.print("Send number"); } void loop() { char receive_num; if(Serial.available()>0){//有收到數值時,會回傳>0的值 receive_num=Serial.read();//讀取接收到資料的第一個位元組 Serial.print("recive:"); Serial.println(receive_num); } } ``` 點開序列埠監控視窗 ![](https://i.imgur.com/HYj3bMH.png) ![](https://i.imgur.com/8h5P3fT.png) ## 超音波模組 ![](http://www.codedata.com.tw/wp-content/uploads/2015/06/mBlockArduino12-1.jpg) * HC-SR04 腳位從左至右分別為 Vcc、Trig、Echo 與 GND,超音波的發射與接收依靠 Trig 與 Echo 這兩個腳位。送出 10 微秒的 5V 高電位訊號給 Trig,觸發超音波的發射,接著 Echo 腳位就會處於 5V 高電位狀態,當接收到反射的超音波訊號時,Echo腳位就會處於0V低電位狀態,所以藉由計算Echo電位從high到LOW的時間,可知超音波來回時間而計算與物體距離。 ![](https://i.imgur.com/N6pCtQT.png) * 函式 `pulseIn(pin, value, timeout)` :讀取pin腳的脈衝時間 ![](https://i.imgur.com/d7un2v0.png) * 實作:超音波模組 ```C++ const int Trig_Pins = 3;//trig 腳位 const int Echo_Pins = 2;// echo 腳位 float get_distance(int trig, int echo){//計算距離 float duration; pinMode(trig, OUTPUT); pinMode(echo, INPUT); digitalWrite(trig, HIGH); delayMicroseconds(10);//給予trig 10us TTL pulse,讓模組發射聲波 digitalWrite(trig, LOW); duration = pulseIn(echo, HIGH, 5000000);//紀錄echo電位從high到low的時間,就是超音波來回的時間,若5秒內沒收到超音波則回傳0 return duration / 29 / 2;// 聲速340m/s ,換算後約每29微秒走一公分,超音波來回所以再除2 } void setup() { Serial.begin(9600); } void loop() { float result= get_distance( Trig_Pins, Echo_Pins); Serial.print(result); Serial.println("cm"); delay(1000); } ``` ![](https://i.imgur.com/pmIsPnB.png) * 課堂作業:利用超音波模組控制呼吸燈,距離3cm~15cm之間,距離越近呼吸燈越亮