Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Arduino Nano Clock com matriz de LED 4x64 (nova versão)

Componentes e suprimentos

Arduino Nano R3
× 1
Matriz LED
× 1
Resistor de foto
× 1
Breadboard (genérico)
× 1
DS3231
× 1

Aplicativos e serviços online

Arduino IDE

Sobre este projeto





Ler um display de relógio em uma sala a vários metros requer tal display de matriz de LED.

Tendo comprado por um bom preço um display de 4 células, procurei no Hackster os projetos disponíveis:existem vários, para o Arduino Nano. Se você quiser ver horas, minutos e segundos simultaneamente:apenas alguns projetos funcionam, porque você precisa de dígitos menores do que os amplamente disponíveis com 5x7 pixels por dígito. Uma opção é usar a biblioteca MD_Parola, mas o tamanho do código é muito grande para um relógio simples. A outra opção testada foi a biblioteca Max72xxPanel, mas ela é muito antiga e chama outras bibliotecas. Finalmente, o projeto é baseado na biblioteca de interface básica MD_MAX722XX, incluída em todas as outras.

As observações deste site me fizeram revisar os aspectos de hardware e o código.

- Existem muitas bibliotecas chamadas DS3231. Eu uso este:http://www.rinkydinkelectronics.com/library.php?id=73

Suporte da biblioteca Arduino / chipKit para DS3231 I2C Real-Time ClockCopyright (C) 2015 Rinky-Dink Electronics, Henning Karlsen. Todos os direitos reservados

- Primeiro:o display de matriz de LED. Existem vários modelos no mercado, então é muito provável que a tela mostre coisas estranhas depois que você carregar este código. Solução:carregue este exemplo da biblioteca "MD_MAX72xx_lib.h":"MD_MAX72xx_HW_Mapper.ino" e encontre o modelo do seu hardware. No meu código, o modelo foi definido:#define HARDWARE_TYPE MD_MAX72XX ::ICSTATION_HW, mas isso pode não funcionar até que você defina o modelo certo!

- Os pequenos segundos agradáveis ​​não apareceram ultimamente? Agora (v2), as fontes para esses segundos estão incluídas no código, portanto, não há necessidade de alterar nenhuma outra biblioteca.

- Uma longa lista de advertência de compilação ocorreu devido às atualizações do Arduino. Agora, os meses estão em uma matriz de char bidimensional e não usam mais um ponteiro. Quaisquer outros avisos vêm da biblioteca DS3231.h, mas podem ser ignorados.

- Os pontos piscando agora são apenas 2 pontos! Os segundos precisos são mostrados, usando minhas fontes 3x5, após "hh:mm". Além disso, os pontos da coluna ":" piscam quase duas vezes por segundo, só para mostrar que está vivo!

- Atender um pedido:a hora é mostrada durante 53 segundos a cada minuto e durante os últimos 7 segundos são mostradas a data e a temperatura.

- O dia da semana também pode ser mostrado, se você descomentar duas linhas no loop (). Nesse caso, você pode preferir reduzir o intervalo de 53 segundos para 51.

- Se você preferir o formato de 12 horas, veja uma das minhas respostas mais antigas.

- A hora RTC pode ser definida no Monitor Serial Arduino escrevendo na área de entrada DD / MM / AAAA hh:mm:ss (não se esqueça do espaço entre) e pressione Enter / Send. Isso pode ser feito sempre que um cabo USB estiver conectado e o Serial Monitor estiver funcionando (COM e taxa de transmissão corretos).

O novo código usa 13558 bytes (44%) e 372 bytes (18%) para variáveis, por isso é um pouco mais curto!

A data é mostrada como "dd Seg" e a temperatura ambiente em graus. Celsius (estimado usando o sensor interno RTC) é mostrado em uma página separada. O brilho é controlado por um resistor fotográfico. O código funciona, porém, mesmo sem sensor de luz.

Obrigado pelo seu interesse, demonstrado pelo botão “respeito”!

Código

  • Versão ANTIGA - relógio Arduino Nano Dot Matrix
  • Nova versão (v2) - relógio Arduino Nano Dot Matrix
Versão ANTIGA - relógio Arduino Nano Dot Matrix Arduino
Como muitas bibliotecas mudaram desde o lançamento inicial, este código está obsoleto. Use a nova versão Todas as conexões são descritas no código. Para fontes pequenas, altere algumas linhas em MD_MAX72xx_font.cpp, conforme explicado no código.
 / * AVISO:o código inicial agora está obsoleto. Use o novo (versão 2) * Relógio Arduino Nano DS3231 com LED Matrix 4x (8x8) SPI * * Arduino Nano 5V lógico - 32kB prog. espaço * Ferramentas:Placa:Arduino Nano; Processador:ATmega328P (Old Bootloader) !! * LED Matrix 4x (8x8) SPI com conector do lado direito (último módulo) * https://www.banggood.com/MAX7219-Dot-Matrix-Module-4-in- 1-Display-For-Arduino-p-1072083.html? Rmmds =myorder &cur_warehouse =CN * * CONEXÕES:*>> LCD 4x64 -> Arduino Nano:(usando Hardware SPI):* 5V -> pino 5V * GND -> GND pin * CLK_PIN -> 13 // ou SCK * DATA_PIN -> 11 // ou MOSI * CS_PIN -> 10 // ou SS * *>> DS3231 RTC -> Arduino Nano:* SDA (DAT) -> A4 * SCL ( CLK) -> A5 * Inspirado por:1) Arduino Clock da AnthoTRONICS Última edição:22 de março de 2019 * mas sem MD_parola por causa de sua grande pegada! Nova função getdate. * 2) O relógio digital UNO mais simples de todos os tempos por plouc68000:* https://create.arduino.cc/projecthub/plouc68000/simplest-uno-digital-clock-ever-4613aa?ref=user&ref_id=680368&offset=1* 3) LEDDotMatrixClock.ino de Leonardo Sposina, mas aqui sem "Max72xxPanel.h" * https://github.com/leonardosposina/arduino-led-dot-matrix-clock/blob/master/LEDDotMatrixClock/LEDDotMatrixClock.ino* Sem uso Max72xxPanel.h, mas ainda são usados ​​dígitos de tamanho pequeno. Código de pegada pequena aqui. * Substitua na biblioteca MD_MAX72XX / src / MD_MAX72xx_font.cpp:* 1) #define USE_NEW_FONT 1 * 2) as fontes # 148 ... 158 devem ser substituídas por fontes 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, // 52 4 3, 184, 168, 232, // 53 5 3, 248, 168, 232, // 54 6 3, 8, 232, 24, // 55 7 3, 248, 168, 248, // 56 8 3 , 184, 168, 248, // 57 9 1, 80, // 58:* * projeto:13790 bytes (44%); variáveis ​​361 bytes (17%) * Autor:MVP https://www.hackster.io/MVP*/#include  #include "DS3231.h" #include "MD_MAX72xx_lib.h" // # include " Font_Data.h "DS3231 rtc (SDA, SCL); // Byte do relógio em tempo real LDR_PIN =A2; // Sensor LDR pin # define MAX_DEVICES 4 // Define pins # define CLK_PIN 13 // ou SCK # define DATA_PIN 11 // ou MOSI # define CS_PIN 10 // ou SS # define HARDWARE_TYPE MD_MAX72XX ::ICSTATION_HW # define USE_NEW_FONT 1 # define BUF_SIZE 20 // tamanho do buffer de texto # define CHAR_SPACING 1 // pixels entre caracteres char buf [BUF_SIZE], secs [4]; uint8_t dots; // interface de hardware SPI // matriz Max72xxPanel =Max72xxPanel (CS_PIN, H_DISPLAYS, V_DISPLAYS72); =MD_MAX72XX (HARDWARE_TYPE, CS_PIN, MAX_DEVICES); const byte WAIT =100; const byte SPACER =1; byte FONT_WIDTH; bool timeset =false; void AdjustClock (String data) {byte _day =data.substring (0,2) .toInt (); byte _month =data.substring (3,5) .toInt (); int _ano =dados.substring (6,10) .toInt (); byte _hour =data.substring (11,13) .toInt (); byte _min =data.substring (14,16) .toInt (); byte _sec =data.substring (17,19) .toInt (); rtc.setTime (_hour, _min, _sec); rtc.setDate (_day, _month, _year); Serial.println (F (">> Data e hora configurada com sucesso!")); timeset =true;} byte ledintensitySelect (int light) {byte _value =0; if (luz> =0 &&luz <=127) {_valor =12; } else if (light> =128 &&light <=319) {_value =3; } else if (light> =320 &&light <=512) {_value =0; } return _value;}; void printText (uint8_t modStart, uint8_t modEnd, char * pMsg) // Imprime a string de texto para os módulos de matriz de LED especificados.// A área de mensagem é preenchida com colunas em branco após a impressão. {uint8_t state =0; uint8_t curLen; uint16_t showLen; uint8_t cBuf [FONT_WIDTH]; int16_t col =((modEnd + 1) * COL_SIZE) - 1; matrix.control (modStart, modEnd, MD_MAX72XX ::UPDATE, MD_MAX72XX ::OFF); do // máquina de estados finitos para imprimir os caracteres no espaço disponível {switch (state) {case 0:// Carrega o próximo caractere da tabela de fontes // se alcançamos o final da mensagem, zera o ponteiro da mensagem if (* pMsg =='\ 0') {showLen =col - (modEnd * COL_SIZE); // caracteres de preenchimento state =2; pausa; } // recupera o próximo caractere do arquivo de fonte showLen =matrix.getChar (* pMsg ++, sizeof (cBuf) / sizeof (cBuf [0]), cBuf); curLen =0; state ++; // !! cair deliberadamente para o próximo estado para começar a exibir o caso 1:// exibir a próxima parte da matriz de caracteres.setColumn (col--, cBuf [curLen ++]); // feito com o caractere da fonte, agora exibe o espaço entre os caracteres if (curLen ==showLen) {showLen =CHAR_SPACING; estado =2; } pausa; caso 2:// inicializa o estado para exibir colunas vazias curLen =0; state ++; // caem no caso 3:// exibe o espaçamento entre caracteres ou o preenchimento do final da mensagem (colunas em branco) matrix.setColumn (col--, 0); curLen ++; if (curLen ==showLen) state =0; pausa; padrão:col =-1; // isso definitivamente termina o loop do}} while (col> =(modStart * COL_SIZE)); matrix.control (modStart, modEnd, MD_MAX72XX ::UPDATE, MD_MAX72XX ::ON);} void setup () {pinMode (LDR_PIN, INPUT_PULLUP); Serial.begin (9600); Serial.println (F (">> Arduino 32x8 LED Dot Matrix Clock!")); Serial.println (F (">> Use o formato 
para definir a data e a hora do relógio!")); rtc.begin (); matrix.begin (); matrix.clear (); FONT_WIDTH =5 + ESPAÇADOR; // A largura da fonte é de 5 pixels matrix.control (MD_MAX72XX ::INTENSITY, 2);; // Use um valor entre 0 e 15 para o brilho} void getDate () // Configuração de data:Código para ler a data do relógio {char * meses [] ={"Jan", "Feb", "Mar", "Abr", "Maio", "junho", "julho", "agosto", "setembro", "outubro", "novembro", "dezembro"}; String dts =rtc.getDateStr (); // Obter string dd / mm / aaaa String dds =dts.substring (0,2); // Extrair data String mms =dts.substring (3,5); // Extrair mês int mm =mms.toInt (); // Converter para o número do mês dds.concat (""); dds.concat (String (meses [mm-1])); // Reconstruir string de data como "dd Mmm" dds.toCharArray (buf, sizeof (buf)); // buffer de retorno} void getHour () // Configuração da data:Código para ler a data do relógio {String dts =rtc.getTimeStr (); // Obter hh:mm:ss string String hhs =dts.substring (0,2); // Extrair hora int hh =hhs.toInt (); // Converter para número if (hh <10) dots =7; if (hh> 19 &&hh <24) dots =13; if ((hh> 9 &&hh <20) || (hh ==21)) pontos =11; se (hh ==1) pontos =5; se (hh ==11) pontos =10; // String outmsg =dts.substring (0,5); // Extrair hh:mm (opcional) String outmsg =String (hh); // Extraia h se h <10 outmsg.concat (":"); // adicione:outmsg.concat (dts.substring (3,5)); // adiciona mm outmsg.toCharArray (buf, BUF_SIZE);} void showsec () {String dts =rtc.getTimeStr (); // Obter hh:mm:ss string String scs1 =dts.substring (6,7); String scs2 =dts.substring (7); char sc1 =148 + scs1.toInt (); // Converter para o índice de char char sc2 =148 + scs2.toInt (); // Converter para o índice de char matrix.setChar (6, sc1); matrix.setChar (2, sc2);} void loop () {byte ledIntensity =ledintensitySelect (analogRead (LDR_PIN)); matrix.control (MD_MAX72XX ::INTENSITY, ledIntensity);; // Use um valor entre 0 e 15 para o brilho // Mostra hh:mm de buf getHour (); printText (0, MAX_DEVICES-1, buf); atraso (ESPERA); // Dois pontos piscando:for (uint8_t i =0; i <8; i ++) {matrix.setColumn (MAX_DEVICES * 8-dots, 36); showsec (); atraso (250); matrix.setColumn (MAX_DEVICES * 8 pontos, 0); showsec (); atraso (250); } // Saia rolando para cima:for (uint8_t i =0; i <8; i ++) {matrix.transform (MD_MAX72XX ::TSU); atraso (2 * ESPERA); atraso (ESPERA); } getDate (); printText (0, MAX_DEVICES-1, buf); atraso (20 * ESPERA); int temp =rtc.getTemp (); temp =temp-1; // Offset -1 C String outmsg =String (temp); outmsg.concat ("C"); outmsg.toCharArray (buf, BUF_SIZE); printText (0, MAX_DEVICES-1, buf); atraso (20 * ESPERA); // Configuração de tempo em RTC:if (Serial.available ()> 0 &×et ==false) {AdjustClock (Serial.readString ()); }}
Nova versão (v2) - relógio Arduino Nano Dot Matrix Arduino
Atualizado de acordo com as novas bibliotecas.
 / * Relógio Arduino Nano DS3231 com LED Matrix 4x (8x8) SPI * Versão 2 - atualizado 15/05 / 2-21 * Arduino Nano 5V lógico - 32kB prog. espaço * Ferramentas:Placa:Arduino Nano; Processador:ATmega328P (Old Bootloader) !! * LED Matrix 4x (8x8) SPI com conector do lado direito (último módulo) * https://www.banggood.com/MAX7219-Dot-Matrix-Module-4-in- 1-Display-For-Arduino-p-1072083.html? Rmmds =myorder &cur_warehouse =CN * * CONEXÕES:*>> LCD 4x64 -> Arduino Nano:(usando Hardware SPI):* 5V -> pino 5V * GND -> GND pin * CLK_PIN -> 13 // ou SCK * DATA_PIN -> 11 // ou MOSI * CS_PIN -> 10 // ou SS * *>> DS3231 RTC -> Arduino Nano:* SDA (DAT) -> A4 * SCL ( CLK) -> A5 * Inspirado por:1) Arduino Clock da AnthoTRONICS Última edição:22 de março de 2019 * mas sem MD_parola por causa de sua grande pegada! Nova função getdate. * 2) O relógio digital UNO mais simples de todos os tempos por plouc68000:* https://create.arduino.cc/projecthub/plouc68000/simplest-uno-digital-clock-ever-4613aa?ref=user&ref_id=680368&offset=1* 3) LEDDotMatrixClock.ino de Leonardo Sposina, mas aqui sem "Max72xxPanel.h" * https://github.com/leonardosposina/arduino-led-dot-matrix-clock/blob/master/LEDDotMatrixClock/LEDDotMatrixClock.ino* Sem uso Max72xxPanel.h, mas ainda são usados ​​dígitos de tamanho pequeno. Código de pegada pequena aqui. * * Projeto:113558 bytes (44%); variáveis ​​372 bytes (17%) * Autor:MVP https://www.hackster.io/MVP*/#include  #include "DS3231.h" #include "MD_MAX72xx_lib.h" // # include " Font_Data.h "DS3231 rtc (SDA, SCL); // Byte do relógio em tempo real LDR_PIN =A2; // Pino do sensor LDR # define MAX_DEVICES 4 // Define os pinos # define CLK_PIN 13 // ou SCK # define DATA_PIN 11 // ou MOSI # define CS_PIN 10 // ou SS // Defina abaixo seu modelo de hardware de matriz de LED:// # define HARDWARE_TYPE MD_MAX72XX ::ICSTATION_HW # define HARDWARE_TYPE MD_MAX72XX ::FC16_HW # define USE_NEW_FONT 1 # define BUF_SIZE 20 // tamanho do buffer de texto # define CHAR_SPACING 1 // pixels entre caracterescharf [BUF_SIZE], segundos [4] ss, dots; // Definição das fontes pequenas: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 meses de 9 caracteres [12] [4] ={"janeiro", "fevereiro", "março", "abril", "maio", "junho", "julho", "agosto", "setembro", " Out "," Nov "," Dez "}; char * wday; // Interface de hardware SPI // Matriz Max72xxPanel =Max72xxPanel (CS_PIN, H_DISPLAYS, V_DISPLAYS); MD_MAX72XX matriz =MD_MAX72XX (HARDWARE_TYPE, CS_PIN, MAX_DEVICES); const byte WAte =100; const byte SPACER =1; byte FONT_WIDTH; bool timeset =false; void AdjustClock (String data) {byte _day =data.substring (0,2) .toInt (); byte _month =data.substring (3,5) .toInt (); int _ano =dados.substring (6,10) .toInt (); byte _hour =data.substring (11,13) .toInt (); byte _min =data.substring (14,16) .toInt (); byte _sec =data.substring (17,19) .toInt (); rtc.setTime (_hour, _min, _sec); rtc.setDate (_day, _month, _year); Serial.println (F (">> Data e hora configurada com sucesso!")); timeset =true;} byte ledintensitySelect (int light) {byte _value =0; if (luz> =0 &&luz <=127) {_valor =12; } else if (light> =128 &&light <=319) {_value =3; } else if (light> =320 &&light <=512) {_value =0; } return _value;}; void printText (uint8_t modStart, uint8_t modEnd, char * pMsg) // Imprime a string de texto para os módulos de matriz de LED especificados.// A área de mensagem é preenchida com colunas em branco após a impressão. {uint8_t state =0; uint8_t curLen; uint16_t showLen; uint8_t cBuf [FONT_WIDTH]; int16_t col =((modEnd + 1) * COL_SIZE) - 1; matrix.control (modStart, modEnd, MD_MAX72XX ::UPDATE, MD_MAX72XX ::OFF); do // máquina de estados finitos para imprimir os caracteres no espaço disponível {switch (state) {case 0:// Carrega o próximo caractere da tabela de fontes // se alcançamos o final da mensagem, zera o ponteiro da mensagem if (* pMsg =='\ 0') {showLen =col - (modEnd * COL_SIZE); // caracteres de preenchimento state =2; pausa; } // recupera o próximo caractere do arquivo de fonte showLen =matrix.getChar (* pMsg ++, sizeof (cBuf) / sizeof (cBuf [0]), cBuf); curLen =0; state ++; // !! cair deliberadamente para o próximo estado para começar a exibir o caso 1:// exibir a próxima parte da matriz de caracteres.setColumn (col--, cBuf [curLen ++]); // feito com o caractere da fonte, agora exibe o espaço entre os caracteres if (curLen ==showLen) {showLen =CHAR_SPACING; estado =2; } pausa; caso 2:// inicializa o estado para exibir colunas vazias curLen =0; state ++; // caem no caso 3:// exibe o espaçamento entre caracteres ou o preenchimento do final da mensagem (colunas em branco) matrix.setColumn (col--, 0); curLen ++; if (curLen ==showLen) state =0; pausa; padrão:col =-1; // isso definitivamente termina o loop do}} while (col> =(modStart * COL_SIZE)); matrix.control (modStart, modEnd, MD_MAX72XX ::UPDATE, MD_MAX72XX ::ON);} void setup () {pinMode (LDR_PIN, INPUT_PULLUP); Serial.begin (9600); Serial.println (F (">> Arduino 32x8 LED Dot Matrix Clock!")); Serial.println (F (">> Use o formato 
para definir a data e a hora do relógio!")); rtc.begin (); matrix.begin (); matrix.clear (); FONT_WIDTH =5 + ESPAÇADOR; // A largura da fonte é de 5 pixels matrix.control (MD_MAX72XX ::INTENSITY, 2);; // Use um valor entre 0 e 15 para o brilho rtc.setDOW (); // Requerido para um novo RTC} void getDate () // Configuração de data:Código para ler a data do relógio {String dts =rtc.getDateStr (); // Obter string dd / mm / aaaa String dds =dts.substring (0,2); // Extrair data String mms =dts.substring (3,5); // Extrair mês int mm =mms.toInt (); // Converter para o número do mês dds.concat (""); dds.concat (String (meses [mm-1])); // Reconstruir string de data como "dd Mmm" dds.toCharArray (buf, sizeof (buf)); // buffer de retorno wday =rtc.getDOWStr (2);} void getHour () // Configuração de data:Código para ler a data do relógio {String dts =rtc.getTimeStr (); // Obter hh:mm:ss string String hhs =dts.substring (0,2); // Extrair hora String mms =dts.substring (3,5); // Extraia os minutos hh =hhs.toInt (); // Converter para o número mm =mms.toInt (); // Converter para o número mm ss =(dts.substring (6,8)). ToInt (); // Extraia os segundos como um número if (hh> =0 &&hh <10) dots =7; if (hh> 9 &&hh <20) pontos =11; if (hh> 19 &&hh <25) dots =13; if (hh% 10 ==1) dots- =2; // String outmsg =dts.substring (0,5); // Extrair hh:mm (opcional) String outmsg =String (hh); // Extraia h se h <10 // outmsg.concat (":"); // adicionar:mas em 2 colunas !! outmsg.concat (char (124)); // adiciona 1 coluna completa entre os números outmsg.concat (dts.substring (3,5)); // adiciona mm outmsg.toCharArray (buf, BUF_SIZE);} // Nova versão da função, usando o pequeno fontsvoid showsec (uint8_t secs) {uint8_t secs1 =secs% 10; uint8_t secs2 =secs / 10; para (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]); }} void loop () {byte ledIntensity =ledintensitySelect (analogRead (LDR_PIN)); matrix.control (MD_MAX72XX ::INTENSITY, ledIntensity);; // Use um valor entre 0 e 15 para o brilho getHour (); // Tempo de leitura do RTC printText (0, MAX_DEVICES-1, buf); // Mostra hh | mm de buf matrix.setColumn (MAX_DEVICES * 8-dots, 0); // Limpe o | inst longo sem sinal =millis (); // marcar este momento while (ss <53) {// Primeiros 53 segundos de cada minuto do tempo de exibição while (millis () - inst> 1000) {inst =millis (); ss ++; // Aumenta os segundos showsec (ss); // Mostra os segundos para (uint8_t i =0; i <2; i ++) {matrix.setColumn (MAX_DEVICES * 8-dots, 36); // Dois pontos piscando:delay (240); matrix.setColumn (MAX_DEVICES * 8 pontos, 0); atraso (240); }}} // Então "tempo" está rolando para cima:for (uint8_t i =0; i <8; i ++) {matrix.transform (MD_MAX72XX ::TSU); atraso (3 * ESPERA); } // Escreva a data atual:getDate (); printText (0, MAX_DEVICES-1, buf); atraso (20 * ESPERA); // Escreva o dia da semana (se não for comentado):// printText (0, MAX_DEVICES-1, wday); // atraso (20 * WAIT); // Escreva a temperatura ambiente estimada do sensor RTC int temp =rtc.getTemp (); temp =temp-1; // Offset -1 C String outmsg =String (temp); outmsg.concat ("C"); outmsg.toCharArray (buf, BUF_SIZE); printText (0, MAX_DEVICES-1, buf); atraso (20 * ESPERA); // Configuração de tempo no RTC se o monitor serial estiver ativado no IDE do Arduino:if (Serial.available ()> 0 &×et ==false) {AdjustClock (Serial.readString ()); }}

Esquemas

Inspirado em Leonardo Sposina, mas #define CS_PIN (Matrix) <--> 10 (Nano)
O esquema é QUASE o mesmo para todos os projetos Matrix. Aqui, o foto-resistor é original. Conforme mencionado no código:#define CS_PIN (Matrix) <--> 10 (Nano) https://github.com/leonardosposina/arduino-led-dot-matrix-clock

Processo de manufatura

  1. Relógio Arduino com horas de oração islâmica
  2. Arduino Temp. Monitor e relógio em tempo real com tela 3.2
  3. Arduino com Bluetooth para controlar um LED!
  4. Brincando com Nextion Display
  5. Matriz LED + Display da porta do sensor de movimento [Arduino Holiday]
  6. Arduino Nano:Controle 2 motores de passo com joystick
  7. Relógio giratório Arduino de matriz de LED único
  8. Controlando uma matriz de LED com Arduino Uno
  9. Contador Geiger portátil com Arduino Nano
  10. Multiplexador de carregador de bateria inteligente com Smart Display