TM1637 Digitaluhr mit Zeiteinstellung & Alarm – Arduino Nano Prototyp
Komponenten und Zubehör
| Arduino Nano R3 | 1 |
| TM1637 4-stelliges Display | 1 |
| DS1302 RTC-Modul | 1 |
| SparkFun LilyPad LED Blau (5 Stk.) | 1 |
| Summer | 1 |
Über dieses Projekt
Dies ist ein Prototyp des Zeit- und Alarm-Einstellmechanismus, den ich in meinen nächsten Digitaluhr-Projekten verwenden möchte. Ich hoffe, Sie finden ihn nützlich. Verbesserungsvorschläge sind herzlich willkommen – ich schaue sie mir gerne an und baue sie eventuell in meinen Code ein.
Das vollständige Tutorial sehen Sie auf [YouTube-Kanal].
Wenn Sie diese Inhalte mögen und mich bei der Erstellung ähnlicher Videos unterstützen möchten, besuchen Sie meine Patreon-Seite:
Code
Zeitanzeige vom RTC-Modul plus Zeit- und Alarm-Einstellfunktion (Arduino)
Dieser Code liest die aktuelle Zeit vom RTC-Modul. Er erlaubt auch, die aktuelle Zeit zu aktualisieren und die Alarmzeit einzustellen. Die Einstellungen erfolgen über 3 Taster.
// Mario's Ideas
// TM1637 Digital Clock with Setup and Alarm Functionality
#include <Arduino.h>
#include <TM1637Display.h>
#include <virtuabotixRTC.h>
// RTC Modul Deklaration
// PINS CLK, DAT, RST
virtuabotixRTC myRTC(A1, A2, A3);
// Variablen für vorherige RTC-Werte
int minutes;
int hours;
// Alarm-Zeit
int Alarm_minutes = 05;
int Alarm_hours = 18;
uint8_t Blank[] = {0x0};
int POSITION = 0;
int digits[3];
int interval = 0;
#define Alarm 9
#define Buzer 13
#define Led 8
boolean Alarm_set = false;
boolean Alarm_in_progress = false;
boolean Setup_on = false;
// 4-stelliges Display Pins
#define CLK 4
#define DIO 5
TM1637Display clock(CLK, DIO);
void setup() {
attachInterrupt(digitalPinToInterrupt(2), Press_A_Button, RISING);
attachInterrupt(digitalPinToInterrupt(3), Press_B_Button, RISING);
pinMode(Alarm, INPUT);
pinMode(Buzer, OUTPUT);
pinMode(Led, OUTPUT);
digitalWrite(Buzer, LOW);
clock.setBrightness(0x0f);
Serial.begin(9600);
}
void Press_A_Button() {
if (interval > 3) {
if (Setup_on == false) {
Setup_on = true;
if (Alarm_set == true) {
digits[0] = (int)Alarm_hours / 10;
digits[1] = Alarm_hours - ((int)Alarm_hours / 10) * 10;
digits[2] = (int)Alarm_minutes / 10;
digits[3] = Alarm_minutes - ((int)Alarm_minutes / 10) * 10;
} else {
digits[0] = (int)myRTC.hours / 10;
digits[1] = myRTC.hours - ((int)myRTC.hours / 10) * 10;
digits[2] = (int)myRTC.minutes / 10;
digits[3] = myRTC.minutes - ((int)myRTC.minutes / 10) * 10;
}
} else {
POSITION++;
if (POSITION == 4) {
if (Alarm_set == true) {
Alarm_minutes = digits[3] + digits[2] * 10;
Alarm_hours = digits[1] + digits[0] * 10;
} else {
myRTC.setDS1302Time(0, digits[3] + digits[2] * 10, digits[1] + digits[0] * 10,
myRTC.dayofweek, myRTC.dayofmonth, myRTC.month, myRTC.year);
clock.showNumberDec(digits[0], false, 1, 0);
clock.showNumberDec(digits[1], false, 1, 1);
clock.showNumberDec(digits[2], false, 1, 2);
clock.showNumberDec(digits[3], false, 1, 3);
}
POSITION = 0;
Setup_on = false;
}
}
}
interval = 0;
}
void Press_B_Button() {
if (interval > 3) {
if (Setup_on) {
digits[POSITION] = digits[POSITION] + 1;
if (POSITION == 0 && digits[POSITION] == 3) digits[POSITION] = 0;
if (POSITION != 0 && digits[POSITION] == 10) digits[POSITION] = 0;
interval = 0;
}
}
interval = 0;
}
void loop() {
if (digitalRead(Alarm) == HIGH && Alarm_set == false) {
if (interval > 30) {
digitalWrite(Led, HIGH);
Alarm_set = true;
delay(300);
}
} else {
if (digitalRead(Alarm) == HIGH && Alarm_set == true) {
if (interval > 30) {
Alarm_set = false;
Alarm_in_progress = false;
digitalWrite(Led, LOW);
delay(300);
}
}
}
myRTC.updateTime();
if (Setup_on == true) {
clock.showNumberDec(digits[0], false, 1, 0);
clock.showNumberDec(digits[1], false, 1, 1);
clock.showNumberDec(digits[2], false, 1, 2);
clock.showNumberDec(digits[3], false, 1, 3);
delay(200);
clock.setSegments(Blank, 1, POSITION);
delay(200);
clock.showNumberDec(digits[0], false, 1, 0);
clock.showNumberDec(digits[1], false, 1, 1);
clock.showNumberDec(digits[2], false, 1, 2);
clock.showNumberDec(digits[3], false, 1, 3);
} else {
if (myRTC.minutes == Alarm_minutes && myRTC.hours == Alarm_hours && Alarm_set == true && Setup_on == false) {
Alarm_in_progress = true;
}
if (Alarm_in_progress) {
digitalWrite(Buzer, HIGH);
delay(1000);
digitalWrite(Buzer, LOW);
delay(1000);
}
if (myRTC.minutes != minutes) {
clock.showNumberDecEx((int)myRTC.hours / 10 * 1000 + (myRTC.hours - ((int)myRTC.hours / 10) * 10) * 100 +
(int)myRTC.minutes / 10 * 10 + myRTC.minutes - ((int)myRTC.minutes / 10) * 10,
(0x80 >> 1), true);
minutes = myRTC.minutes;
hours = myRTC.hours;
}
}
if (interval < 200) interval++;
}
Schaltplan
Herstellungsprozess
- Analoge vs. digitale Sensoren: Typen, Anwendungen und Praxisbeispiele
- Headless Raspberry Pi 2 Wasser-Alarm mit Adafruit T‑Cobbler Plus bauen
- Roboter mit Raspberry Pi und Python bauen: Komplette Anleitung
- Fiix & IDC: Wie digitale Transformation die Fertigungszuverlässigkeit steigert
- Große Stillstände verhindern: Wie akustische Emissionsüberwachung einem Lebensmittelhersteller Zeit und Geld sparte
- 8 bewährte Wege, Wartungskosten zu senken und Umsatz mit digitaler Wartungssoftware zu steigern
- Thermofühler (Thermocouple) mit Arduino Portenta H7 über MAX6675 IC integrieren
- Digital Transformation beschleunigen: Cisco & IBMs Edge-to-Cloud IoT-Plattform
- Zuverlässigen Wecker mit DS1302 RTC und Arduino UNO bauen
- Lagerfunktionalität & Innovation in moderner Maschinenbau verstehen