在 Arduino 有個範例是 LED Bar Graph ,使用 LED Bar 來模擬音頻信號的顯示器。當音量低的時候顯示些許格數的 LED ,音量大的時候顯示接近滿格的 LED。今天,修改一下這個範例。
這裡來個學習提示。因為朋友的小孩在學習上遇到一些問題後的感覺。主要用來理解 數位系統的表示方法,透過這個方式,方便好理解 二進制、16 進制與硬體之間的關係。在早期要做這個實驗,整個麵包板是插滿整個 TTL IC。因為是初學剛理解,有些同學光是 DEBUG 線路就花費好多時間,只是為了要理解及驗證書本上的數位知識。在更進階一點,這個練習還可以做基本運算的驗證,例如: 左移 , 右移 , OR 及 AND 運算
所需材料
- Arduino UNO x 1
- RED LED x 8
- 330 ohm 電阻 x 8
- 些許導線及跳線
參考電路
麵包板
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 portd="" x="">>= 1; //右移1個位元
delay(500);
}
for(byte x = 0; x <7 1="" code="" delay="" portd="" x="">7>7>
這是直接使用 PORT 的做法,當然也可以使用 74HC595。這裡只是方便好理解位元的操作
這裡注意一下: 因為 D0 腳有接線出來,所以可能在上傳程式時會出現問題。只要上傳前先移走D0 的導線再上傳,上傳完畢後再接回來即可
0 comments:
發佈留言