Difference between revisions of "4-Digital Display"
(→Liens externes) |
(→Caractéristiques) |
||
| Line 4: | Line 4: | ||
Grove compatible interface (3.3V/5V)<br> | Grove compatible interface (3.3V/5V)<br> | ||
| − | connect to D2/D3<br> | + | connect to <b>D2</b>/D3<br> |
| + | |||
4 digit red alpha-numeric display<br> | 4 digit red alpha-numeric display<br> | ||
8 adjustable luminance levels | 8 adjustable luminance levels | ||
Revision as of 17:42, 30 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 02:21 et ensuite il modifié le 1er digit à un intervalle regulier
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
}