산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

4x64 LED 매트릭스가 있는 Arduino Nano 시계(새 버전)

구성품 및 소모품

Arduino Nano R3
× 1
LED 매트릭스
× 1
포토 저항기
× 1
브레드보드(일반)
× 1
DS3231
× 1

앱 및 온라인 서비스

Arduino IDE

이 프로젝트 정보


몇 미터 떨어진 방의 시계 디스플레이를 읽으려면 이러한 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

    제조공정

    1. 이슬람 기도 시간이 있는 Arduino 시계
    2. Arduino Temp. 3.2 디스플레이가 있는 모니터 및 실시간 시계
    3. Bluetooth가 탑재된 Arduino로 LED 제어!
    4. Nextion 디스플레이로 재생
    5. LED 매트릭스 + 모션 센서 도어 디스플레이 [Arduino Holiday]
    6. Arduino Nano:조이스틱으로 2개의 스테퍼 모터 제어
    7. 단일 LED 매트릭스 Arduino 플립 시계
    8. Arduino Uno로 LED 매트릭스 제어
    9. Arduino Nano가 있는 휴대용 가이거 계수기
    10. 스마트 디스플레이가 있는 스마트 배터리 충전기 멀티플렉서