以下為Arduino Uno板的threeLevel_Motor實驗
需要材料:
Wire: n個
Button: 兩個
330Ω Resistor: 九個
10kΩ Resistor: 兩個
Potentiometer: 一個(不限電駔大小)
LED: 三個
IC 7447: 一個
H-Seven-segment display: 一個
Arduino Uno: 一個
Breadboard: 兩個
DC Motor: 一個
電路圖(Circuit diagram)

程式碼(Code)
int potenPin = A4; //因為可變電阻輸出的是類比,所以要用A0~A5接收
int motorPin = 11; //對馬達的輸入
int buttonStop = 9; //停止馬達
int buttonLevel = 10; //啟動馬達轉速等級
const int NUM = 4; //要用到boolean[]內,要有const
int pins[NUM] = {5, 6, 7, 8}; //對應boolean的腳位,不用在[]內打內容???
const int motorLevel = 3; //馬達有的等級,要用到boolean[]內,要有const
#define t true //true等於HIHG,另一種寫法
#define f false //false等於LOW,另一種寫法
boolean data[motorLevel][NUM] = { //有3種變化(代表數字0~2),腳位有NUM個(4個輸出)
{f, f, f, t}, //1
{t, f, f, f}, //2
{t, f, f, t}, //3
};
int ledCount = 3; //使用的LED數量
int ledPins[] {
2, 3, 4}; //使用到的LED腳位
void setup() {
Serial.begin(9600);
pinMode(potenPin, INPUT);
pinMode(buttonLevel, INPUT);
pinMode(buttonStop, INPUT);
for (int i = 0; i < NUM; i++) {
pinMode(pins[i],OUTPUT);
}
pinMode(motorPin,OUTPUT);
for (int thisLed = 0; thisLed < ledCount; thisLed++) {
pinMode(ledPins[thisLed],OUTPUT);
}
}
void sevenSeg(int n) {
//用到的腳位,要輸出的腳位
//n等於要輸出的種類
for (int i = 0; i < NUM; i++) {
digitalWrite(pins[i],data[n][i] == t? HIGH : LOW);
}
}
void loop() {
int potenStates = analogRead(potenPin);
Serial.println(potenStates); //可變電阻
if (potenStates < 300) {
sevenSeg(0);
//要輸出的種類
}
else if (potenStates < 600) {
sevenSeg(1);
}
else if (600 < potenStates) {
sevenSeg(2);
}
int level = digitalRead(buttonLevel);
//Serial.println(level); //按鈕:啟動變速
if (level == HIGH) {
int potenStates = analogRead(potenPin);
//Serial.println(potenStates); //可變電阻
//得出可變電阻的範圍0~1023,跟有多少電阻值沒關西
if(potenStates < 300) {
analogWrite(motorPin,300);
digitalWrite(ledPins[0],HIGH);
digitalWrite(ledPins[1],LOW);
digitalWrite(ledPins[2],LOW);
}
else if(potenStates <600) {
//if是一段一段的讀區,所以當potenStates小300時,這裡才不會也執行
//因為上方以先執行了,就不會在往下確認
analogWrite(motorPin,600);
digitalWrite(ledPins[1],HIGH);
digitalWrite(ledPins[0],LOW);
digitalWrite(ledPins[2],LOW);
}
else if(600 < potenStates) {
//想要設定eles,就要在後方加上if,例如:else if(定義),不能直接else(定義)
analogWrite(motorPin,900);
digitalWrite(ledPins[2],HIGH);
digitalWrite(ledPins[0],LOW);
digitalWrite(ledPins[1],LOW);
}
}
int bStop = digitalRead(buttonStop);
if (bStop == HIGH) {
for(int s = 0; s < ledCount; s++) {
digitalWrite(ledPins[s],LOW);
}
digitalWrite(motorPin,LOW);
}
}