Difference between revisions of "4-Digital Display"
(→Code Exemple->DigitalTube->ClockDisplay) |
(→Code Exemple->DigitalTube->ClockDisplay) |
||
| Line 31: | Line 31: | ||
[[File:Pinout Grove Shield Arduino Nano.JPG| 100px]] | [[File:Pinout Grove Shield Arduino Nano.JPG| 100px]] | ||
| − | [[File:Seeeduino-nano-connect.png | | + | [[File:Seeeduino-nano-connect.png | 200px]] |
[[File:4-Digital Display recto.jpg | 150px]]<br> | [[File:4-Digital Display recto.jpg | 150px]]<br> | ||
Revision as of 20:46, 31 May 2025
Contents
Grove - 4-Digital Displays (Seeed-Studio)
Caractéristiques
Grove compatible interface (3.3V/5V)
connect to D2/D3
4 digit red alpha-numeric display
8 adjustable luminance levels
Support
Drivers
chip - TM1637
Librairies
Grove_4Digital_Display Library
Four-Digit Display Suli Library
Voltage
3.3V ~ 5.5V
Code Exemple->DigitalTube->ClockDisplay
Copier les deux librairies dans C:\Program Files (x86)\Arduino\libraries, exécuter Arduino IDE, chercher l'exemple, choisir Arduino UNO, et le port COM
// Author:Frankie.Chu
// Date:9 April,2012
#include <TimerOne.h>
#include "TM1637.h"
#define ON 1
#define OFF 0
int8_t TimeDisp[] = {0x00,0x00,0x00,0x00};
unsigned char ClockPoint = 1;
unsigned char Update;
unsigned char halfsecond = 0;
unsigned char second;
unsigned char minute = 0;
unsigned char hour = 12;
#define CLK 2//pins definitions for TM1637 and can be changed to other ports
#define DIO 3
TM1637 tm1637(CLK,DIO);
void setup()
{
tm1637.set();
tm1637.init();
Timer1.initialize(500000);//timing for 500ms
Timer1.attachInterrupt(TimingISR);//declare the interrupt serve routine:TimingISR
}
void loop()
{
if(Update == ON)
{
TimeUpdate();
tm1637.display(TimeDisp);
}
}
void TimingISR()
{
halfsecond ++;
Update = ON;
if(halfsecond == 2){
second ++;
if(second == 60)
{
minute ++;
if(minute == 60)
{
hour ++;
if(hour == 24)hour = 0;
minute = 0;
}
second = 0;
}
halfsecond = 0;
}
// Serial.println(second);
ClockPoint = (~ClockPoint) & 0x01;
}
void TimeUpdate(void)
{
if(ClockPoint)tm1637.point(POINT_ON);
else tm1637.point(POINT_OFF);
TimeDisp[0] = hour / 10;
TimeDisp[1] = hour % 10;
TimeDisp[2] = minute / 10;
TimeDisp[3] = minute % 10;
Update = OFF;
}
il affiche 12:00 et ensuite 12:01 aisi de suite...
Code Wokwi
wokwi-esp32-devkit-v1, Anonymous
https://wokwi.com/projects/376726394500720641
#if defined(ESP8266)
#include <ESP8266WiFi.h>
#elif defined(ESP32)
#include <WiFi.h>
#endif
#include <TM1637Display.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
// Define the pins for TM1637
#if defined(ESP8266)
#define CLK_PIN 0 // GPIO0
#define DIO_PIN 2 // GPIO2
#elif defined(ESP32)
#define CLK_PIN 4
#define DIO_PIN 5
#endif
// Initialize the TM1637 display
TM1637Display display(CLK_PIN, DIO_PIN);
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Define NTP Server
const char* ntpServerName = "pool.ntp.org";
// Initialize UDP client for NTP
WiFiUDP ntpUDP;
// Define time zone (GMT+7 for Bangkok, Thailand)
const long utcOffsetInSeconds = 7 * 3600;
NTPClient timeClient(ntpUDP, ntpServerName, utcOffsetInSeconds);
void setup() {
Serial.begin(115200);
// Initialize the TM1637 display
display.setBrightness(0x0a); // Set the brightness (0x00 to 0x0f)
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(250);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
// Initialize the time client
timeClient.begin();
timeClient.setTimeOffset(utcOffsetInSeconds);
}
void loop() {
// Update the time from the NTP server
timeClient.update();
// Get the current time
uint8_t hours = timeClient.getHours();
uint8_t minutes = timeClient.getMinutes();
if (hours >= 7 && hours < 18) {
display.setBrightness(0x0f); // Set the brightness to high
} else {
display.setBrightness(0x07); // Set the brightness to medium
}
// Display the time on the TM1637 display
display.showNumberDecEx(hours * 100 + minutes, 0b11100000, true); //Flash every 2 seconds
uint8_t seconds = timeClient.getSeconds();
Serial.println((String)hours + ":" + minutes + ":" + seconds);
delay(1000); // Update the display every second
}