2020年11月25日星期三

[Arduino] LED Bar 顯示

 在 Arduino 有個範例是 LED Bar Graph ,使用 LED Bar 來模擬音頻信號的顯示器。當音量低的時候顯示些許格數的 LED ,音量大的時候顯示接近滿格的 LED。今天,修改一下這個範例。

這裡來個學習提示。因為朋友的小孩在學習上遇到一些問題後的感覺。主要用來理解 數位系統的表示方法,透過這個方式,方便好理解 二進制、16 進制與硬體之間的關係。在早期要做這個實驗,整個麵包板是插滿整個 TTL IC。因為是初學剛理解,有些同學光是 DEBUG 線路就花費好多時間,只是為了要理解及驗證書本上的數位知識。

在更進階一點,這個練習還可以做基本運算的驗證,例如: << 左移 , >> 右移 , OR 及 AND 運算

所需材料

  1. Arduino UNO     x  1
  2. RED LED           x  8
  3. 330 ohm 電阻    x   8
  4. 些許導線及跳線


參考電路
Arduino 教學


麵包板

Arduino 教學




程式碼


byte value;

void setup() {

DDRD = B11111111;

value = B01010000; //  給於 0x50 值


PORTD = value;


}

void loop() {

}

顯示甚麼?
如果加個 OR 運算

byte value;

void setup() {

DDRD = B11111111;

value = B01010000; // 0x50

PORTD = value | 0x3;


}

void loop() {

}


換個 AND 運算

byte value;

void setup() {

DDRD = B11111111;

value = B01010000; // 0x50

PORTD = value & 0x10; // AND 運算


}

void loop() {

}


有時候在做比較複雜的情境時,用 Windows 小算盤 的程式設計師 模式 可以幫助驗算。


如果要左移,右移 跑馬燈 要如何做呢?

void setup() {
DDRD = B11111111;
PORTD = B10000000; //0x80
}

void loop() {

for(byte x = 0; x <7; x++)
{
 PORTD >>= 1;  //右移1個位元
 delay(500); 
}

for(byte x = 0; x <7; x++)
{
  PORTD <<= 1;  //左移1個位元 
  delay(500);
}


}


這是直接使用 PORT 的做法,當然也可以使用 74HC595。這裡只是方便好理解位元的操作

這裡注意一下: 因為 D0 腳有接線出來,所以可能在上傳程式時會出現問題。只要上傳前先移走D0 的導線再上傳,上傳完畢後再接回來即可


0 comments:

發佈留言