# Arduino課堂練習
## LED閃爍實驗
### 一顆LED ch4-1
讓一顆LED發亮
#### 電路圖

#### 程式碼
```cpp=
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
```
### 霹靂燈來回變化
四顆燈泡能輪流發亮
#### 電路圖

#### 程式碼 ch4-3a
```c=
const int led[] = {10,11,12,13};
int i;
int j=0;
int direct=0;
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
for(i=0;i<4;i++){
pinMode(led[i], OUTPUT);
}
}
// the loop function runs over and over again forever
void loop() {
for(i=0;i<4;i++){
digitalWrite(led[i], LOW);
}
digitalWrite(led[j], HIGH);
delay(200);
if(direct==0)
{
if (j==3)
direct=1;
else
j=j+1;
}
// wait for a second.3
else
{
if(j==0)
direct=0;
else
j=j-1;
}
}
```
### 呼吸燈來回變化
四科呼吸燈來回閃爍
#### 程式碼 ch4_5
```c=
const int led[] = {3,5,6,9};
int i;
int j=0;
int direct=0;
int brightness=0;
int lighten = 5;
// the setup function runs once when you press reset or power the board
void setup() {
}
// the loop function runs over and over again forever
void loop() {
analogWrite(led[i],brightness);
delay(50);
if(direct==0)
{
if(brightness<=250)
brightness = brightness+lighten;
else
direct =1;
}
else
{
if(brightness>0)
brightness = brightness-lighten;
else
{
direct=0;
i++;
if(i>=4)
i=0;
}
}
}
```
## 串列埠實驗
### Arduino傳送訊息給電腦
按下按鍵傳送給電腦
#### 操作畫面截圖(Serial Monitor)

#### 程式碼 ch6-1
```cpp=
byte val=65;
void setup()
{
Serial.begin(9600);
}
void loop()
{
for(int i=0;i<26;i++)
{
Serial.write(val+i);
Serial.print("=");
Serial.println(val+i);
delay(1000);
}
}
```
### Arduino 接收電腦訊息
讓Arduino接收到輸入的訊息
#### 操作畫面截圖和拍照(Serial Monitor)

#### 程式碼
``` cpp=
int num =0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
if(Serial.available()>0)
{
num=Serial.read();
Serial.print("received:");
Serial.println(num,DEC);
}
}
```
### Arduino傳送LED狀態給電腦
列出目前的LED燈狀態於螢幕上
#### 操作畫面截圖

#### 程式碼
``` cpp=
int led[]={10,11,12,13};
int i,j;
void setup()
{
Serial.begin(9600);
for(i=0;i<4;i++)
pinMode(led[i],OUTPUT);
}
void loop()
{
for(i=0;i<4;i++)
{
digitalWrite(led[i],HIGH);
Serial.print("LED=");
for(j=0;j<4;j++)
{
if(j==i)
Serial.print("1");
else
Serial.print("0");
}
Serial.println();
delay(1000);
digitalWrite(led[i],LOW);
}
}
```
### 鍵盤控制LED閃爍速度
利用鍵盤輸入數字,控制時間的間隔
#### 操作畫面截圖和拍照(Serial Monitor)
#### 程式碼
``` cpp=
const int led=13;
int key=0,flash=0,keydata=0;
void setup(){
Serial.begin(9600);
pinMode(led,OUTPUT);
digitalWrite(led,LOW);
}
void loop(){
if(Serial.available()>0)
{
key = Serial.read();
key=key-'0';
if(key>=0 && key<=9)
keydata=key;
}
if(keydata=0)
digitalWrite(led,LOW);
else
{
flash=keydata*100;
digitalWrite(led,HIGH);
delay(flash);
digitalWrite(led,LOW);
delay(flash);
}
}
```
## 心得感想
經過這次的Arduino課程,我學習到了基本的電路串接,包含led正負極、麵包板、UNO、按壓開關的串接、電阻的運用等,還有學到了命令Arduino的程式語法,如何控制燈泡和要怎麼讓Arduino傳送LED狀態給電腦,及電壓和接地的概念,讓我對電路和Aduino有更進一步的認識。
## 按鈕開關實驗
### 按鈕開關控制一個LED明暗
利用按鈕控制LED明或暗
#### 電路圖

#### 操作畫面截圖

#### 程式碼
```cpp=
const int sw=2;
const int led=13;
const int debounceDelay=20;
int ledStatus=LOW;
int val;
void setup() {
pinMode(sw, INPUT_PULLUP);
pinMode(led,OUTPUT);
}
void loop() {
val=digitalRead(sw);
if(val==LOW)
{
delay(debounceDelay);
while(digitalRead(sw)==LOW)
;
ledStatus=!ledStatus;
digitalWrite(led,ledStatus);
}
}
```
### 按鈕開關控制四個LED方向移位
用按鈕控制燈泡輪流閃爍
#### 電路圖

#### 操作畫面截圖

#### 程式碼 ch5-4
```cpp=
const int sw = 2;
const int led[] = {10, 11, 12, 13};
const int debounceDelay = 20;
int val;
int i;
int j = 3;
int direct = 0;
void setup()
{
pinMode(sw, INPUT_PULLUP);
for (i = 0; i < 4; i++)
pinMode(led[i], OUTPUT);
}
void loop()
{
val = digitalRead(sw);
if (val == LOW)
{
delay(debounceDelay);
while (digitalRead(sw) == LOW)
;
direct = !direct;
}
for (i = 0; i < 4; i++)
digitalWrite(led[i], LOW);
if (direct == 0)
{
digitalWrite(led[j], HIGH);
delay(500);
if (j == 0)
j = 3;
else
j--;
}
else
{
digitalWrite(led[j], HIGH);
delay(500);
if (j == 3)
j = 0;
else
j++;
}
}
```
## 類比電路實驗
### 電位器調光實驗
利用電位器調整亮度
#### 電路圖

#### 操作畫面截圖

#### 程式碼 ch8-2
```cpp=
const int led=10;
int val;
void setup ( )
{
}
void loop ( )
{
val=analogRead (0);
val=map (val,0,1023,0,255);
analogWrite (led, val);
}
```
### 電位器控制燈泡閃爍
利用電位器調整閃爍速度
#### 電路圖

#### 操作畫面截圖

#### 程式碼 ch8-3
```cpp=
const int led = 10;
int val;
void setup() {
pinMode(led, OUTPUT);
digitalWrite(led, LOW);
}
void loop() {
val = analogRead(0);
val = map(val, 0, 1023, 1000, 50);
digitalWrite(led, HIGH);
delay(val);
digitalWrite(led, LOW);
delay(val);
}
```
### 光敏電阻
使用光敏電阻控制燈泡明暗
#### 電路圖

#### 操作畫面截圖

#### 程式碼 ch8-5
```cpp=
const int cds = 0;
const int led = 10;
int val;
void setup()
{
pinMode(led, OUTPUT);
digitalWrite(led, LOW);
}
void loop()
{
val = analogRead(cds);
if (val > 512)
digitalWrite(led, HIGH);
else
digitalWrite(led, LOW);
}
```
## 心得感想(二)
經過這次的課程我學到了更多Aduino的配件應用,按鈕、光敏電阻及可變電阻讓燈泡的應用更多樣化,包誇閃爍順序和明暗等,使用成功後對Aduino的興趣更深了。希望以後能製作一些小專案。