// MCU Ch. 2 數位輸出(燈號控制)
// 軟體介面的: 打勾符號 == 驗證該程式碼是否有BUG
// 軟體介面的: 往右箭頭 == 將程式碼燒錄到Arduino晶片。
// A. 每一行的最後面,一定要加上分號!! 表示這個指令(即動作)結束了。
// B. 注意各變數是否設定正確,尤其是I/O的部分。
// D. 請善用Google (ex: 網路上找得到 寫在Arduino內的控制法,例如: PID)。
// E. 想參考更多範例,請從本程式的介面 檔案 => 範例 進入。
// 數位輸出: 0~19腳位 可做數位輸出。 digitalWrite裡面 設定為1或High:表示腳位輸出+5V; 設定0或Low:表示輸出0V。
// 外接LED的亮暗是看 LED兩隻腳之間是否存在電壓差。
// Part 1a.
// 此區域先宣告各數值的初始值
const int a_Pin = 13; // int 為"整數"的意思
const int b_Pin = 3; // 前加const後,該數值永遠不會被改變。 設定腳位階段建議加上const,非常實用
const int c_Pin = 5;
const int d_Pin = 9;
const int e_Pin = A2;
const int f_Pin = 7;
const int g_Pin = A5; //A0~A5原本是類比輸入的腳位,但可以充當數位輸出的腳位 A0即為14腳,也可寫為14
const int dp_Pin = 11; // 15腳即為A1,這邊也可寫為A1
// 以上皆為設定I/O腳位
// Part 2.
// 宣告哪些腳位該為input/output 與 系統通訊協定
void setup()
{
pinMode(a_Pin, OUTPUT); //左邊寫法的意思為: 將a_Pin腳位設定為Output腳位
pinMode(b_Pin, OUTPUT);
pinMode(c_Pin, OUTPUT);
pinMode(d_Pin, OUTPUT);
pinMode(e_Pin, OUTPUT);
pinMode(f_Pin, OUTPUT);
pinMode(g_Pin, OUTPUT);
pinMode(dp_Pin, OUTPUT);
}
void LedDark() {
digitalWrite(a_Pin, HIGH);
digitalWrite(b_Pin, HIGH);
digitalWrite(c_Pin, HIGH);
digitalWrite(d_Pin, HIGH);
digitalWrite(e_Pin, HIGH);
digitalWrite(f_Pin, HIGH);
digitalWrite(g_Pin, HIGH);
digitalWrite(dp_Pin, HIGH);
}
// Part 4.
// 主程式區。 會被一直跑loop(迴圈,重複執行)的,即為主程式。
void loop()
{
LedDark();
digitalWrite(a_Pin, LOW); // 使a_Pin輸出0V,但7段顯示器為共陽型,即LED腳位的另一端接著高電位。
// 所以當這裡設定為LOW,LED燈存在電壓差,所以a腳的LED會變亮。
digitalWrite(g_Pin, LOW);
digitalWrite(d_Pin, LOW);
digitalWrite(dp_Pin, LOW);
digitalWrite(b_Pin,HIGH);
digitalWrite(c_Pin,HIGH);
digitalWrite(e_Pin,HIGH);
digitalWrite(f_Pin,HIGH);
delay(300);
// 讓系統延遲800ms,可寫 delay(800)
LedDark();
digitalWrite(a_Pin, HIGH); // 使a_Pin輸出5V,但7段顯示器為共陽型,所以a腳的LED會變暗。
digitalWrite(g_Pin, HIGH);
digitalWrite(d_Pin, HIGH);
digitalWrite(dp_Pin, HIGH);
digitalWrite(b_Pin,LOW);
digitalWrite(c_Pin,LOW);
digitalWrite(e_Pin,LOW);
digitalWrite(f_Pin,LOW);
delay(1000);
// delayMicroseconds(300000); // 讓系統延遲300ms,即300*1000 micro-second時,也可寫 delayMicroseconds(300000)
}
// 以上為主程式區的寫法
// [實用符號] for 暫時修訂軟體
// 被 "/*" 與 "*/" 夾住區域的Code,還有"//"之後的Code,皆不會燒進去Nano晶片。 暫時更改程式時很好用。
// 範例如下:
/*
if (Error > 0 && OVLap<40)
{ delayTime = 500/Gain;
LargerTor();}
else if (Error < 0 && OVLap>0)
{ delayTime = 500/Gain;
SmallerTor();}
else { delayTime = 250/Gain;}
*/
// 這行也不會燒進去Nano