2014年8月10日

Arduino 第一課 - LED switch

去天瓏買書時, 老闆慫恿我買 Arduino 的書來看, [年紀這麼大了, 學還來得及嗎?] 我這樣子問, 他說:[玩玩嘛!]. 於是真得玩了起來.

會有這樣子的想法, 是多年前 Make: 正夯(現在已發行《Make》雜誌國際中文版), 印象所及是曾看一篇網頁說明了用紅外線指示筆+光碟機做出了一個雷射筆(槍), 不久後新聞報導了大陸的網購網站竟然開始賣這樣子危險的東西; 另外, 還有 GPS 尋寶遊戲的導航製作. 試想, 我自己是否依樣畫葫蘆呢?!

而 Arduino 對我所學非專科的人來說, 多半只是看看而已; 直到一年多前開始察覺已經出現很多網站刊出很多有趣的東西之後, 我才順著天瓏老闆的話, 試著玩玩, 看是否如同以前的中推會同事一般, 做出個藍芽搖控玩具呢?!

但自學的第一課是什麼呢? 買材料! 而買材料的第一步是找一間電子材料行隨意逛逛. 看了玲瑯滿目各式規格看不懂的電子料件, 足足花了三個小時才買到了一些要學習的基本材料; 當然, 這樣子的結果是有先做功課的; 不然, 第一時間, 大概會因為眼花潦亂, 嚇到後打退堂鼓的.

即然身為 software developer 是沒在怕的, 先自我催眠: 只不過是組裝電路後把程式寫入即可. 於是乎產出了第一個電路及程式: LED switch

材料
Switch x 1 (微動開關)
LED x1
Resistor 330Ω (for LED)
Resistor 10KΩ (for Switch)

製作
< 參考「Arduino互動設 計入門2」- p4-8, p4-12, p4-14 >
紅色線: 高電位/電源
黑色線: 低電位/接地
白色線: 輸出 or 輸入
要注意上拉(pull-up)電阻與下拉(pull-down)電阻的選用與接法不同:


圖左為下拉電阻接法, 右圖為上拉電阻接法; 電路圖如下:

程式如下:
const byte SWITCH = 10;
const byte LED = 16;

//boolean lastState;

void setup() {

//  lastState = LOW;
  
  pinMode(SWITCH, INPUT);
  pinMode(LED, OUTPUT);
  pinMode(LED_2, OUTPUT);
  
  digitalWrite(LED_2, LOW);
}

void loop() {
    boolean click = false;
    boolean currentState = digitalRead(SWITCH); // pull-down circuit, use NOT when using pull-up circuit

    if (currentState != lastState) {
      delay(20);
      currentState = digitalRead(SWITCH); // pull-down circuit, use NOT when using pull-up circuit
      
      if (currentState != lastState) {
        click = true;
        lastState = currentState;
      }
    }
    
    if (click) {
      digitalWrite(LED, currentState );
    }
}

程式以下拉電阻接法寫的, 若為上拉電阻接法, 只要將其中
    ... = digitalRead(SWITCH);

改為
    ... = digitalRead(! SWITCH);

即可.

done!

ps.
「Arduino互動設 計入門2」- p4-16 的程式寫法會嚇到初學者的

沒有留言: