(一)數位輸入控制與Debounce
(二)Ardiuno語法基礎:if else if、digitalRead( )
(三)INPUT_PULLUP 模式
(四)單鍵開關、指撥開關
(五)七段顯示器
EX 5-1:修改「EX 3-3」範例,加入「指撥開關x 2」的功能
(1)指撥:ON→1 OFF→0
(2)指撥:10→四顆 LED,單顆左移循環
(3)指撥:01→四顆 LED,單顆右移循環
(4)指撥:11 → LED 1秒閃1次
(5)指撥:00 → LED 全滅
|
|
|
//修改「EX 3-3」範例,加入「指撥開關x 2」的功能 //(1)指撥:ON→1 OFF→0 //(2)指撥:10→四顆 LED,單顆左移循環 //(3)指撥:01→四顆 LED,單顆右移循環 //(4)指撥:11 → LED 1秒閃1次 //(5)指撥:00 → LED 全滅
const int LED[4]={10,11,12,13}; //定義第10~13腳接 LED int SW[2]={}; //陣列內容可以不寫 int i;
void setup() { for (i=0;i<=3;i=i+1) { pinMode(LED[i],OUTPUT); // 設定第10~13腳為輸出 } pinMode(2,INPUT); //定義第2~3腳接指撥開關 pinMode(3,INPUT); }
void loop() { SW[0]=digitalRead(2); SW[1]=digitalRead(3); if ((SW[1]==HIGH) && (SW[0]==LOW)) { for (i=0;i<=3;i=i+1) { digitalWrite(LED[i],HIGH); delay(1000); digitalWrite(LED[i],LOW); } } else if ((SW[1]==LOW) && (SW[0]==HIGH)) { for (i=3;i>=0;i=i-1) { digitalWrite(LED[i],HIGH); delay(1000); digitalWrite(LED[i],LOW); } } else if ((SW[1]==HIGH) && (SW[0]==HIGH)) { for (i=0;i<=3;i=i+1) { digitalWrite(LED[i],HIGH); } delay(1000); for (i=0;i<=3;i=i+1) { digitalWrite(LED[i],LOW); } delay(1000); } else { for (i=0;i<=3;i=i+1) { digitalWrite(LED[i],LOW); } } } |
Test 5-1:修改「EX 4-3」範例,加入「指撥開關x 3」的功能
|
https://electronics520.pixnet.net/blog/post/388156166
|
|
void setup()
{
}
void loop()
{
}
|
EX 5-2:BCD對共陽極七段顯示器「指撥開關x 4」的功能
(1)指撥:ON→0 OFF→1(利用 INPUT_PULLUP功能)
(2)指撥:0000~1001 →七段:0~9
(3)指撥:1010~1111 →七段:全滅
(4)利用「查表法」建立七段的字碼
|
|
|
//BCD對共陽極七段顯示器「指撥開關x 4」的功能 //(1)指撥:ON→0 OFF→1(利用 INPUT_PULLUP功能) //(2)指撥:0000~1001 →七段:0~9 //(3)利用「查表法」建立七段的字碼
const int seg_7A[7]={0,1,2,3,4,5,6}; //定義數位輸出接腳0~6分別接共陽極七段顯示器的 a ~ g const byte code[10]= //定義共陽極七段顯示器所要顯示的「字碼」,字碼代號為:1gfedcba {B11000000, B11111001, B10100100, B10110000, B10011001, B10010010, B10000010, B11111000, B10000000, B10010000}; int SW[4]={}; //定義 4pin 指撥開關 int i;
void setup() { for (i=0;i<=6;i=i+1) { pinMode(seg_7A[i],OUTPUT); // 設定第 0~6 腳為輸出。 } for (i=7;i<=10;i=i+1) { pinMode(i,INPUT_PULLUP); //定義第7~10腳接指撥開關 } }
void loop() { int number=0; SW[0]=digitalRead(7); number=number+SW[0]; SW[1]=digitalRead(8); number=number+SW[1]*2; SW[2]=digitalRead(9); number=number+SW[2]*4; SW[3]=digitalRead(10); number=number+SW[3]*8;
if (number<=9) { for (i=0;i<=6;i=i+1) { if (bitRead(code[number],i)==1) { digitalWrite(seg_7A[i],LOW); //此處的 LOW、HIGH格式為「共陰極」,若將其巔倒則變為「共陽極」 } else { digitalWrite(seg_7A[i],HIGH); } } } else { for (i=0;i<=6;i=i+1) { digitalWrite(seg_7A[i],LOW); } } } |
EX 5-3:以按鍵開關完成0~9的上數計數器
(1)按鍵:按下→0 OFF→1(利用 INPUT_PULLUP功能)
(2)電源 ON,七段無顯示。
(3)按鍵按住:由0 →9,依序自動循環上數。
(4)按一次按鍵,上數一次?
|
|
|
//以按鍵開關完成0~9的上數計數器 //(1)按鍵:按下→0 OFF→1(利用 INPUT_PULLUP功能) //(2)電源 ON,七段無顯示。 //(3)按鍵按下:由0 → 9,依序循環上數。 //(4)按一次按鍵,上數一次?
const int seg_7A[7]={0,1,2,3,4,5,6}; //定義數位輸出接腳0~6分別接共陽極七段顯示器的 a ~ g const byte code[10]= //定義共陽極七段顯示器所要顯示的「字碼」,字碼代號為:1gfedcba {B11000000, B11111001, B10100100, B10110000, B10011001, B10010010, B10000010, B11111000, B10000000, B10010000}; const int SW=11; //定義第11腳為「按鈕開關」 int Button; int i,j=0;
void setup() { for (i=0;i<=6;i=i+1) { pinMode(seg_7A[i],OUTPUT); // 設定第 0~6 腳為輸出。 } pinMode(11,INPUT_PULLUP); //定義第11腳為按鈕開關 }
void loop() { Button=digitalRead(SW); if (Button==0) { for (i=0;i<=6;i=i+1) { if (bitRead(code[j],i)==1) { digitalWrite(seg_7A[i],LOW); //此處的 LOW、HIGH格式為「共陰極」,若將其巔倒則變為「共陽極」 } else { digitalWrite(seg_7A[i],HIGH); } } //delay(500); if (j<9) { j=j+1; } else { j=0; } } } |
EX 5-4:以按鍵開關完成0~9的上數計數器
(1)按鍵:按下→0 OFF→1(利用 INPUT_PULLUP功能)
(2)電源 ON,七段無顯示。
(3)按鍵按住:不變。按鍵放開:由0 → 9,依序循環上數。
(4)按一次按鍵,上數一次
|
|
|
//以按鍵開關完成0~9的上數計數器 //(1)按鍵:按下→0 OFF→1(利用 INPUT_PULLUP功能) //(2)電源 ON,七段無顯示。 //(3)按鍵按下:由0 → 9,依序循環上數。 //(4)按一次按鍵,上數一次
const int seg_7A[7]={0,1,2,3,4,5,6}; //定義數位輸出接腳0~6分別接共陽極七段顯示器的 a ~ g const byte code[10]= //定義共陽極七段顯示器所要顯示的「字碼」,字碼代號為:1gfedcba {B11000000, B11111001, B10100100, B10110000, B10011001, B10010010, B10000010, B11111000, B10000000, B10010000}; const int SW=11; //定義第11腳為「按鈕開關」 int debounces=6;
int i,j=0;
void setup() { for (i=0;i<=6;i=i+1) { pinMode(seg_7A[i],OUTPUT); // 設定第 0~6 腳為輸出。 } pinMode(11,INPUT_PULLUP); //定義第11腳為按鈕開關 }
void loop() { if (digitalRead(SW)==0) { debounces=1; } else { if (debounces<5) { debounces=debounces+1; if (debounces==5) { j=j+1; } } }
if (j<=9) { for (i=0;i<=6;i=i+1) { if (bitRead(code[j],i)==1) { digitalWrite(seg_7A[i],LOW); //此處的 LOW、HIGH格式為「共陰極」,若將其巔倒則變為「共陽」 } else { digitalWrite(seg_7A[i],HIGH); } } //delay(500); } else { j=0; }
} |
(1)以EX5-2~EX5-4為參考。
(2)指撥:ON→0 OFF→1(利用 INPUT_PULLUP功能)
(3)按鍵:按下→0 OFF→1(利用 INPUT_PULLUP功能)
(4)電源 ON,由指撥讀入一組 BCD 碼的數字,並顯示於七段顯示器。
(5)A按鍵:下壓 → 執行加1的動作(只做1次)。
(6)B按鍵:下壓 → 七段顯示器不變;彈開上升 → 執行減1的動作。
|
https://electronics520.pixnet.net/blog/post/388156166%20
|
|
void setup()
{
}
void loop()
{
}
|
(1)按鍵:按下→0 OFF→1(利用 INPUT_PULLUP功能)
(2)電源 ON,七段自動上數。
(3)每按一次「按鍵開關」,則改變「上、下」數的計數方式。
|
https://electronics520.pixnet.net/blog/post/388156166%20
|
|
void setup()
{
}
void loop()
{
}
|



請先 登入 以發表留言。