RGB Matrix 64*32 P4-256*128-2121-A2
RGB Matrix p4 with arduino mega 64x32
DS1307 Real Time Clock
64x32 rgb led matrix arduino
64x32 rgb led matrix arduino code
matrice led rgb arduino
Code
RGB_Matrix_p4Fonts
// testshapes demo for RGBmatrixPanel library. // Demonstrates the drawing abilities of the RGBmatrixPanel library. // For 32x64 RGB LED matrix. // WILL NOT FIT on ARDUINO UNO -- requires a Mega, M0 or M4 board #include <Adafruit_GFX.h> // Core graphics library #include <RGBmatrixPanel.h> // Hardware-specific library #include <FreeMonoBoldOblique9pt7b.h> #include <FreeMonoBold12pt7b.h> #include <kongtext4pt7b.h> #include <MD_DS1307.h> #include <Wire.h> #define CLK 11 // USE THIS ON ARDUINO MEGA #define OE 9 #define LAT 10 #define A A0 #define B A1 #define C A2 #define D A3 RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, false, 64); // Global variables #define MAX_MESG 9 #define MAX_MES 20 #define MAX_ME 50 uint8_t r=7, g=0, b=0; unsigned int NewRTCh = 24; unsigned int NewRTCm = 60; unsigned int NewRTCs = 10; unsigned int NewRTCd = 8; volatile boolean buttonA = false; volatile boolean buttonB = false; volatile boolean buttonC = false; int StateOfbuttonA = 0; int StateOfbuttonB = 0; int StateOfbuttonC = 0; int NewStateOfbuttonA = 0; int NewStateOfbuttonB = 0; int NewStateOfbuttonC = 0; int Mode = 0; char szTime[4]; // 00 char szDate[MAX_MES+1] = ""; char szDat[MAX_ME+1] = ""; char szMesg[MAX_MESG+1] = ""; int16_t textX = matrix.width(), textMin = sizeof(szDat) * -4, hue = 0; char *mon2str(uint8_t mon, char *psz, uint8_t len) { static const char str[][4] PROGMEM = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; *psz = '\0'; mon--; if (mon < 12) { strncpy_P(psz, str[mon], len); psz[len] = '\0'; } return(psz); } char *dow2str(uint8_t code, char *psz, uint8_t len) { static const char str[][10] PROGMEM = { " Sunday", " Monday", " Tuesday", "Wednesday", "Thursday", " Friday", "Saturday" }; *psz = '\0'; code--; if (code < 7) { strncpy_P(psz, str[code], len); psz[len] = '\0'; } return(psz); } void getRTCh(char *psz) // Code for reading clock time { RTC.readTime(); sprintf(psz, "%02d", RTC.h); matrix.setCursor(3, 6); matrix.setFont(&FreeMonoBoldOblique9pt7b); matrix.setTextColor(matrix.Color333(7, 0, 7)); matrix.fillRect(3, 1, 19, 12, matrix.Color333(0, 0, 0)); matrix.print(szTime); matrix.setFont(); NewRTCh=RTC.h; } void getRTCm(char *psz) // Code for reading clock time { RTC.readTime(); sprintf(psz, "%02d", RTC.m); matrix.setCursor(28, 6); matrix.setFont(&FreeMonoBoldOblique9pt7b); matrix.setTextColor(matrix.Color333(7, 0, 7)); matrix.fillRect(28, 1, 19, 12, matrix.Color333(0, 0, 0)); matrix.print(szTime); matrix.setFont(); NewRTCm=RTC.m; } void getTime(char *psz, bool f = true) // Code for reading clock time { RTC.readTime(); if (NewRTCs != RTC.s/10) { matrix.setCursor(20, 0); matrix.setTextSize(2); matrix.setTextColor(matrix.Color333(r, g, b)); matrix.fillRect(24, 4, 2, 6, matrix.Color333(0, 0, 0)); matrix.print(f ? ':' : ' '); matrix.setCursor(52, 0); matrix.setTextSize(1); matrix.fillRect(52, 0, 10, 6, matrix.Color333(0, 0, 0)); matrix.setFont(&kongtext4pt7b); matrix.setTextColor(matrix.Color333(g, r, b)); matrix.print(f ? ' ' : '*'); matrix.setFont(); matrix.setCursor(49, 6); matrix.setTextSize(1); matrix.setTextColor(matrix.Color333(b, r, g)); sprintf(psz, "%02d", RTC.s); matrix.fillRect(49, 7, 13, 6, matrix.Color333(0, 0, 0)); matrix.setFont(&kongtext4pt7b); matrix.print(szTime); matrix.setFont(); NewRTCs=RTC.s/10; } else { matrix.setCursor(20, 0); matrix.setTextSize(2); matrix.setTextColor(matrix.Color333(b, r, g)); matrix.fillRect(24, 4, 2, 6, matrix.Color333(0, 0, 0)); matrix.print(f ? ':' : ' '); matrix.setCursor(52, 0); matrix.setTextSize(1); matrix.fillRect(52, 0, 10, 6, matrix.Color333(0, 0, 0)); matrix.setFont(&kongtext4pt7b); matrix.setTextColor(matrix.Color333(g, r, b)); matrix.print(f ? ' ' : '*'); matrix.setFont(); matrix.setCursor(49, 6); matrix.setTextColor(matrix.Color333(r, g, b)); sprintf(psz, "%02d", RTC.s); matrix.fillRect(56, 7, 6, 6, matrix.Color333(0, 0, 0)); matrix.setFont(&kongtext4pt7b); matrix.print(szTime); matrix.setFont(); } } void getDate(char *psz) // Code for reading date { RTC.readTime(); char szBuf[10]; sprintf(psz, "%02d%s%04d", RTC.dd, mon2str(RTC.mm, szBuf, sizeof(szBuf)-1), RTC.yyyy); matrix.setCursor(1, 22); matrix.setFont(&kongtext4pt7b); matrix.fillRect(0, 22, 64, 10, matrix.Color333(0, 0, 0)); uint8_t y = 0; for (y=0; y<10; y++) { matrix.setTextColor(Wheel(y)); matrix.print(szDate[y]); } matrix.setFont(); } void getDay(char *psz) // Code for reading day date { RTC.readTime(); dow2str(RTC.dow, szMesg, MAX_MESG); matrix.setCursor(0, 14); matrix.setTextColor(matrix.Color333(0, 7, 0)); matrix.fillRect(0, 14, 64, 9, matrix.Color333(0, 0, 0)); matrix.setFont(&kongtext4pt7b); uint8_t w = 0; for (w=0; w<9; w++) { matrix.setTextColor(Whel(w)); matrix.print(szMesg[w]); } matrix.setFont(); NewRTCd=RTC.dow; } void getDat(char *psz) // Code for reading clock date { char szBuf[10]; RTC.readTime(); sprintf(psz, "%s %d %s %04d", dow2str(RTC.dow, szMesg, MAX_MESG), RTC.dd, mon2str(RTC.mm, szBuf, sizeof(szBuf)-1), RTC.yyyy); matrix.setTextColor(matrix.ColorHSV(hue, 255, 255, true)); matrix.setCursor(textX, 22); matrix.setFont(&FreeMonoBold12pt7b); matrix.fillRect(0, 14, 64, 18, matrix.Color333(0, 0, 0)); matrix.print(szDat); matrix.setFont(); if((--textX) < textMin) textX = matrix.width(); if(hue >= 1536) hue -= 1536; hue += 7; // Update display matrix.swapBuffers(false); } void setup() { pinMode(3, INPUT_PULLUP); pinMode(4, INPUT_PULLUP); pinMode(5, INPUT_PULLUP); matrix.begin(); matrix.setTextWrap(false); RTC.control(DS1307_CLOCK_HALT, DS1307_OFF); RTC.control(DS1307_12H, DS1307_OFF); } void loop() { static uint32_t lastime = 0; // millis() memory static bool flasher = false; // seconds passing flasher if (millis() - lastime >= 1000) { millis() == 0; lastime = millis(); getTime(szTime, flasher); flasher = !flasher; if (NewRTCh != RTC.h) { getRTCh(szTime); } if (NewRTCm != RTC.m) { getRTCm(szTime); } if (NewRTCd != RTC.dow) { Mode == 0; getDate(szDate); getDay(szMesg); } } NewStateOfbuttonA = digitalRead(3); NewStateOfbuttonB = digitalRead(4); NewStateOfbuttonC = digitalRead(5); buttonAisPressed(); buttonBisPressed(); buttonCisPressed(); if (buttonA) { if (Mode == 0 ) { buttonA = false; r++; if(r == 8) { r = 0; g++; if(g == 8) { g = 0; b++; if(b == 8) { b = 0; } } } } else if (Mode == 1 ) { buttonA = false; Mode--; getDay(szMesg); getDate(szDate); } else if (Mode == 2 ) { buttonA = false; RTC.h++; if (RTC.h >= 24 ) { RTC.h = 0; } RTC.writeTime(); getRTCh(szTime); } else if (Mode == 3 ) { buttonA = false; RTC.m++; if (RTC.m >= 60 ) { RTC.m = 0; } RTC.writeTime(); getRTCm(szTime); } else if (Mode == 4 ) { buttonA = false; RTC.s = 0; RTC.writeTime(); getTime(szTime); } else if (Mode == 5 ) { buttonA = false; RTC.dow++; if (RTC.dow >= 8 ) { RTC.dow = 1; } RTC.writeTime(); getDay(szMesg); } else if (Mode == 6 ) { buttonA = false; RTC.dd++; if (RTC.dd >= 32 ) { RTC.dd = 1; } RTC.writeTime(); getDate(szDate); } else if (Mode == 7 ) { buttonA = false; RTC.mm++; if (RTC.mm >= 13 ) { RTC.mm = 1; } RTC.writeTime(); getDate(szDate); } else if (Mode == 8 ) { buttonA = false; RTC.yyyy++; if (RTC.yyyy >= 2036 ) { RTC.yyyy = 2010; } RTC.writeTime(); getDate(szDate); } } else if (buttonB) { buttonB = false; Mode++; if (Mode >= 9 ) { Mode = 0; getDay(szMesg); getDate(szDate); } else if (Mode == 2 ) { matrix.drawRect(2, 0, 21, 14, matrix.Color333(7, 7, 0)); getDay(szMesg); getDate(szDate); } else if (Mode == 3 ) { matrix.drawRect(2, 0, 21, 14, matrix.Color333(0, 0, 0)); matrix.drawRect(27, 0, 21, 14, matrix.Color333(7, 7, 0)); } else if (Mode == 4 ) { matrix.drawRect(27, 0, 21, 14, matrix.Color333(0, 0, 0)); matrix.drawRect(48, 6, 15, 8, matrix.Color333(7, 7, 0)); } else if (Mode == 5 ) { matrix.drawRect(48, 6, 15, 8, matrix.Color333(0, 0, 0)); } else if (Mode == 6 ) { getDay(szMesg); } else if (Mode == 7 ) { getDate(szDate); } else if (Mode == 8 ) { getDate(szDate); } } else if (buttonC) { if (Mode == 0 ) { buttonC = false; Mode++; getDat(szDat); } else if (Mode == 1 ) { buttonC = false; Mode--; getDay(szMesg); getDate(szDate); } else if (Mode == 2 ) { buttonC = false; RTC.h--; if (RTC.h < 0 ) { RTC.h = 23; } RTC.writeTime(); getRTCh(szTime); } else if (Mode == 3 ) { buttonC = false; RTC.m--; if (RTC.m < 0 ) { RTC.m = 59; } RTC.writeTime(); getRTCm(szTime); } else if (Mode == 4 ) { buttonC = false; RTC.s = 0; RTC.writeTime(); getTime(szTime); } else if (Mode == 5 ) { buttonC = false; RTC.dow--; if (RTC.dow <= 0 ) { RTC.dow = 7; } RTC.writeTime(); getDay(szMesg); } else if (Mode == 6 ) { buttonC = false; RTC.dd--; if (RTC.dd <= 0 ) { RTC.dd = 31; } RTC.writeTime(); getDate(szDate); } else if (Mode == 7 ) { buttonC = false; RTC.mm--; if (RTC.mm <= 0 ) { RTC.mm = 12; } RTC.writeTime(); getDate(szDate); } else if (Mode == 8 ) { buttonC = false; RTC.yyyy--; if (RTC.yyyy <= 2009 ) { RTC.yyyy = 2035; } RTC.writeTime(); getDate(szDate); } } if (Mode == 1 ) { getDat(szDat); } else if (Mode == 5 ) { matrix.drawRect(0, 14, 64, 9, matrix.Color333(7, 7, 0)); } else if (Mode == 6 ) { matrix.drawLine(3, 29, 12, 29, matrix.Color333(7, 0, 0)); } else if (Mode == 7 ) { matrix.drawLine(16, 30, 33, 30, matrix.Color333(0, 7, 7)); } else if (Mode == 8 ) { matrix.drawLine(36, 29, 64, 29, matrix.Color333(7, 0, 0)); } } void buttonAisPressed() { if (NewStateOfbuttonA != StateOfbuttonA) { if (NewStateOfbuttonA == 0) { buttonA=true; } delay(50); } StateOfbuttonA = NewStateOfbuttonA; } void buttonBisPressed() { if (NewStateOfbuttonB != StateOfbuttonB) { if (NewStateOfbuttonB == 0) { buttonB=true; } delay(50); } StateOfbuttonB = NewStateOfbuttonB; } void buttonCisPressed() { if (NewStateOfbuttonC != StateOfbuttonC) { if (NewStateOfbuttonC == 0) { buttonC=true; } delay(50); } StateOfbuttonC = NewStateOfbuttonC; } // Input a value 0 to 24 to get a color value. // The colours are a transition r - g - b - back to r. uint16_t Wheel(byte WheelPos) { if(WheelPos < 2) { return matrix.Color333(0, 7, 0); } else if(WheelPos < 5) { WheelPos -= 2; return matrix.Color333(7 , 0, 0); } else { WheelPos -= 5; return matrix.Color333(0, 7, 0); } } // Input a value 0 to 24 to get a color value. // The colours are a transition r - g - b - back to r. uint16_t Whel(byte WheelPos) { if(WheelPos < 1) { return matrix.Color333(7 , WheelPos, 0); } else if(WheelPos < 2) { WheelPos -= 1; return matrix.Color333(0, 7, WheelPos); } else if(WheelPos < 3) { WheelPos -= 2; return matrix.Color333(0, WheelPos, 7); } else if(WheelPos < 4) { WheelPos -= 3; return matrix.Color333(7,7, WheelPos); } else if(WheelPos < 5) { WheelPos -= 4; return matrix.Color333(7,0, WheelPos); } else if(WheelPos < 6) { WheelPos -= 5; return matrix.Color333(0, 7, WheelPos); } else if(WheelPos < 7) { WheelPos -= 6; return matrix.Color333(0, WheelPos, 7); } else if(WheelPos < 8) { WheelPos -= 7; return matrix.Color333(7,7, WheelPos); } else if(WheelPos < 9) { WheelPos -= 8; return matrix.Color333(7,0, WheelPos); } else { WheelPos -= 9; return matrix.Color333(WheelPos, 7, 7); } }