이 프로젝트 정보
몇 미터 떨어진 방의 시계 디스플레이를 읽으려면 이러한 LED 매트릭스 디스플레이가 필요합니다.
좋은 가격에 4셀 디스플레이를 구입한 후 Hackster에서 사용 가능한 프로젝트를 찾았습니다. Arduino Nano용으로 여러 프로젝트가 있습니다. 시, 분, 초를 동시에 보고 싶다면 숫자당 5x7 픽셀로 널리 사용되는 것보다 더 작은 숫자가 필요하기 때문에 소수의 프로젝트만 작동합니다. 옵션은 MD_Parola 라이브러리를 사용하는 것이지만 코드 크기가 간단한 시계에 비해 너무 큽니다. 테스트된 다른 옵션은 Max72xxPanel 라이브러리이지만 이것은 너무 오래되어 다른 라이브러리를 호출합니다. 마지막으로 이 프로젝트는 다른 모든 라이브러리에 포함된 기본 인터페이스 라이브러리 MD_MAX722XX를 기반으로 합니다.
이 사이트의 설명으로 인해 하드웨어 측면과 코드를 검토하게 되었습니다.
- DS3231이라는 라이브러리가 많이 있습니다. 나는 이것을 사용한다:http://www.rinkydinkelectronics.com/library.php?id=73
DS3231 I2C Real-Time ClockCopyright (C)2015 Rinky-Dink Electronics, Henning Karlsen에 대한 Arduino/chipKit 라이브러리 지원. 모든 권리 보유
- 첫째:LED 매트릭스 디스플레이. 시중에 여러 모델이 있으므로 이 코드를 업로드한 후 디스플레이에 이상한 것이 표시될 가능성이 매우 높습니다. 솔루션:"MD_MAX72xx_lib.h" 라이브러리:"MD_MAX72xx_HW_Mapper.ino"에서 이 예제를 업로드하고 하드웨어 모델을 찾으십시오. 내 코드에서 모델이 정의되었습니다. #define HARDWARE_TYPE MD_MAX72XX::ICSTATION_HW, 하지만 올바른 모델을 설정할 때까지 작동하지 않을 수 있습니다!
- 최근에 멋진 스몰세컨즈가 나오지 않았나요? 이제(v2), 이 초의 글꼴이 코드에 포함되므로 다른 라이브러리를 변경할 필요가 없습니다.
- Arduino 업데이트로 인해 긴 컴파일 경고 목록이 발생했습니다. 이제 월은 2차원 char 배열에 있으며 더 이상 포인터를 사용하지 않습니다. 다른 모든 경고는 DS3231.h 라이브러리에서 제공되지만 무시할 수 있습니다.
- 깜박이는 점은 이제 단 2개의 점입니다! 정확한 초는 "hh:mm" 뒤에 3x5 글꼴을 사용하여 표시됩니다. 또한 열 점 ":"이 거의 1초에 두 번 깜박이며 살아 있음을 보여줍니다!
- 요청에 응답 :1분에 53초 동안 시간을 표시하고 마지막 7초 동안은 날짜와 온도를 표시합니다.
- 루프()에서 두 줄의 주석을 제거하면 요일도 표시될 수 있습니다. 이 경우 53초 간격을 51초로 줄이는 것이 좋습니다.
- 12시간 형식을 선호하는 경우 이전 답변 중 하나를 참조하세요.
- RTC 시간은 입력 영역 DD/MM/YYYY hh:mm:ss(사이의 공백을 잊지 마십시오)에 쓰고 Enter/Send를 눌러 Arduino 직렬 모니터에서 설정할 수 있습니다. USB 케이블이 연결되고 직렬 모니터가 작동할 때마다 수행할 수 있습니다(올바른 COM 및 전송 속도).
새 코드는 변수에 13558바이트(44%)와 372바이트(18%)를 사용하므로 조금 더 짧습니다!
날짜는 "dd Mon"으로 표시되고 실온은 deg로 표시됩니다. 섭씨(RTC 내부 센서를 사용하여 추정)는 별도 페이지에 표시됩니다. 밝기는 포토 레지스터에 의해 제어됩니다. 그러나 코드는 광 센서가 없어도 작동합니다.
관심을 가져주셔서 감사합니다. "존중" 버튼으로 표시됩니다!
섹션> <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드"> 코드
<울> 이전 버전 - Arduino Nano 도트 매트릭스 시계
새 버전(v2) - Arduino Nano Dot Matrix 시계
이전 버전 - Arduino Nano 도트 매트릭스 시계Arduino
초기 릴리스 이후로 많은 라이브러리가 변경되었기 때문에 이 코드는 더 이상 사용되지 않습니다. 새 버전 사용모든 연결은 코드에 설명되어 있습니다. 작은 글꼴의 경우 코드에 설명된 대로 MD_MAX72xx_font.cpp에서 몇 줄을 변경하십시오./* 경고:초기 코드는 이제 사용되지 않습니다. 새로운 것(버전 2) 사용 * LED 매트릭스 4x(8x8) SPI가 있는 Arduino Nano DS3231 클럭 * * Arduino Nano 5V 로직 - 32kB prog. space * 도구:보드:Arduino Nano; 프로세서:ATmega328P(구 부트로더)!!* 오른쪽에 커넥터가 있는 LED Matrix 4x(8x8) SPI(마지막 모듈)* https://www.banggood.com/MAX7219-Dot-Matrix-Module-4-in- 1-Display-For-Arduino-p-1072083.html?rmmds=myorder&cur_warehouse=CN* * 연결:*>> LCD 4x64 -> Arduino Nano:(하드웨어 SPI 사용):* 5V -> 5V 핀* GND -> GND 핀* CLK_PIN -> 13 // 또는 SCK* DATA_PIN -> 11 // 또는 MOSI* CS_PIN -> 10 // 또는 SS * *>> DS3231 RTC -> Arduino Nano:* SDA(DAT) -> A4* SCL( CLK) -> A5 * Inspired by:1) AnthoTRONICS의 Arduino 시계 최종 편집:2019년 3월 22일* 그러나 큰 공간 때문에 MD_parola가 없습니다! 새로운 getdate 기능.* 2) plouc68000의 가장 단순한 UNO 디지털 시계:* https://create.arduino.cc/projecthub/plouc68000/simplest-uno-digital-clock-ever-4613aa?ref=user&ref_id=680368&offset=1* 3) Leonardo Sposina의 LEDDotMatrixClock.ino, 하지만 여기에는 "Max72xxPanel.h"가 없습니다.* https://github.com/leonardosposina/arduino-led-dot-matrix-clock/blob/master/LEDDotMatrixClock/LEDDotMatrixClock.ino* 사용하지 않음 Max72xxPanel.h이지만 작은 크기의 숫자가 사용됩니다. 여기에 작은 공간 코드가 있습니다.* 라이브러리 MD_MAX72XX/src/MD_MAX72xx_font.cpp에서 교체:* 1) #define USE_NEW_FONT 1* 2) 글꼴 #148 ... 158은 3x5 글꼴로 교체해야 합니다:3, 248, 136, 248, / / 48 0 3, 144, 248, 128, // 49 1 3, 200, 168, 184, // 50 2 3, 136, 168, 248, // 51 3 3, 112, 72, 224, // 4 3, 184, 168, 232, // 53 5 3, 248, 168, 232, // 54 6 3, 8, 232, 24, // 55 7 3, 248, 168, 248, // 56 83 , 184, 168, 248, // 57 9 1, 80, // 58 :* * 프로젝트:13790바이트(44%); 변수 361바이트(17%)* 작성자:MVP https://www.hackster.io/MVP*/#include #include "DS3231.h#include "MD_MAX72xx_lib.h"//#include " Font_Data.h"DS3231 rtc(SDA, SCL); // 실시간 clockconst 바이트 LDR_PIN =A2; // LDR 센서 핀#define MAX_DEVICES 4// 핀 정의#define CLK_PIN 13 // 또는 SCK#define DATA_PIN 11 // 또는 MOSI#define CS_PIN 10 // 또는 SS#define HARDWARE_TYPE MD_MAX72XX::ICSTATION_HW#define_FONTUSE_1# BUF_SIZE 20 // 텍스트 버퍼 크기#define CHAR_SPACING 1 // 문자 사이의 픽셀char buf[BUF_SIZE], secs[4];uint8_t dots;// SPI 하드웨어 인터페이스// Max72xxPanel matrix =Max72xxPanel(CS_PIN, H_DISPLAYS, XX) matrix =MD_MAX72XX(HARDWARE_TYPE, CS_PIN, MAX_DEVICES); const byte WAIT =100; const byte SPACER =1;byte FONT_WIDTH;bool timeset=false;void adjustClock(문자열 데이터) { byte _day =data.substring(0,2)로. (); 바이트 _month =data.substring(3,5).toInt(); int _year =data.substring(6,10).toInt(); 바이트 _시간 =data.substring(11,13).toInt(); 바이트 _min =data.substring(14,16).toInt(); 바이트 _sec =data.substring(17,19).toInt(); rtc.setTime(_시간, _분, _초); rtc.setDate(_일, _월, _년); Serial.println(F(">> 날짜/시간이 성공적으로 설정되었습니다!")); timeset=true;}바이트 ledintensitySelect(int 빛) { 바이트 _값 =0; if (빛>=0 &&빛 <=127) { _값 =12; } else if (빛>=128 &&빛 <=319) { _value =3; } else if (빛>=320 &&빛 <=512) { _value =0; } return _value;};void printText(uint8_t modStart, uint8_t modEnd, char *pMsg)// 지정된 LED 매트릭스 모듈에 텍스트 문자열을 인쇄합니다.// 메시지 영역은 인쇄 후 빈 열로 채워집니다.{ uint8_t state =0; uint8_t curLen; uint16_t showLen; uint8_t cBuf[FONT_WIDTH]; int16_t 열 =((modEnd + 1) * COL_SIZE) - 1; matrix.control(modStart, modEnd, MD_MAX72XX::UPDATE, MD_MAX72XX::OFF); do // 사용 가능한 공간의 문자를 인쇄하는 유한 상태 기계 { switch(state) { case 0:// 글꼴 테이블에서 다음 문자 로드 // 메시지 끝에 도달하면 메시지 포인터를 재설정합니다. if (*pMsg =='\0') { showLen =열 - (modEnd * COL_SIZE); // 패딩 문자 state =2; 부서지다; } // 글꼴 파일에서 다음 문자를 검색합니다. showLen =matrix.getChar(*pMsg++, sizeof(cBuf)/sizeof(cBuf[0]), cBuf); curLen =0; 상태++; // !! 사례 1 표시를 시작하기 위해 의도적으로 다음 상태로 넘어갑니다. // 문자의 다음 부분을 표시합니다. matrix.setColumn(col--, cBuf[curLen++]); // 글꼴 문자로 완료, 이제 문자 사이의 공백을 표시합니다. if (curLen ==showLen) { showLen =CHAR_SPACING; 상태 =2; } 부서지다; case 2:// 빈 열을 표시하기 위한 상태 초기화 curLen =0; 상태++; // 경우 3을 통과:// 문자 간 간격 또는 메시지 패딩 끝 표시(빈 열) matrix.setColumn(col--, 0); 컬렌++; if (curLen ==showLen) 상태 =0; 부서지다; 기본값:열 =-1; // 이것은 확실히 do 루프를 종료합니다 } } while (col>=(modStart * COL_SIZE)); matrix.control(modStart, modEnd, MD_MAX72XX::UPDATE, MD_MAX72XX::ON);} 무효 설정() { pinMode(LDR_PIN, INPUT_PULLUP); Serial.begin(9600); Serial.println(F(">> Arduino 32x8 LED 도트 매트릭스 시계!")); Serial.println(F(">> 시계의 날짜와 시간을 설정하려면 형식을 사용하십시오!")); rtc.begin(); matrix.begin(); matrix.clear(); FONT_WIDTH=5 + 스페이서; // 글꼴 너비는 5픽셀입니다. matrix.control(MD_MAX72XX::INTENSITY, 2);; // 밝기에 0에서 15 사이의 값 사용}void getDate()// 날짜 설정:시계 날짜를 읽는 코드{ char* months[]={"Jan","Feb","Mar","Apr", "5월","6월","7월","8월","9월","10월","11월","12월"}; 문자열 dts =rtc.getDateStr(); // dd/mm/yyyy 문자열 가져오기 String dds=dts.substring(0,2); // 날짜 추출 String mms=dts.substring(3,5); // 월 추출 int mm=mms.toInt(); // 월 숫자로 변환 dds.concat(" "); dds.concat(문자열(월[mm-1])); // 날짜 문자열을 "dd Mmm"로 다시 작성 dds.toCharArray(buf,sizeof(buf)); // return buffer}void getHour()// 날짜 설정:시계 날짜를 읽는 코드{ String dts =rtc.getTimeStr(); // hh:mm:ss 문자열 가져오기 String hhs=dts.substring(0,2); // 시간 추출 int hh=hhs.toInt(); // 숫자로 변환 if (hh <10) dots=7; if(hh> 19 &&hh <24) 점=13; if ((hh> 9 &&hh <20) || (hh ==21)) 점=11; if (hh ==1) 점 =5; if (hh ==11) 점 =10; //문자열 outmsg=dts.substring(0,5); // hh:mm 추출(옵션) String outmsg=String(hh); // h<10이면 h를 추출 outmsg.concat(":"); // 추가 :outmsg.concat(dts.substring(3,5)); // mm 추가 outmsg.toCharArray(buf,BUF_SIZE);}void showsec(){ String dts =rtc.getTimeStr(); // hh:mm:ss 문자열 가져오기 String scs1=dts.substring(6,7); 문자열 scs2=dts.substring(7); char sc1=148+scs1.toInt(); // char의 인덱스로 변환 char sc2=148+scs2.toInt(); // char의 인덱스로 변환 matrix.setChar(6,sc1); matrix.setChar(2,sc2);} 무효 루프() { 바이트 ledIntensity =ledintensitySelect(analogRead(LDR_PIN)); matrix.control(MD_MAX72XX::INTENSITY, ledIntensity);; // 밝기에 0에서 15 사이의 값을 사용합니다. // buf에서 hh:mm를 표시합니다. getHour(); printText(0,MAX_DEVICES-1,buf); 지연(대기); // 두 개의 점 깜박임:for (uint8_t i=0; i<8; i++){ matrix.setColumn(MAX_DEVICES*8-dots,36); 쇼섹(); 지연(250); matrix.setColumn(MAX_DEVICES*8-dots,0); 쇼섹(); 지연(250); } // 위로 스크롤하여 종료:for (uint8_t i=0; i<8; i++){ matrix.transform(MD_MAX72XX::TSU); 지연(2*WAIT); 지연(대기); } getDate(); printText(0,MAX_DEVICES-1,buf); 지연(20*WAIT); 정수 임시 =rtc.getTemp(); 온도 =임시 -1; // 오프셋 -1 C 문자열 outmsg=String(temp); outmsg.concat("C"); outmsg.toCharArray(buf,BUF_SIZE); printText(0,MAX_DEVICES-1,buf); 지연(20*WAIT); // RTC의 시간 설정:if (Serial.available()> 0 &×et==false) { adjustClock(Serial.readString()); }}
새 버전(v2) - Arduino Nano Dot Matrix clockArduino
새 라이브러리에 따라 업데이트되었습니다./* LED 매트릭스 4x(8x8) SPI가 있는 Arduino Nano DS3231 시계 * 버전 2 - 업데이트 15/05/2-21 * Arduino Nano 5V 로직 - 32kB prog. space * 도구:보드:Arduino Nano; 프로세서:ATmega328P(구 부트로더)!!* 오른쪽에 커넥터가 있는 LED Matrix 4x(8x8) SPI(마지막 모듈)* https://www.banggood.com/MAX7219-Dot-Matrix-Module-4-in- 1-Display-For-Arduino-p-1072083.html?rmmds=myorder&cur_warehouse=CN* * 연결:*>> LCD 4x64 -> Arduino Nano:(하드웨어 SPI 사용):* 5V -> 5V 핀* GND -> GND 핀* CLK_PIN -> 13 // 또는 SCK* DATA_PIN -> 11 // 또는 MOSI* CS_PIN -> 10 // 또는 SS * *>> DS3231 RTC -> Arduino Nano:* SDA(DAT) -> A4* SCL( CLK) -> A5 * Inspired by:1) AnthoTRONICS의 Arduino 시계 최종 편집:2019년 3월 22일* 그러나 큰 공간 때문에 MD_parola가 없습니다! 새로운 getdate 기능.* 2) plouc68000의 가장 단순한 UNO 디지털 시계:* https://create.arduino.cc/projecthub/plouc68000/simplest-uno-digital-clock-ever-4613aa?ref=user&ref_id=680368&offset=1* 3) Leonardo Sposina의 LEDDotMatrixClock.ino, 하지만 여기에는 "Max72xxPanel.h"가 없습니다.* https://github.com/leonardosposina/arduino-led-dot-matrix-clock/blob/master/LEDDotMatrixClock/LEDDotMatrixClock.ino* 사용하지 않음 Max72xxPanel.h이지만 작은 크기의 숫자가 사용됩니다. 여기에 작은 풋프린트 코드가 있습니다.* * 프로젝트:113558바이트(44%); 변수 372바이트(17%)* 작성자:MVP https://www.hackster.io/MVP*/#include #include "DS3231.h#include "MD_MAX72xx_lib.h"//#include " Font_Data.h"DS3231 rtc(SDA, SCL); // 실시간 clockconst 바이트 LDR_PIN =A2; // LDR 센서 핀#define MAX_DEVICES 4// 핀 정의#define CLK_PIN 13 // 또는 SCK#define DATA_PIN 11 // 또는 MOSI#define CS_PIN 10 // 또는 SS// LED 매트릭스 하드웨어 모델 아래에 정의://# 정의 HARDWARE_TYPE MD_MAX72XX::ICSTATION_HW#define HARDWARE_TYPE MD_MAX72XX::FC16_HW#define USE_NEW_FONT 1#define BUF_SIZE 20 // 텍스트 버퍼 크기#define CHAR_SPACING ,mmhint 1 // 문자 사이의 픽셀char_sIZbuf[]BU ss, dots;// 작은 글꼴의 정의:uint8_t Font3x5 [ 10 ][ 3 ]={ { 248, 136, 248}, // 48 0 {144, 248, 128}, // 49 1 {200, 168 , 184}, // 50 2 {136, 168, 248}, // 51 3 {112, 72, 224}, // 52 4 {184, 168, 232}, // 53 5 {248, 168, 232 }, // 54 6 {8, 232, 24}, // 55 7 {248, 168, 248}, // 56 8 {184, 168, 248}}; // 57 9char months[12][4]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep"," Oct","Nov","Dec"};char* wday;// SPI 하드웨어 인터페이스// Max72xxPanel 행렬 =Max72xxPanel(CS_PIN, H_DISPLAYS, V_DISPLAYS);MD_MAX72XX 행렬 =MD_MAX72XX(HARDWARE_TYPE, CS_PIN, MAX_DEVICES); =100; 상수 바이트 스페이서 =1; 바이트 FONT_WIDTH; 부울 타임셋 =거짓; 무효 adjustClock(문자열 데이터) { 바이트 _day =data.substring(0,2).toInt(); 바이트 _month =data.substring(3,5).toInt(); int _year =data.substring(6,10).toInt(); 바이트 _시간 =data.substring(11,13).toInt(); 바이트 _min =data.substring(14,16).toInt(); 바이트 _sec =data.substring(17,19).toInt(); rtc.setTime(_시간, _분, _초); rtc.setDate(_일, _월, _년); Serial.println(F(">> 날짜/시간이 성공적으로 설정되었습니다!")); timeset=true;}바이트 ledintensitySelect(int 빛) { 바이트 _값 =0; if (빛>=0 &&빛 <=127) { _값 =12; } else if (빛>=128 &&빛 <=319) { _value =3; } else if (빛>=320 &&빛 <=512) { _value =0; } return _value;};void printText(uint8_t modStart, uint8_t modEnd, char *pMsg)// 지정된 LED 매트릭스 모듈에 텍스트 문자열을 인쇄합니다.// 메시지 영역은 인쇄 후 빈 열로 채워집니다.{ uint8_t state =0; uint8_t curLen; uint16_t showLen; uint8_t cBuf[FONT_WIDTH]; int16_t 열 =((modEnd + 1) * COL_SIZE) - 1; matrix.control(modStart, modEnd, MD_MAX72XX::UPDATE, MD_MAX72XX::OFF); do // 사용 가능한 공간의 문자를 인쇄하는 유한 상태 기계 { switch(state) { case 0:// 글꼴 테이블에서 다음 문자 로드 // 메시지 끝에 도달하면 메시지 포인터를 재설정합니다. if (*pMsg =='\0') { showLen =열 - (modEnd * COL_SIZE); // 패딩 문자 state =2; 부서지다; } // 글꼴 파일에서 다음 문자를 검색합니다. showLen =matrix.getChar(*pMsg++, sizeof(cBuf)/sizeof(cBuf[0]), cBuf); curLen =0; 상태++; // !! 사례 1 표시를 시작하기 위해 의도적으로 다음 상태로 넘어갑니다. // 문자의 다음 부분을 표시합니다. matrix.setColumn(col--, cBuf[curLen++]); // 글꼴 문자로 완료, 이제 문자 사이의 공백을 표시합니다. if (curLen ==showLen) { showLen =CHAR_SPACING; 상태 =2; } 부서지다; case 2:// 빈 열을 표시하기 위한 상태 초기화 curLen =0; 상태++; // 경우 3을 통과:// 문자 간 간격 또는 메시지 패딩 끝 표시(빈 열) matrix.setColumn(col--, 0); 컬렌++; if (curLen ==showLen) 상태 =0; 부서지다; 기본값:열 =-1; // 이것은 확실히 do 루프를 종료합니다 } } while (col>=(modStart * COL_SIZE)); matrix.control(modStart, modEnd, MD_MAX72XX::UPDATE, MD_MAX72XX::ON);} 무효 설정() { pinMode(LDR_PIN, INPUT_PULLUP); Serial.begin(9600); Serial.println(F(">> Arduino 32x8 LED 도트 매트릭스 시계!")); Serial.println(F(">> 시계의 날짜와 시간을 설정하려면 형식을 사용하십시오!")); rtc.begin(); matrix.begin(); matrix.clear(); FONT_WIDTH=5 + 스페이서; // 글꼴 너비는 5픽셀입니다. matrix.control(MD_MAX72XX::INTENSITY, 2);; // 밝기는 0에서 15 사이의 값을 사용합니다. rtc.setDOW(); // 새로운 RTC에 필요함}void getDate()// 날짜 설정:시계 날짜를 읽기 위한 코드{ String dts =rtc.getDateStr(); // dd/mm/yyyy 문자열 가져오기 String dds=dts.substring(0,2); // 날짜 추출 String mms=dts.substring(3,5); // 월 추출 int mm=mms.toInt(); // 월 숫자로 변환 dds.concat(" "); dds.concat(문자열(월[mm-1])); // 날짜 문자열을 "dd Mmm"로 다시 작성 dds.toCharArray(buf,sizeof(buf)); // 반환 버퍼 wday =rtc.getDOWStr(2);}void getHour()// 날짜 설정:시계 날짜를 읽는 코드{ String dts =rtc.getTimeStr(); // hh:mm:ss 문자열 가져오기 String hhs=dts.substring(0,2); // 시간 추출 String mms=dts.substring(3,5); // 분 추출 hh=hhs.toInt(); // 숫자로 변환 mm=mms.toInt(); // mm 숫자로 변환 ss=(dts.substring(6,8)).toInt(); // 초를 숫자로 추출 if (hh>=0 &&hh <10) dots=7; if (hh> 9 &&hh <20) 점=11; if (hh> 19 &&hh <25) 점=13; if (hh%10 ==1) 점-=2; //문자열 outmsg=dts.substring(0,5); // hh:mm 추출(옵션) String outmsg=String(hh); // h<10인 경우 h 추출 // outmsg.concat(":"); // add :하지만 2개의 열에!! outmsg.concat(char(124)); // 숫자 사이에 1개의 전체 열 추가 outmsg.concat(dts.substring(3,5)); // mm 추가 outmsg.toCharArray(buf,BUF_SIZE);}// 작은 임베디드 글꼴을 사용하는 새 버전의 함수void showsec(uint8_t secs){ uint8_t secs1=secs%10; uint8_t 초2=초/10; for (uint8_t k=0; k<3; k++){ matrix.setColumn(MAX_DEVICES*8-26-k,Font3x5 [secs2][k]); matrix.setColumn(MAX_DEVICES*8-30-k,Font3x5 [secs1][k]); }} 무효 루프() { 바이트 ledIntensity =ledintensitySelect(analogRead(LDR_PIN)); matrix.control(MD_MAX72XX::INTENSITY, ledIntensity);; // 밝기에 대해 0에서 15 사이의 값을 사용합니다. getHour(); // RTC에서 읽은 시간 printText(0,MAX_DEVICES-1,buf); // buf에서 hh|mm 표시 matrix.setColumn(MAX_DEVICES*8-dots,0); // 지우기 | 부호 없는 long inst =millis(); // 이 순간을 표시합니다. while (ss <53){ // 각 분의 처음 53초를 표시합니다. while (millis() - inst> 1000){ inst =millis(); ss++; // 초 증가 showsec(ss); // 초 표시 for (uint8_t i =0; i <2; i++){ matrix.setColumn(MAX_DEVICES*8-dots,36); // 두 개의 점을 깜박임:delay(240); matrix.setColumn(MAX_DEVICES*8-dots,0); 지연(240); } } } // 그러면 "시간"이 위쪽으로 스크롤됩니다. for (uint8_t i=0; i<8; i++){ matrix.transform(MD_MAX72XX::TSU); 지연(3*WAIT); } // 현재 날짜 쓰기:getDate(); printText(0,MAX_DEVICES-1,buf); 지연(20*WAIT); // 요일 쓰기(주석이 없는 경우)://printText(0,MAX_DEVICES-1,wday); //지연(20*대기); // RTC 센서에서 추정된 실내 온도 쓰기 int temp =rtc.getTemp(); 온도 =임시 -1; // 오프셋 -1 C 문자열 outmsg=String(temp); outmsg.concat("C"); outmsg.toCharArray(buf,BUF_SIZE); printText(0,MAX_DEVICES-1,buf); 지연(20*WAIT); // Arduino IDE에서 직렬 모니터가 활성화된 경우 RTC의 시간 설정:if (Serial.available()> 0 &×et==false) { adjustClock(Serial.readString()); }}
섹션> 회로도
Leonardo Sposina에서 영감을 얻었지만 #define CS_PIN(Matrix)<--> 10(Nano)
회로도는 모든 Matrix 프로젝트에서 거의 동일합니다. 여기 포토 레지스터가 원본입니다. 코드에서 언급한 대로:#define CS_PIN(Matrix)<--> 10(Nano) https://github.com/leonardosposina/arduino-led-dot-matrix-clock