.
四位數(shù)的顯示器控制基本都跟單顆控制一樣,GOOGLE應(yīng)該都可以找到很多就不在這邊贅述
四位數(shù)的控制主要可以看下圖
角位 0 1 2 3 分別控制每段顯示,0為控制最右邊 3為最左邊 依此類推
剩下的 A B C D E F G H(DP) 則控制每個(gè)LED的亮與不亮,如下圖
接著為 arduino 控制器 與 四位數(shù)七段顯示器的接線圖
圖源: http://yehnan.blogspot.tw/2013/08/arduino_26.html
接著為程式碼部分主要分成控制端(PC)與顯示端(arduino)
控制端負(fù)責(zé)送訊號(hào) 顯示端接收到後進(jìn)行動(dòng)作
此程式會(huì)傳出 1 或 0 的訊號(hào)來(lái)控制arduino上面的燈亮與不亮
同時(shí)也會(huì)藉由 Serial Port接收從arduino產(chǎn)生的資料,並將資料儲(chǔ)存在指定資料夾中
以下為 arduino 程式碼,提供兩種方式控制燈光 1. 亂數(shù)>5000亮燈 2. 看 PC端送的訊號(hào)亮燈
註解掉的部分如果在角位A1接上燈就可以使用
- #define PIN_0 2
- #define PIN_g 3
- #define PIN_c 4
- #define PIN_h 5
- #define PIN_d 6
- #define PIN_e 7
- #define PIN_b 8
- #define PIN_1 9
- #define PIN_2 10
- #define PIN_f 11
- #define PIN_a 12
- #define PIN_3 13
-
- // 共有4個(gè)七段顯示器,分別由針腳PIN_0、PIN_1、PIN_2、PIN_3控制
- // 七段顯示器裡有8個(gè)LED(包含小數(shù)點(diǎn))
- #define POS_NUM 4
- #define SEG_NUM 8
- const byte pos_pins[POS_NUM] = {PIN_0, PIN_1, PIN_2, PIN_3};
- const byte seg_pins[SEG_NUM] = {PIN_a, PIN_b, PIN_c, PIN_d, PIN_e, PIN_f, PIN_g, PIN_h};
-
- // 底下定義由七段顯示器顯示數(shù)字時(shí)所需要的資料
- const boolean data[10][SEG_NUM] = {
- {1, 1, 1, 1, 1, 1, 0, 0}, // 0
- {0, 1, 1, 0, 0, 0, 0, 0}, // 1
- {1, 1, 0, 1, 1, 0, 1, 0}, // 2
- {1, 1, 1, 1, 0, 0, 1, 0}, // 3
- {0, 1, 1, 0, 0, 1, 1, 0}, // 4
- {1, 0, 1, 1, 0, 1, 1, 0}, // 5
- {1, 0, 1, 1, 1, 1, 1, 0}, // 6
- {1, 1, 1, 0, 0, 0, 0, 0}, // 7
- {1, 1, 1, 1, 1, 1, 1, 0}, // 8
- {1, 1, 1, 1, 0, 1, 1, 0}, // 9
- };
-
- // 以格式字串輸出到序列埠
- void pf(const char *fmt, ... ){
- char tmp[128]; // max is 128 chars
- va_list args;
- va_start (args, fmt );
- vsnprintf(tmp, 128, fmt, args);
- va_end (args);
- Serial.print(tmp);
- }
-
- // 設(shè)定某個(gè)七段顯示器所顯示的數(shù)字,
- // 參數(shù)pos為0~3,指出想要更新哪一個(gè)七段顯示器,
- // 參數(shù)n為0~9,顯示數(shù)字
- void setDigit(int pos, int n){
- if(pos < 0 || 3 < pos){
- pf("error pos=%d\n", pos);
- return;
- }
-
- // 控制想要更新哪一個(gè)七段顯示器,將其腳位設(shè)為L(zhǎng)OW
- // 其他腳位則設(shè)為HIGH,代表不更新。
- for(int p = 0; p < POS_NUM; p++){
- if(p == pos)
- digitalWrite(pos_pins[p], LOW);
- else
- digitalWrite(pos_pins[p], HIGH);
- }
-
- // 寫入數(shù)字
- if(0 <= n && n <= 9){
- for(int i = 0; i < SEG_NUM; i++){
- digitalWrite(seg_pins[i], data[n][i] == 1 ? HIGH : LOW);
- }
- }
- }
-
- // 設(shè)定整個(gè)四合一型七段顯示器想要顯示的數(shù)字
- // 參數(shù)number的範(fàn)圍應(yīng)是0~9999
- void setNumber(int number)
- {
- int n0, n1, n2, n3;
- n3 = number / 1000; //位數(shù)轉(zhuǎn)換 千
- number %= 1000;
- n2 = number / 100;//位數(shù)轉(zhuǎn)換 百
- number %= 100;
- n1 = number / 10;//位數(shù)轉(zhuǎn)換 十
- n0 = number % 10;//位數(shù)轉(zhuǎn)換 個(gè)位數(shù)
-
- // 求出每個(gè)位數(shù)的值後,分別更新
- //以delay(5)隔開每個(gè)位數(shù)的更新
- setDigit(0, n0); delay(5);
- setDigit(1, n1); delay(5);
- setDigit(2, n2); delay(5);
- setDigit(3, n3); delay(5);
- }
-
- unsigned long time_previous;
- void setup() {
- Serial.begin(9600); //baud rate太高會(huì)顯示亂碼
- randomSeed(analogRead(0)); //隨機(jī)亂數(shù)種子,讓每次產(chǎn)生的亂數(shù)都不相同
- pinMode(A0,OUTPUT);
- for(int i = 0; i < POS_NUM; i++){
- pinMode(pos_pins[i], OUTPUT);
- digitalWrite(pos_pins[i], HIGH);
- }
- for(int i = 0; i < SEG_NUM; i++){
- pinMode(seg_pins[i], OUTPUT);
- digitalWrite(seg_pins[i], LOW);
- }
- time_previous = millis();
- }
-
- int number = 0;
- void loop() {
- // 經(jīng)過(guò)一秒後就讓number改變
- unsigned long time_now = millis();
- if(time_now - time_previous > 1000){
- number = random(0,9999); //亂數(shù)範(fàn)圍0-9999
- time_previous += 1000;
- //pf("number=%d\n", number);
- //Serial.println(String("") + "random number is " + number);
- //用字串方式連接顯示文字
- Serial.println(number);//用字串方式連接顯示文字
- //如果產(chǎn)生值>5000 讓 LED1發(fā)亮 否則關(guān)閉
- /*if(number >= 5000)
- {
- analogWrite(A1, 200);
- }
- else
- {
- analogWrite(A1, 0);
- }*/
- //讀取從PC SerialPort傳來(lái)的訊息
- char inByte = Serial.read();
- //如果為1讓LED2發(fā)亮 如果為0讓LED2熄滅
- if(inByte == '1')
- {
- analogWrite(A0, 200);
- }
- else
- {
- analogWrite(A0, 0);
- }
-
- }
- setNumber(number); //顯示寫入數(shù)字
-
- }
C# 控制端
執(zhí)行結(jié)果
控制端連上Comport接收資料並送訊號(hào)開啟LED,接收的資料每秒會(huì)不斷刷新
顯示端序列阜上面的結(jié)果
PC端將接收到的資料儲(chǔ)存(LOG)
LED燈光控制 與 顯示的亂數(shù) 在 arduino上的執(zhí)行狀況 (LED ON)
LED OFF
執(zhí)行畫面 拍影片的時(shí)候還沒(méi)接燈 @_@ 不過(guò)後來(lái)有補(bǔ) 如上圖
最後 由於手機(jī)很差 拍的圖片跟影片沒(méi)很清楚 請(qǐng)見諒 >A<