Ich bin dabei einen Wecker zu Programmiern.
Dabei habe ich bereits viel ausprobiert, aber mein Code funktioniert irgendwie nicht ganz, und ich weiß nicht warum. Was Ich bis jetzt gemacht habe ist, das die Uhrzeit angezeigt wird. Gerne könnt ihr mir auch weiterhelfen beim Wecker.
Anbei mein Code.
Dazu: Ich möchte keinen RTC verwenden.
Auserdem fehlt dort noch die Zeit für den Wecker, und das ein Ausgang geschaltet werden soll, wenn die zeit erreicht ist. Diese soll über einen Taster eingestellt werden.
#include <TM1637Display.h>
#include <Wire.h>
const int CLK_PIN = 2;
const int DIO_PIN = 3;
const int hourButtonPin = 8;
const int minButtonPin = 9;
TM1637Display display(CLK_PIN, DIO_PIN);
int currentHour = 12;
int currentMinute = 0;
bool hourMode = true;
unsigned long lastUpdateTime = 0;
const unsigned long updateInterval = 1000;
void setup() {
display.setBrightness(7);
pinMode(hourButtonPin, INPUT_PULLUP);
pinMode(minButtonPin, INPUT_PULLUP);
Wire.begin();
}
void loop() {
unsigned long currentTime = millis();
if (digitalRead(hourButtonPin) == LOW)
hour();
if (digitalRead(minButtonPin) == LOW)
miner();
if (currentTime - lastUpdateTime >= updateInterval) {
lastUpdateTime = currentTime;
if (hourMode) {
display.showNumberDecEx(currentHour * 100 + currentMinute, 0b11100000, true);
} else {
display.showNumberDecEx(currentMinute, 0b11100000, true);
}
}
}
void hour() {
if (hourMode) {
currentHour = (currentHour + 1) % 24;
}
while (digitalRead(hourButtonPin) == LOW)
;
}
void miner() {
if (!hourMode) {
currentMinute = (currentMinute + 1) % 60;
}
while (digitalRead(minButtonPin) == LOW)
;
}
um noch dutzend aufeinander greifende Fragen zu ersparen, fasse ich kurz zusammen:
TM1637 Module braucht keine I2C Verbindung. Genau deshalb werden Pins 2 und 3 deklariert, aber I2C Pins sind (bei Uno und Nano) auf den A4/A5.
ansonsten, was ist dein Problem eigentlich?
mein Code funktioniert irgendwie nicht ganz
sagt nichts über deine Erwartungen und was du erhalten hast
Wie funktioniert das? define wir doch vor dem Kompilieren aufgelöst, oder? Das kompilieren passiert vor dem hochladen, richtig? Wie kann man den Zustand eines Pins auslesen, vor dem hochladen?
Bzw. man kann ja auch ohne hochladen kompilieren und auch ohne dem vorhanden sein des Ziels kompilieren. Wie können dann die define aufgelöst werden?
Das kannst du dann z.B. in einer Anweisung wie if (HourBtnPressed) { ... }
verwenden, wo es wie eine undefinierte und nie initialisierte oder aktualisierte Variable aussieht.
Toll !
Hallo,
ich kann mich mit der Variante noch nicht so richtig anfreunden. eine bool Variable "HourBtnPressed" und dann im loop einmal
HourBtnPressed= !digitalRead(hourButtonPin)
bietet zudem den Vorteil das man die Variable dann im code mehrfach abfragen kann ohne das sich inzwischen der Pegel geändert haben kann, was bei einem mehrfachen Einlesen des Einganges ja nicht ausgeschlossen ist.
Heinz