# 20221027 arduino ![](https://i.imgur.com/FAFynJ2.png) ## arduino 超音波 伺服馬達 ``` // trig => 13 output 發射 // echo => 12 input 接收 #include <Servo.h> Servo myservo; unsigned long duration; int pos = 0; void setup() { pinMode(13, OUTPUT); pinMode(12, INPUT); myservo.attach(9); Serial.begin(9600); } void loop() { digitalWrite(13, HIGH); delay(1); // 1ms digitalWrite(13, LOW); duration = (pulseIn(12, HIGH)/2)*0.034; // 音速轉換成cm // myservo.write(duration); Serial.println(duration); delay(30); } ``` # 流程圖練習 ## sequence-diagram 循序圖 https://plantuml.com/zh/sequence-diagram ## 1個馬達 ```plantuml autonumber 人->開關:開 arduino ->開關: 偵測 開關 關->開 arduino -> 馬達1:控制轉動 10度->160度 馬達1->假手:轉動 箱子打開 按到按鈕 假手->開關: 開關 開->關 arduino->開關:偵測開關 開->關 arduino -> 馬達1:控制轉動 160度->10度 馬達1->假手:轉動收回 箱子關閉 ``` ## 兩個馬達 ```plantuml autonumber 人->開關:開 arduino ->開關: 偵測 開關 關->開 arduino -> 馬達1:控制轉動 10度->160度 馬達1->箱子:轉動 箱子打開 arduino -> 馬達2:控制轉動 10度->160度 馬達2->假手: 轉動 伸出 假手->開關:關閉 arduino->開關:偵測開關 開->關 arduino -> 馬達2:控制轉動 160度->10度 馬達2->假手: 轉動 收回 arduino -> 馬達1:控制轉動 160度->10度 馬達1->箱子:轉動 箱子關閉 ``` ## useless box ```plantuml autonumber 人->超音波: 遮蔽 -> 1189 arduino ->超音波: >500 (delay 300) arduino-> 伺服馬達 :轉動 10->160 伺服馬達->超音波: 上面的東西推掉 arduino ->超音波: 數值-> 300 arduino-> 伺服馬達 :轉動 160->10 ``` ### useless box => 超音波 伺服馬達 ``` // trig => 13 output 發射 // echo => 12 input 接收 #include <Servo.h> Servo myservo; unsigned long duration; int pos = 0; void setup() { pinMode(13, OUTPUT); pinMode(12, INPUT); myservo.attach(9); Serial.begin(9600); myservo.write(10); } void loop() { digitalWrite(13, HIGH); delay(1); // 1ms digitalWrite(13, LOW); duration = (pulseIn(12, HIGH)/2)*0.034; // 音速轉換成cm // Serial.println(duration); if(duration > 1100){ delay(3000); myservo.write(160); delay(3000); } if(duration < 300){ myservo.write(10); } delay(30); } ```