步驟1 :組裝并連接矩陣
您無需花很多功夫,就可以將Arduino稱為出色的多個LED矩陣。但是,在這種情況下,將第五個矩陣與其他矩陣串聯。當然,您將需要一個矩陣和另一組跳線。
步驟2:實時時鐘注釋
我的實時時鐘(RTC)已打開原來是啞巴,新的還沒有從香港來。因此,時間是手動設置的。時間是使用內部時鐘來保持的。
步驟3:顯示數字
這是我的第一個重要項目,在學習過程中,我從在其4-LED滾動文本示例中使用的Makepeace Madrid的LED矩陣庫LedControlMS.h開始。
函數displayChar帶有兩個整數參數:尋址的矩陣號(從零開始)和要顯示的字符。只需將數字0-9傳遞給此功能即可顯示這些數字。
由于一個LED矩陣不會顯示兩個字符,因此小時和分鐘的每個數字都必須隔離為一個變量。可以通過以下方式將它們與小時和分鐘分開:
第一個數字:整數除以10。這將丟棄余數(例如,將43除以4.3,結果除以3) ,因此返回4(第一個數字)。
第二個數字:模除以10,返回余數(例如,對43進行除法得到3)。
我認為空白的第一個數字看起來比前導零更好,因此將displayChar用作不可顯示的字符。
請注意,數字在每個LED矩陣上左對齊顯示。我沒有研究校正
步驟4:秒
由于我有5個矩陣,因此我決定將第5個矩陣固定在小時和分鐘,使用setLed函數通過在每行上依次點亮單個LED來標記秒,其參數為:LED編號(再次從0開始計數),行,列和布爾值(true = on)。
我使用了嵌套循環,對偶數行的第8個LED進行了測試以進行跳過。我敢肯定還有更優雅的方法可以編寫此代碼,但是我只是開始使用C語言,并且多年沒有編程。
步驟5:LED時鐘草圖
/*該草圖基于MAX72xx芯片組運行帶有五個LED矩陣的時鐘。
在https://www.instructables.com/id/Multiple-LED-Matrixes-with-Arduino
中顯示了一個示例,該示例顯示了在4個LED矩陣上書寫和滾動文本的過程。此草圖使用LedControlMS上頁的.h(來自Makerspace),是對LEDControl.h庫的修改。
此草圖使用了Arduino時間和連線庫,而DS3131RTC(DS3232RCTC庫)
Sketch假定以下連線為MAX72xx LED矩陣-
引腳12連接到DataIn引腳11連接到CLK
引腳10連接到LOAD
Dataout(中間輸出引腳)菊花鏈式連接到DataIn除最后一個矩陣外,每個矩陣的下一個LED的數量。
DS3231RTC的布線
VCC和接地分別連接到+ 5VDC和Gnd 《時鐘》 SDA時鐘-》模擬4
SCL-》模擬5
*/
#include //DS3232RTC時鐘庫也可處理DS3231RTC
#include //用于時鐘
#include //用于時鐘
#include“ LedControlMS.h”//注意tha t這不是庫LEDControl
int h1,h2,m1,m2;//每個LED矩陣將顯示一個數字:小時1和2,分鐘1和2。這些變量只保留一位數字
int s1 = 2;//計數秒數的LED
int hr12;//用于12小時時間
int noMatrix = 5;//矩陣數該庫的地址最多為8。
boolean am = true;//標記上午或下午。初始化為am
LedControl lc = LedControl(12,11,10,noMatrix);//Pin分配和矩陣數(5)
void setup(){
//首先,將系統時間設置為硬編碼的日期和時間,然后將來自系統時間的RTC。
//setTime()函數是時間庫的一部分。
//Hr Min Sec dd mm yyyy //RTC.set(now());////從系統時間設置RTC
//初始化MAX72XXs(在啟動-喚醒調用時處于省電模式。
for(int i = 0; i lc.shutdown(i,false);
lc.setIntensity(i,1);//將亮度設置為較低的值
lc.clearDisplay(i);//清除顯示
}
delay(100);//等待更新顯示之間
lc.clearAll();
}
無效循環( ){
//設置am或pm布爾值(am初始化為true)
if(hour()》 12)
{am = false;
hr12 = hour()-12;
}
/*隔離小時和分鐘,每個LED矩陣一位。
我認為一個小時的數字看起來更好,第一位為空。
*/
//分別放置如果小時數在其自己的變量h1和h2中
if(hr12 《10)
{
/*
如果《10 hrs,則第一個LED矩陣為空白(62是空白字符)。
還可以插入零,例如分鐘。
*/ h1 = 151;
h2 = hr12;//第二個LED顯示小時的一位數字
}
else
{
//否則,只需使用t的兩位數字h1 = h12/10; h1和h2上的小時。//整數除以10將返回小時的第一位數字。
h2 = hr12%10;//模除以10將返回第二位數字。
}
//如果(minute()《10)
{
m1 = 0 ;,則分鐘由m1和m2
顯示。//第一分鐘LED d1播放零
m2 = minute();//分鐘的第二個數字
}
else
{
m1 = minute()/10;
m2 = minute()%10;
}
/*
使用displayChar函數顯示小時和分鐘。它使用兩個整數參數:
LED矩陣編號(0-7)和要顯示的字符。通過將數字本身作為第二個參數進行傳遞,可以簡單地顯示數字:即lc.displayChar(0,h1)*/
lc.displayChar(0,h1);//將1位數顯示在最左邊的(#0)LED上。
lc.displayChar(1,h2);//小時數2到LED#1
lc.displayChar(3,m1);//將1位數字減至LED#3。 (回想一下#2是用于標記秒數的。)
lc.displayChar(4,m2);//將1位數字減至#4
/*此例程確定要點亮哪個單個LED來計數秒數。
中間LED通過一次在每個LED上一次點亮一個LED來計數秒數。在8行中在奇數行上計數8個LED,在偶數行上計數7個LED。因此,兩行計數15秒。
*/
for(int r = 7; r》 -1; r-){//對于8行中的每一個,從頂部(#7)開始。..
for(int c = 0; c 《8; c ++){//對于一行中的8個led的每一個(左側0 )。..
/*
照亮當前列和行上的點。這些似乎在我的硬件上互換了。
因此,我將參數交換到下面的setLed()函數中。
正確地將其尋址為setLed(int led#,int row,int col,boolean)。變量s1保留用于此的LED矩陣的LED編號(從0開始計數)。
*/
if(r%2 == 0 && c == 7)//甚至行AND col 7
{} else
lc.setLed(s1,c,r,true);//打開尋址的LED持續3/4秒
delay(750);
lc.setLed(s1,c,r,false);//關閉1/4秒
delay(250);
}
}
}
}
-
led
+關注
關注
241文章
23134瀏覽量
658441 -
時鐘
+關注
關注
10文章
1720瀏覽量
131364 -
Arduino
+關注
關注
187文章
6464瀏覽量
186646
發布評論請先 登錄
相關推薦
評論