以下為Arduino Uno板的ThreeLevel_cdMotor實驗
需要材料:
Wire: n個
Button: 兩個
330Ω Resistor: 九個
10kΩ Resistor: 兩個
Potentiometer: 一個(不限電駔大小)
LED: 三個
IC 7447: 一個
H-Seven-segment display: 一個
DC Motor: 一個
Arduino Uno: 一個
Breadboard: 兩個
電路圖(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); } }