4位元七段LED顯示器,
就是1位元的顯示器結合4個。
市面上有賣一種整合上TM1637晶片的模組,接線上會比較方便。
下圖是顯示器的接腳定義。
其實我這篇本來是沒有紅外線收發的,只是覺得單單跑數字這樣有點單調,
後來多結合了紅外線控制數字變化。
所以紅外線介紹可以看第(11)篇。
影片中大概就是,
按"CH-":4位元顯示器同時跑0~9。
按"CH":自己發明的規則跑數字。
程式如下:
#include <IRremote.h>
#include <LedControl.h>
const int irReceiverPin = A0;
IRrecv irrecv(irReceiverPin);
decode_results results;
const byte port[4] = {13, 12, 9, 8};
const byte led[8] = {5, 7, 4, 11, 10, 3, 6, 2};
#define H 1
#define L 0
const boolean data[10][8] = {
{H,H,H,H,H,H,L,L},//0
{L,H,H,L,L,L,L,L},//1
{H,H,L,H,H,L,H,L},//2
{H,H,H,H,L,L,H,L},//3
{L,H,H,L,L,H,H,L},//4
{H,L,H,H,L,H,H,L},//5
{H,L,H,H,H,H,H,L},//6
{H,H,H,L,L,L,L,L},//7
{H,H,H,H,H,H,H,L},//8
{H,H,H,H,L,H,H,L},//9
};
//宣告0~9亮燈方式。
void LED1(int N)
{
for(int j=0;j<=6;j++){
digitalWrite(led[j],data[N][j]);
}
}
//使LED作動的函式。
void setup()
{
for(int i=0;i<7;i++){
pinMode(led[i],OUTPUT);
}
for(int i=0;i<4;i++){
pinMode(port[i],OUTPUT);
}
digitalWrite(port[0],HIGH);
digitalWrite(port[1],HIGH);
digitalWrite(port[2],HIGH);
digitalWrite(port[3],HIGH);
Serial.begin(9600);
irrecv.enableIRIn();
}
void loop(){
if (irrecv.decode(&results)){
Serial.print("Protocol: ");
switch(results.decode_type) {
case NEC:
Serial.print("NEC");
break;
case SONY:
Serial.print("SONY");
break;
case RC5:
Serial.print("RC5");
break;
case RC6:
Serial.print("RC6");
break;
default:
Serial.print("Unknown encoding");
}
//確認Protocol。
if (results.value == 16753245) {
for(int k=0;k<=9;k++){
delay(500);
LED1(k);
}
delay(1000);
}
//按"CH-":4位元顯示器同時跑0~9。
if (results.value == 16736925){
for(int k=1;k<=10;k++){
digitalWrite(port[0],HIGH);
digitalWrite(port[1],LOW);
digitalWrite(port[2],LOW);
digitalWrite(port[3],LOW);
delay(100);
LED1(k);}
for(int k=1;k<=10;k++){
digitalWrite(port[0],HIGH);
digitalWrite(port[1],HIGH);
digitalWrite(port[2],LOW);
digitalWrite(port[3],LOW);
delay(300);
LED1(k);}
for(int k=1;k<=10;k++){
digitalWrite(port[0],HIGH);
digitalWrite(port[1],HIGH);
digitalWrite(port[2],HIGH);
digitalWrite(port[3],LOW);
delay(900);
LED1(k);}
for(int k=1;k<=10;k++){
digitalWrite(port[0],HIGH);
digitalWrite(port[1],HIGH);
digitalWrite(port[2],HIGH);
digitalWrite(port[3],HIGH);
delay(1200);
LED1(k);
}
}
//按"CH":自己發明的規則跑數字。
Serial.print(" irCode: ");
Serial.print(results.value);
Serial.print(", bits: ");
Serial.println(results.bits);
delay(500);
irrecv.resume();
}
}
紅外線的程式說明可以參考第11篇喔。