Arduino基礎入門篇20—心動點陣
本篇繼續學習LED點陣屏的使用,實現心型跳動效果。
1. 實驗材料
- Uno R3開發板
- 配套USB資料線
- 麵包板及配套連線線
- 8*8點陣屏
2. 實驗步驟
1. 根據原理圖搭建電路。
根據點陣屏管腳定義,點陣屏的[9, 14, 8, 12, 1, 7, 2, 5]分別連線開發板的[6,11, 5, 9, 14, 4, 15, 2],這8個引腳為LED的正極;
點陣屏的[13, 3, 4, 10, 6, 11, 15, 16]分別連線開發板的[10,16, 17, 7, 3, 8, 12, 13],這8個引腳為LED的負極。
這裡需要注意,Uno R3開發板的A0 A5也可以做普通GPIO使用,編號分別為14 19。
實驗原理圖如下圖所示:

實驗原理圖
實物連線圖如下圖所示:

實驗原理圖
2. 新建sketch,拷貝如下程式碼替換自動生成的程式碼並進行儲存。
/* Heart 點陣屏心型跳動顯示 */ int leds[8] = {6, 11, 5, 9, 14, 4, 15, 2}; //點陣屏正極引腳 int gnds[8] = {10, 16, 17, 7, 3, 8, 12, 13}; //點陣屏負極引腳 //大“心型”的資料 int table1[8][8] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, }; //小“心型”的資料 int table2[8][8] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; void setup() { for (int i = 0; i < 8; i++) { pinMode(leds[i], OUTPUT); pinMode(gnds[i], OUTPUT); digitalWrite(gnds[i], HIGH); //負極引腳拉高,熄滅所有LED } } void ledclean() { for (int i = 0; i < 8; i++)//將點陣屏正極ladies,負極拉高,關斷顯示 { digitalWrite(leds[i], LOW); digitalWrite(gnds[i], HIGH); } } //心型顯示函式 void ledShow(int temp[8][8]) { for (int j = 0 ; j < 8; j++) { digitalWrite(gnds[j], LOW); for (int i = 0; i < 8; i++) { digitalWrite(leds[i], temp[i][j]); delayMicroseconds(100); } digitalWrite(gnds[j], HIGH); ledclean(); } } void loop() { for (int i = 0; i < 100; i++) //利用for迴圈達到重新整理延時的效果 { ledShow(table1); } for (int i = 0; i < 50; i++)//利用for迴圈達到重新整理延時的效果 { ledShow(table2); } }
3. 連線開發板,設定好對應埠號和開發板型別,進行程式下載。

程式下載
3. 實驗現象
點陣屏上心型在不斷跳動。

實驗現象
4. 實驗分析
程式中定義了兩個二維陣列,分別用來儲存兩個不同大小的心型顯示資料,在顯示函式中通過兩個for迴圈來遍歷陣列。在loop()中沒有使用delay()函式來做延時處理,因為與數碼管類似,這種LED顯示裝置需要不斷重新整理,delay()函式使程式暫停等待延時會造成顯示閃爍甚至熄滅的情況。使用for迴圈來控制顯示的次數,進而控制顯示時間來達到延時效果。