繼之前 8 顆 LED,研究了一下 IC 74595,總算知道怎麼把值傳到下一組
初始化時,測試所有的LED工作正常
轉速也可依續爬每一階,並在跨 IC 時不會中斷,這部分花了不少時間測試
void show_led()
{
Serial.println("");
//將 code 的值,轉成 byte 再送到 74HC595
LED_A=0;
LED_B=0;
for (int i = 0; i < 8; i++) {
bitWrite(LED_A, i, (code[i]=='1')?LOW:HIGH);
bitWrite(LED_B, i, (code[i+8]=='1')?LOW:HIGH);
Serial.print(code[i]);
}
Serial.println("");
Serial.println(LED_A);
Serial.println(LED_B);
digitalWrite(D0, LOW);
// 先送高位元組 (Hight Byte), 給離 Arduino 較遠的那顆 74HC595
shiftOut(D2, D1, MSBFIRST, LED_B);
// 再送低位元組 (Low Byte), 給離 Arduino 較近的那顆 74HC595
shiftOut(D2, D1, MSBFIRST, LED_A);
// 送完資料後要把 latchPin 拉回成高電位
digitalWrite(D0, HIGH);
}
這樣接二顆 74595 ,就可以作到16顆 LED,轉速也可以對應到
0~16000rpm
接上訊號產生器
接上訊號產生器,看看爬格子
然後餵入轉速訊號產生器
心得:
利用 LED 來作轉速表,線又多又雜,相當考驗設計者的美感跟除錯能力~
我在寫 Arduino 時,為了程式的可讀性,把16顆燈號轉成字串
0000000000000000 (全暗)
1111111111111111 (全亮)
當作input:
1、如果要亮最左邊 1000轉 的燈,就是 1000000000000000
2、如果要亮2000轉,就是左邊二個綠燈亮,就是 1100000000000000
3、如果要亮4000轉,左是左邊亮四個燈,即 1111000000000000
如此一來只要判斷轉速訊號,即可作成對照的字串
第二版原始碼參考:
https://github.com/shadowjohn/NSR150_RC_Computer/blob/master/NSR150_RC_COMPUTER/RPM_METER/RPM_METER_V0.02/RPM_METER_V0.02.ino
參考資料:
自製LED轉速表Part1:https://3wa.tw/blog/blog.php?id=1779
自製轉速表Part3:https://3wa.tw/blog/blog.php?id=1788
74595 佑來了的教學(上)https://www.youtube.com/watch?v=KKdNk5lne50
74595 佑來了的教學(下)https://www.youtube.com/watch?v=OiKgWRRWj4c