2013年4月3日 星期三

Arduino : Digital Input



在數位電路中開關(switch)是一種基本的輸入形式,它的作用是保持電路的連接或者斷開。
Arduino從數I/O pin接腳上只能讀出高電平(5V)或者低電平(0V),因此我們首先面臨到的一個問題就是如何將開關的開/斷狀態轉變成Arduino能夠讀取的高/低電平。解決的辦法是通過上/下拉電阻,按照電路的不同通常又可以分為正邏輯(Positive Logic)和負邏輯(Inverted Logic)兩種。

在正邏輯電路中,開關一端接電源,另一端則通過一個10K的下拉電阻接地,輸入信號從開關和電阻間引出。當開關斷開的時候,輸入信號被電阻向地,形成低電平(0V);當開關接通的時候,輸入信號直接與電源相連,形成高電平。對於經常用到的按壓式開關來講,就是按下為高,抬起為低。




在負邏輯電路中,開關一端接地,另一端則通過一個10K的上拉電阻接電源,輸入信號同樣也是從開關和電阻間引出。當開關斷開時,輸入信號被電阻向電源,形成高電平(5V);當開關接通的時候,輸入信號直接與地相連,形成低電平。對於經常用到的按壓式開關來講,就是按下為低,抬起為高。



為了驗證Arduino數位I/O的輸入功能,我們可以將開關接在Arduino的任意一個數字I/O接上(13除外),並通過讀取它的接通或者斷開狀態,來控制其它數I/O接腳的高低。

本實驗採用的原理圖如下所示,其中開關接在數I/O的12號腳上,被控的發光二極管接腳在數I/O的7到14號腳上:







// I/O Pin12 = High   8 LED Flashing (all on , all off)
// I/O Pin12 = LOW    8 LED Alternately flashing 1 by 1


int BASE = 2;
int NUM = 8;
int index = 0;
int inpin=12;
int val;

void setup()
{
  for (int i = BASE; i < BASE + NUM; i ++) {
    pinMode(i, OUTPUT);
  }
  pinMode(inpin,INPUT);

}

void loop()
{
val=digitalRead(inpin); 
if(val==LOW) 
{  for (int i = BASE; i < BASE + NUM; i ++) {
   digitalWrite(i, LOW);
  }
  digitalWrite(BASE + index, HIGH);
  index = (index + 1) % NUM;
  delay(100);
}
else
  for (int i = BASE; i < BASE + NUM; i ++) {
   digitalWrite(i, HIGH);
  }
   delay(100);
   for (int i = BASE; i < BASE + NUM; i ++) {
   digitalWrite(i, LOW);
  }
   delay(100);
}
  
}












沒有留言:

張貼留言

Messaging API作為替代方案

  LINE超好用功能要沒了!LINE Notify明年3月底終止服務,有什麼替代方案? LINE Notify將於2025年3月31日結束服務,官方建議改用Messaging API作為替代方案。 //CHANNEL_ACCESS_TOKEN = 'Messaging ...