2016年5月21日 星期六

利用輸入開關控制LED亮滅

利用按鈕開關控制LED亮滅

完成以Arduino控制LED亮滅的實驗後,我們增加一個按鈕開關並且繼續將程式和電路擴充如下:
1. 當按鈕開關被按下時,開關兩端短路,因此LOW信號會被送到PIN 8腳位。
2. 由於PIN 8被設定為 INPUT_PULLUP 在按鈕開關開路的情況時,也就是說PIN 8空腳沒有連接至任何電壓位準時,PIN 8的輸入狀態應是High

3. Arduino PIN 13LED

void setup()
{
  pinMode(13, OUTPUT);
  pinMode(8, INPUT_PULLUP);
}

void loop()
{

  if (digitalRead(8)==LOW)
  { digitalWrite(13, HIGH);}
  else
  { digitalWrite(13, LOW);}
}

當pinMOde()參數被設定為INPUT_PULLUP時,Arduino這個PIN在未接外部迴路時,都會在HIGH的狀態。

因此,下面這電路的按鈕開關不按下時,PIN 8因為被設定為INPUT_PULLUP此時其電壓值為HIGH,所以不會執行 digitalWrite(13, HIGH)” 的敘述,而且選擇執行  " digitalWrite(13, LOW)" ,所以這時候LED不亮:









按鈕開關按下時,開關短路,GND的電壓輸入到PIN 8,此時LED被點:



利用可變電阻控制LED的亮度

可變電阻的工作原理乃藉由調整第二支腳的位 置來調整電阻值的大小


可變電阻的外觀和內部結構



內部結構示意圖



電路型式表示法和輸出電壓的關係圖




利用可變電阻的輸入信號變化來調整LED的亮度值。

1. ArduinoA0接可變電阻。A0是類比輸入,其輸入值的範圍介於0-1023之間。
  
如果類比接腳接收到的電壓是0V轉換的數值是0如果接收到的電壓是5V,轉換的數值是1023;如果接收到的電壓是2.5V轉換的數值是511

2. Arduinopin 11LED,類比的輸出值介於0-255之間。

analogWrite()指令提供8bit 的解析度,也就是能將工作週期切分為256 等份(2 8 次方)作使用。如果要輸出75%的工作週期,數值應該要填入56x75% -1=191,因為從0 開始算起。





  • analogWrite(11, 255) 代表在 PIN 11輸出 duty cycle 100% PWM 輸出
  • analogWrite(11, 127) 代表在PIN 11輸出 duty cycle 50% PWM 輸出


int potValue=0;
byte val=0;

void setup()
{
  pinMode(11, OUTPUT);      // LED 腳位
}

void loop()
{
  potValue=analogRead(A0);
 //val=map(potValue, 0, 1023, 0, 255);  //類比輸入:0-1023之間,而類比輸出:0-255
  val=potValue/4;    //1024/4=255
  analogWrite(11, val);
}


沒有留言:

張貼留言

NUMPY的Array介紹與Matplotlib的繪圖功能

NumPy 的 Array 介紹與 Matplotlib 的繪圖功能   1. A rray 的基本運算 :   適用於科學和數學運算的 NumPy 套件中,有一個 Array 的資料結構。 Array 是一個非常類似 list 的序列型態。 但是 Arr...