---
title: 0612 Arduino01 Preview
tags: Arduino 回家作業
---
# 0612 Arduino01 回家作業
## [計數器](https://www.tinkercad.com/things/4tP9KugQtfr-grand-robo/editel?sharecode=bWZeQGBNTpSfKcdObW2S9JRnhd9MSh2oy1gfdE1kEcE)

```// C++ code
//
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 10, 9, 8, 3);
void setup()
{
pinMode(13, OUTPUT);
pinMode(7, INPUT);
pinMode(6, INPUT);
pinMode(5, INPUT);
pinMode(4, INPUT);
Serial.begin(9600);
digitalWrite(13, HIGH);
}
int oneMinute = 60;
int fiveMinute = 300;
int tenMinute = 600;
int countDown = -1;
int pause = 0;
int tmp = 0;
void loop()
{
if(digitalRead(5)) {
countDown = oneMinute;
return delay(10);
}
if(digitalRead(6)) {
countDown = fiveMinute;
return delay(10);
}
if(digitalRead(7)) {
countDown = tenMinute;
return delay(10);
}
if(digitalRead(4)) {
if(pause) {
pause = 0;
countDown = tmp;
lcd.setCursor(0, 1);
lcd.print("");
}
else {
pause = 1;
tmp = countDown;
countDown = -1;
lcd.setCursor(0, 1);
lcd.print("pasue");
delay(1000);
}
}
if(countDown >= 0) {
// 設定 LCD 陣列的 Columns 及 rows
lcd.begin(16, 2);
// 輸出訊息至 LCD
lcd.print(countDown/60);
lcd.print(":");
lcd.print(countDown%60);
--countDown;
delay(1000);
}
}
```
## [實作有四種聲音的鋼琴鋼琴](https://www.tinkercad.com/things/33eOxkVTgZJ-stunning-jaiks-leelo/editel?sharecode=4BiRCtDn4pv_GBv5DYdvyMr2GH-u56ygvMVzmKlpqPY)

```C++
// C++ code
//
/*
Keyboard
Plays a pitch that changes based on a changing
input circuit:
* 3 pushbuttons from +5V to analog in 0 through
* 3 10K resistors from analog in 0 through 3 to ground
* 8-ohm speaker on digital pin 8
*/
void setup()
{
pinMode(8, OUTPUT);
pinMode(A0, INPUT);
pinMode(A1, INPUT);
pinMode(A2, INPUT);
pinMode(A3, INPUT);
}
void loop()
{
// if button press on A0 is detected
if (digitalRead(A0) == HIGH) {
tone(8, 440, 100); // play tone 57 (A4 = 440 Hz)
}
// if button press on A1 is detected
if (digitalRead(A1) == HIGH) {
tone(8, 494, 100); // play tone 59 (B4 = 494 Hz)
}
// if button press on A2 is detected
if (digitalRead(A2) == HIGH) {
tone(8, 523, 100); // play tone 60 (C5 = 523 Hz)
}
// if button press on A3 is detected
if (digitalRead(A3) == HIGH) {
tone(8, 587, 100); // play tone 62 (D5 = 587 Hz)
}
delay(10); // Delay a little bit to improve simulation performance
}
```
## [倒車雷達](https://www.tinkercad.com/things/g26QRqYMIQq-incredible-luulia-fulffy/editel?sharecode=N28sKkzYv-pNaaKb-tApmfwKdUusub1fRGwjMGk43L0)

```c++
const int SENSOR_PIN=A0;
const int BUZZER_PIN=A1;
const int BUZZER_FREQUENCE=200;
const int DANGER_DISTANCE=200;
int duration=0;
int counter=0;
int cm=0;
void setup()
{
Serial.begin(9600);
pinMode(BUZZER_PIN,OUTPUT);
}
long microsecondsToCentimeters(long microseconds) // get distance from duration
{
return microseconds / 29 / 2;
}
void loop()
{
// send a signal
pinMode(SENSOR_PIN, OUTPUT);
digitalWrite(SENSOR_PIN, LOW);
delayMicroseconds(2);
digitalWrite(SENSOR_PIN, HIGH);
delayMicroseconds(5);
digitalWrite(SENSOR_PIN, LOW);
// receive signal
pinMode(SENSOR_PIN, INPUT);
duration = pulseIn(SENSOR_PIN, HIGH);
// compute distance from signal duration
cm = microsecondsToCentimeters(duration);
if(cm<(DANGER_DISTANCE/100))// extreme dangerous
{
tone(BUZZER_PIN, BUZZER_FREQUENCE, 1000);
delay(1000);
}
else if(cm<DANGER_DISTANCE)// dager, higher frquence when closer distance
{
for(int i=0;i<DANGER_DISTANCE/cm;i++){
tone(BUZZER_PIN, BUZZER_FREQUENCE, 100);
delay(1000/DANGER_DISTANCE*cm);
}
}
}
```
## 問答題
### 伺服馬達運作原理

伺服馬達的基本原理是接受 PWM 訊號,經由內部電路計算出馬達的轉動角度,大多數伺服馬達旋轉角度是 0 到 180 度,PWM 訊號的頻率必須是 50 Hz,控制馬達角度的脈衝持續時間約是 1.0 ms 到 2.0 ms,脈衝持續時間若為 1.0 ms 時角度為 0 度,1.2 ms 時角度為 45 度,1.5 ms 時角度為 90 度,2.0 ms 時角度為 180 度。
伺服電機分為交流和直流兩種
直流伺服電機機體較細長,轉子慣性較小,且具有線性反應佳與簡單易於控制特性.直流伺服電機操作容易,旋轉方向由電流決定,旋轉速度由改變電壓來控制
交流伺服電機使用在感應電機與交流無刷電機。為了讓感應電機變化旋轉速度,必須改變電源頻率.無刷伺服馬達的控制原理是將鐵製核心置於外部。當轉子成為暫時性的磁鐵,定子則成為繞鐵線圈。外部電路的電流將會在既定的轉子位置進行反轉。所以,此款伺服馬達是由交流電所驅動的。
### LCD螢幕運作說明
主要是利用前後偏光片與前後導電玻璃(透明電極)之間的液晶分子改變極化光的極化方向,造成每一個畫素亮(白)與暗(黑)的變化,再利用彩色濾光片產生紅(R)、綠(G)、藍(B)三種不同顏色排列組合成我們所看到的影像
#### 流程:LED發出白光,經過導光板照亮整個畫面>穿過擴散膜讓光更柔和>稜鏡膜把光集中到一定角度,確保光往正確的方向走>後偏光片讓光極化,只讓特定特定方向的光通過>後透明電極,通電影響液晶分子排列>薄膜電晶體(TFT)控制電壓大小>前透明電極>穿過彩色濾光片>前偏光片>產生畫面

## 「如何把文組的同學教會寫程式」微講座心得 至少 150 字
> 這次浩文老師的課程我很喜歡,互動性十足。從 slido 到問卷填答、統計資料,還有線上的背景調查,整堂課程沒有無聊想睡的環節。
> 與不同背景的人溝通合作也幾乎是每個人的必修課,因為現在這個時代已經無法單打獨鬥樣樣來,由不同背景的人組成團隊已成必然。
> 「用他的語言講給他聽」整堂課的重點濃縮大概就是這句話了。至於要如何知道對方的背景,知道對方的語言,那也是必須要練習的了。
> [name=楊傑安]
這次演講的內容真的很活潑,也很有趣,透過很多互動跟活動讓我們一直專注在演講上面。從做問卷到分析問卷後的每個意義,告訴我們要去了解不同行業的人怎麼想。在告訴不是同行業的人時,也要站在他的角度告訴他你的專業,也透過看影片的方式,讓大家了解到其實一個團隊裡面大家不能只會自己領域方面的事,各方面的了解會讓整個團隊行動起來更流暢。
> [name=陳靖潍]
>浩文老師從一開場就給人一種強烈開朗風趣的感覺,不管是對於希望大家一起放開心胸感受遠距教學,到後來一起填的一份多元領域問卷,老師用很輕鬆寫意的方式帶領大家探討跨領域合作的嚴肅議題。
>從在學校的同儕之間到未來出社會之後更為緊湊的跨領域合作,如何理解並有效的和背景完全不同的成員進行溝通,完成彼此的責任和共同目標,是最重要的能力。
> [name=洪宇辰]
>這次浩文老師的課程我最印象深刻的就是問卷填答的部分,浩文老師捨棄以往演講都是單方面的給予,改成利用問卷調查的方式,造成非常多的互動,整個演講都很有趣。浩文老師利用問券的方式,讓這個來自很多很多科系的新科技、新媒體的的人對彼此有更深的了解。甚至在進一步的給我們未來進入職場非常重要的團隊合作的啟發。
>[name=李智宇]
>
>上周可以有幸參與張老師的演講,我個人覺得真的收穫了很多的。在課程中講師有給我們做一下小測驗,讓我們簡單了解一下針對不同背景的人,會有怎樣的想法。我覺得這個測驗真的還滿有趣的。後來講師開始分享給我們知道業界目前比較喜歡那類型的人才。其中教會我們最重要的一點就是溝通,如果我們不懂得溝通,真的很難和其他人合作。特別是和一位比較喜歡刁難我們的外國人,懂得用別人的語言讓人家覺得我們真心想了解和解決問題。這一點真的很重要的。
>[name=顏偉勝]