Arduino微控智學創新
===
# 01_109/03/03
## 程式一:用函式點亮LED:
```cpp
#define LED1 8
#define LED2 9
#define LED3 10
#define LED4 11
void blink1(int);
void setup() {
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
}
void loop()
{
blink1(LED1);
blink1(LED2);
blink1(LED3);
blink1(LED4);
}
void blink1(int a)
{
digitalWrite(a, LOW);
delay(500);
digitalWrite(a, HIGH);
delay(500);
}
```
## 程式二:變數delay控制LED
```cpp
#define LED1 8
#define LED2 9
#define LED3 10
#define LED4 11
void blink1(int,int);
void setup() {
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
}
void loop()
{
blink1(LED1,300);
blink1(LED2,600);
blink1(LED3,900);
blink1(LED4,1200);
}
void blink1(int a,int b)
{
digitalWrite(a, LOW);
delay(b);
digitalWrite(a, HIGH);
delay(b);
}
```
# 02_109/03/10
## 程式一:ON/OFF雙按鈕控制繼電器
```cpp
#define RY 11
#define S1 A4
#define S2 A5
void setup() {
pinMode(RY, OUTPUT);
digitalWrite(RY, 0);
}
void loop() {
int i = digitalRead(S2);
if (!i) {
digitalWrite(RY, 1);
}
else {
int j = digitalRead(S1);
if (!j)digitalWrite(RY, 0);
}
delay(100);
}
```
## 程式二:單按鈕控制1個LED燈
```cpp
#define S1 A5
#define LED 11
int a=1;
void setup()
{
pinMode(LED, OUTPUT);
digitalWrite(LED, 1);
}
void loop()
{
int i = digitalRead(S1);
if (!i) {
while (!i) {
i = digitalRead(S1);
}
a=!a;
digitalWrite(LED, a);
}
delay(100);
}
```
# 03_109/03/17
## 程式一:按鈕控制LED&蜂鳴器單獨發聲
```cpp
#define S1 A5
#define LED 13
#define BZ 3
int a = 1; //儲存LED目前狀態
void setup() {
pinMode(LED, OUTPUT);
pinMode(BZ, OUTPUT);
digitalWrite(LED, a);
}
void loop() {
int i = digitalRead(S1);
if (!i)
{
tone(BZ,5000);
delay(100);
noTone(BZ);
while (!i)
{
i = digitalRead(S1);
}
a = !a; //LED反相
digitalWrite(LED, a);
}
}
```
### 程式二:按鈕控制5個LED依序點亮&蜂鳴器單獨發聲
```cpp
#define S1 A5
#define BZ 3
int LED[5] = {11, 10, 9, 8, 7};
int a = 0;
void setup()
{ pinMode(BZ, OUTPUT);
for (int i; i < 5; i++)
{
pinMode(LED[i], OUTPUT);
digitalWrite(LED[i], 1);
}
digitalWrite(LED[a], 0);
}
void loop()
{
int i = digitalRead(S1);
if (!i) {
tone(BZ, 5000);
delay(100);
noTone(BZ);
while (!i) i = digitalRead(S1);
digitalWrite(LED[a], i);
if(++a==5) a=0;
digitalWrite(LED[a],0);
}
}
```
# 04_109/03/24
## 程式一:

```cpp
const int DIP[4] = {A2, A3, A4, A5};
const int LED[10] = {11, 10, 9, 8, 7, 6, 5, 4, 3, 2};
int sw[4] = {1, 1, 1, 1};
void setup() {
for (int i = 0; i < 10; i++)
{
pinMode(LED[i], OUTPUT);
digitalWrite(LED[i], 1);
}
}
void loop() {
for (int i = 0; i < 4; i++)
sw[i] = digitalRead(DIP[i]);
if (sw[0] == 0 && sw[1] == 1 && sw[2] == 1 && sw[3] == 1)//F1
{
F1();
}
else if (sw[0] == 1 && sw[1] == 0 && sw[2] == 1 && sw[3] == 1)
{
LEDOFF();
F2();
}
else if (sw[0] == 1 && sw[1] == 1 && sw[2] == 0 && sw[3] == 1)
{
LEDOFF();
F3();
}
else if (sw[0] == 1 && sw[1] == 1 && sw[2] == 1 && sw[3] == 0)
{
F4();
}
else
{
LEDOFF();
digitalWrite(LED[4], 0);
}
}
void F1()
{
for (int i = 0; i < 10; i++) digitalWrite(LED[i], 0);
delay(200);
for (int i = 0; i < 10; i++) digitalWrite(LED[i], 1);
delay(200);
}
void LEDOFF()
{
for (int i = 0; i < 10; i++)
digitalWrite(LED[i], 1);
}
void F2()
{
for (int i = 0 ; i < 10; i++)
{
digitalWrite(LED[i], 0);
delay(100);
digitalWrite(LED[i], 1);
}
}
void F3()
{
for (int i = 9; i >= 0; i--)
{
digitalWrite(LED[i], 0);
delay(100);
digitalWrite(LED[i], 1);
}
}
void F4()
{
LEDOFF();
F2();
F3();
}
```
### 程式二:四個指撥開關控制六種不同燈的表現(多了來回燈)
```cpp
const int DIP[4] = {A2, A3, A4, A5};
const int LED[10] = {11, 10, 9, 8, 7, 6, 5, 4, 3, 2};
int sw[4] = {1, 1, 1, 1};
void setup() {
for (int i = 0; i < 10; i++)
{
pinMode(LED[i], OUTPUT);
digitalWrite(LED[i], 1);
}
}
void loop() {
for (int i = 0; i < 4; i++)
sw[i] = digitalRead(DIP[i]);
if (sw[0] == 0 && sw[1] == 1 && sw[2] == 1 && sw[3] == 1)//F1
{
F1();
}
else if (sw[0] == 1 && sw[1] == 0 && sw[2] == 1 && sw[3] == 1)
{
LEDOFF();
F2();
}
else if (sw[0] == 1 && sw[1] == 1 && sw[2] == 0 && sw[3] == 1)
{
LEDOFF();
F3();
}
else if (sw[0] == 1 && sw[1] == 1 && sw[2] == 1 && sw[3] == 0)
{
F4();
}
else if (sw[0] == 0 && sw[1] == 0 && sw[2] == 0 && sw[3] == 0)
{
F5();
}
else if (sw[0] == 1 && sw[1] == 1 && sw[2] == 1 && sw[3] == 1)
{
F6();
}
}
void F1()
{
for (int i = 0; i < 10; i++) digitalWrite(LED[i], 0);
delay(200);
for (int i = 0; i < 10; i++) digitalWrite(LED[i], 1);
delay(200);
}
void LEDOFF()
{
for (int i = 0; i < 10; i++)
digitalWrite(LED[i], 1);
}
void F2()
{
for (int i = 0 ; i < 10; i++)
{
digitalWrite(LED[i], 0);
delay(100);
digitalWrite(LED[i], 1);
}
}
void F3()
{
for (int i = 9; i >= 0; i--)
{
digitalWrite(LED[i], 0);
delay(100);
digitalWrite(LED[i], 1);
}
}
void F4()
{
LEDOFF();
F2();
F3();
}
void F5()
{
LEDOFF();
for(int i=0;i<5;i++)
{
digitalWrite(LED[i],0);
digitalWrite(LED[9-i],0);
delay(200);
}
}
void F6()
{
LEDOFF();
for(int i=5;i>=0;i--)
{
digitalWrite(LED[i],0);
digitalWrite(LED[9-i],0);
delay(200);
}
}
```
# 05_109/04/14
## 程式一:用滑動式電位計控制LED亮度

```cpp
#define LED 11
#define pot A5
void setup() {
pinMode(LED, OUTPUT);
digitalWrite(LED, 1);
Serial.begin(9600);
}
void loop() {
int i = analogRead(pot);
int j = map(i, 0, 1023, 0, 30);
analogWrite(LED, 255-j);
Serial.print("pot讀的數值=");
Serial.print(i);
Serial.print(" LED顯示的亮度數值=");
Serial.println(j);
delay(200);
}
```
# 06_109/04/21
## 程式一:Serial視窗輸入0~9控制LED亮度
```
說明:
Serial視窗輸入0~9控制LED亮度,其中0為最暗,9為最亮
Serial輸入格式如下:
假設輸入為:'1' Serial視窗輸出為:
鍵盤輸入的是:『1』
亮度等級為:『1』
```
```cpp=
#define LED 11
void ShowLED(int);
int in = 0;
void setup()
{
pinMode(LED, OUTPUT);
digitalWrite(LED, 1);
Serial.begin(9600);
}
void loop()
{
if (Serial.available() > 0)
{
in = Serial.read();
Serial.print("鍵盤輸入的是:『 ");
Serial.print(in - 48);
Serial.println("』");
in = in - '0';
if (in >= 0 && in <= 9 )
{
ShowLED(in);
}
}
}
void ShowLED(int level)
{
int i = map(level, 0, 9, 255, 0);
Serial.print("亮度等級為=『");
Serial.print(level);
Serial.println("』");
analogWrite(LED, i);
}
```
## 程式二:
```
功能:判斷Serial輸入幾個字元,根據輸入1~2個字元回饋字元數
ex.
輸入"72"+"enter" 輸出視窗會顯示:"現在輸入2個字元"
輸入"5"+"enter" 輸出視窗會顯示:"現在輸入1個字元"
```
```cpp
#define LED 11
char recData[6] = {0, 0, 0, 0, 0, 0};
int i = 0 , recN = 0;
void setup()
{
pinMode(LED, OUTPUT);
digitalWrite(LED, 1);
Serial.begin(9600);
}
void loop()
{
if (Serial.available() > 0)
{
CLR_recData();
recN = Serial.readBytesUntil(13, recData, 6);
if (recN == 1)
{
Serial.println("現在輸入一個字元");
}
if (recN == 2)
{
Serial.println("現在輸入兩個字元");
}
}
}
void CLR_recData()
{
for (int i = 0; i < 6; i++)
recData[i] = 0;
}
```
# 07-109/4/28
## 程式一:
```
功能:Serial輸入數字和利用u.d調整亮度,並回饋
ex.輸入:87
輸出:
LED亮度等級為『87』
再輸入:U
輸出:
目前輸入的key為『U』
LED亮度等級為『97』
```
```cpp
#define LED 11
char recData[6] = {0, 0, 0, 0, 0, 0};
int i = 0, recN = 0;
void ShowLED(int level);
int LED_LEVEL = 0;
void setup()
{
pinMode(LED, OUTPUT);
digitalWrite(LED, 1);
Serial.begin(9600);
}
void loop()
{
if (Serial.available() > 0)
{
CLR_recData();
recN = Serial.readBytesUntil(13, recData, 6);
if (recN == 1)
{
if (recData[0] >= '0' && recData[0] <= '9')
{
//Serial.println("現在輸入1個字元");
// Serial.println(recData[0]);
LED_LEVEL = recData[0] - '0';
ShowLED(recData[0] - '0');
}
if (recData[0] == 'D'||recData[0] == 'd')
{
Serial.print("目前輸入的key為『");
Serial.print(recData[0]);
Serial.println("』");
if (LED_LEVEL >= 10)
{
LED_LEVEL -= 10;
ShowLED(LED_LEVEL);
}
else
{
LED_LEVEL = 0;
ShowLED(LED_LEVEL);
}
}
if (recData[0] == 'U'||recData[0] == 'u')
{
Serial.print("目前輸入的key為『");
Serial.print(recData[0]);
Serial.println("』");
if (LED_LEVEL <= 89)
{
LED_LEVEL += 10;
ShowLED(LED_LEVEL);
}
else
{
LED_LEVEL = 99;
ShowLED(LED_LEVEL);
}
}
}
if (recN == 2)
{
//Serial.println("現在輸入2個字元");
/*
Serial.println(recData[0]);
Serial.println(recData[1]);*/
int a = (recData[0] - '0') * 10 + (recData[1] - '0');
//Serial.println(a);
LED_LEVEL = a;
ShowLED(a);
}
}
}
void CLR_recData()
{
for (int i = 0; i < 6; i++)
recData[i] = 0;
}
void ShowLED(int level)
{
int i = map (level, 0, 99, 255, 0);
// Serial.print("LED 亮度= " );
// Serial.println(255 - i);
Serial.print("LED亮度等級=『");
Serial.print(level);
Serial.println("』");
Serial.println("-------------");
analogWrite(LED, i);
}
```
# 08_109/5/5
## 程式一:
==電路圖==

==程式碼==
```cpp
const int seg7[] = {7, 8, 9, 10, 11, 12, 13};
const int TAB[] = {0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x58, 0x00, 0x10};
const int scan[]={6,5,4,3};
void setup()
{
for (int i = 0; i < 7; i++)
{
pinMode(seg7[i], OUTPUT);
digitalWrite(seg7[i], 1 );
//delay(1000);
}
for (int i = 0; i < 4; i++)
{
pinMode(scan[i], OUTPUT);
digitalWrite(scan[i], 1 );
//delay(1000);
}
}
void loop()
{
turn_off_seg7();
OutPort(TAB[0]);
digitalWrite(scan[0],0);
delay(5);
turn_off_seg7();
OutPort(TAB[1]);
digitalWrite(scan[1],0);
delay(5);
// for (int i = 0 ; i < 10; i++)
// {
// OutPort(TAB[i]);
// delay(100);
// }
}
void OutPort(int dat)
{
for (int i = 0; i < 7; i++)
{
if (dat % 2 == 1)
{
digitalWrite(seg7[i], 1);
}
else
{
digitalWrite(seg7[i], 0);
}
dat = dat / 2;
}
}
void turn_off_seg7()
{
for(int i=0;i<4;i++)
digitalWrite(scan[i],1);
}
```
# 08_109/5/12
==電路圖==

==程式碼==
```cpp
const int seg7[] = {7, 8, 9, 10, 11, 12, 13};
const int TAB[] = {0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x58, 0x00, 0x10};
const int scan[] = {6, 5, 4, 3};
int Disp[] = {0, 5, 1, 2};
int disp_v = 0000;
unsigned long A = 0, B = 0;
int mm = 0, ss = 0;
void setup()
{
for (int i = 0; i < 7; i++)
{
pinMode(seg7[i], OUTPUT);
digitalWrite(seg7[i], 1 );
//delay(1000);
}
for (int i = 0; i < 4; i++)
{
pinMode(scan[i], OUTPUT);
digitalWrite(scan[i], 1 );
//delay(1000);
}
A = millis();
}
void loop()
{
// Disp[0] = disp_v / 1000;
// Disp[1] = (disp_v / 100) % 10;
// Disp[2] = (disp_v / 10) % 10;
// Disp[3] = disp_v % 10;
Disp[0] = mm / 10;
Disp[1] = mm % 10;
Disp[2] = ss/ 10;
Disp[3] = ss % 10;
for (int i = 0 ; i < 4; i++)
{
turn_off_seg7();
OutPort(TAB[Disp[i]]);
digitalWrite(scan[i], 0);
delay(5);
}
B = millis();
if ((B - A) > 100)
{
if(ss<59)
{
ss++;
}
else
{
ss=0;
mm++;
}
if(mm>59)
{
mm=0;
}
A=millis();
}
}
void OutPort(int dat)
{
for (int i = 0; i < 7; i++)
{
if (dat % 2 == 1)
{
digitalWrite(seg7[i], 1);
}
else
{
digitalWrite(seg7[i], 0);
}
dat = dat / 2;
}
}
void turn_off_seg7()
{
for (int i = 0; i < 4; i++)
digitalWrite(scan[i], 1);
}
```
# 09_109/5/19
==基本程式碼==
```cpp
/* ========== ch3_4_1.ino ============
* A4腳連接P18-1,SDA
* A5腳連接P18-2,SCL
*/
//========== 整體宣告部分 ============
#include <Wire.h> //包含Wire.h標頭檔
#include <SparkFun_MMA8452Q.h> //包含SparkFun_MMA8452Q.h標頭檔
MMA8452Q myAcc; //建構MMA8452Q物件
//========== 初始設定部分 ============
void setup()
{ myAcc.init(); //MMA8452Q初始化,而I2C位址自動為0x1d
Serial.begin(9600); //啟用串列埠
}
//========== 主程式部分 ============
void loop()
{ if(myAcc.available()); //若MMA8452Q資料備妥
{ myAcc.read(); //讀取MMA8452Q資料
//===== 顯示X軸加速度值 ======
Serial.print("Accelerometer X:");
Serial.println(myAcc.x, 10); //十進位數字
//===== 顯示Y軸加速度值 ======
Serial.print("Accelerometer Y:");
Serial.println(myAcc.y, 10); //十進位數字
//===== 顯示Z軸加速度值 ======
Serial.print("Accelerometer Z:");
Serial.println(myAcc.z, 10);//十進位數字
Serial.println();
//===== 顯示重力加速度值(g值) =====
Serial.println("Rescale:");
Serial.print(myAcc.cx, 3);
Serial.print(", ");
Serial.print(myAcc.cy, 3);
Serial.print(", ");
Serial.println(myAcc.cz, 3);
Serial.println();
//===== 顯示晶片方向 =====
int dir = myAcc.readPL();
switch (dir)
{ case PORTRAIT_U:
Serial.println("PORTRAIT UP");
break;
case PORTRAIT_D:
Serial.println("PORTRAIT DOWN");
break;
case LANDSCAPE_L:
Serial.println("LANDSCAPE LEFT");
break;
case LANDSCAPE_R:
Serial.println("LANDSCAPE RIGHT");
break;
case LOCKOUT:
Serial.println("FLAT");
break;
}
delay(5000); //停滯5秒
}
}
```
==延伸程式碼==
```cpp
#include <Wire.h>
#include <SparkFun_MMA8452Q.h>
MMA8452Q myAcc;
const int LED[10] = {12, 11, 10, 9, 8, 7, 6, 5, 4, 3};
int x=0;
void setup()
{
for (int i = 0; i < 10; i++)
{
pinMode(LED[i], OUTPUT);
digitalWrite(LED[i], 1);
delay(500);
}
myAcc.init();
Serial.begin(9600);
}
void loop()
{
if(myAcc.available())
{
myAcc.read();
x=myAcc.x;
x=map(x,-1023,1023,-5,5);
Serial.println(x);
}
switch(x)
{
case -5:
digitalWrite(LED[0],0);
break;
case -4:
digitalWrite(LED[1],0);
break;
case -3:
digitalWrite(LED[2],0);
break;
case -2:
digitalWrite(LED[3],0);
break;
case -1:
digitalWrite(LED[4],0);
break;
case 1:
digitalWrite(LED[5],0);
break;
case 2:
digitalWrite(LED[6],0);
break;
case 3:
digitalWrite(LED[7],0);
break;
case 4:
digitalWrite(LED[8],0);
break;
case 5:
digitalWrite(LED[9],0);
break;
}
delay(50);
for(int i=0 ;i<10;i++)
{
digitalWrite(LED[i],1);
}
}
```
# 10_109/06/02
==測試馬達==
```cpp
#define MIA 10
#define MIB 11
void setup()
{
pinMode(MIA,OUTPUT);
pinMode(MIB,OUTPUT);
digitalWrite(MIA,0);
digitalWrite(MIB,0);
}
void loop()
{
digitalWrite(MIA,0);
digitalWrite(MIB,1);
delay(1000);
digitalWrite(MIA,0);
digitalWrite(MIB,0);
delay(1000);
digitalWrite(MIA,1);
digitalWrite(MIB,0);
delay(1000);
digitalWrite(MIA,0);
digitalWrite(MIB,0);
delay(1000);
}
```
==程式一==
```cpp
#define S1 A5
#define LED 13
#define BZ 3
#define MIA 10
#define MIB 11
int a = 1; //儲存LED目前狀態
void setup() {
pinMode(LED, OUTPUT);
pinMode(BZ, OUTPUT);
digitalWrite(LED, a);
}
void loop() {
int i = digitalRead(S1);
if (!i)
{
tone(BZ, 5000);
delay(100);
noTone(BZ);
while (!i)
{
i = digitalRead(S1);
}
a = !a; //LED反相
digitalWrite(LED, a);
}
if (a == 0)
{
digitalWrite(MIA, 0);
digitalWrite(MIB, 1);
}
else
{
digitalWrite(MIA, 1);
digitalWrite(MIB, 0);
}
}
```
# 11_109/06/09
==用途==
控制馬達的正反轉
==程式碼==
```cpp
#define S1 A5
#define BZ 3
#define MIA 10
#define MIB 11
const int LED[3] = {7,6,5};
int a = 1; //儲存LED目前狀態
int count=0;
int X=0;
void setup() {
pinMode(LED, OUTPUT);
pinMode(BZ, OUTPUT);
digitalWrite(LED, a);
for (int i = 0; i < 3; i++)
{
pinMode(LED[i], OUTPUT);
digitalWrite(LED[i], 1);
}
}
void loop() {
int i = digitalRead(S1);
if (!i)
{
tone(BZ, 5000);
delay(100);
noTone(BZ);
while (!i)
{
i = digitalRead(S1);
}
count += 1;
X = count%3;
}
if (X == 1)
{
LEDOFF();
digitalWrite(MIA, 0);//反轉
digitalWrite(MIB, 1);
digitalWrite(LED[0],0);
}
else if (X == 2)
{
LEDOFF();
digitalWrite(MIA, 1);//正轉
digitalWrite(MIB, 0);
digitalWrite(LED[1],0);
}
else
{
LEDOFF();
digitalWrite(MIA, 0);
digitalWrite(MIB, 0);
digitalWrite(LED[2],0);
}
}
void LEDOFF()
{
for (int i = 0; i < 3; i++)
digitalWrite(LED[i], 1);
}
```