Hallo Liebe Community,
ich bin gerade dabei eine Uhr zu programmieren. Dabei bin ich leider auf ein Problem gestoßen und zwar:
In meinem loop habe ich den Aufruf zu meiner set-Methode in der ich die Zeit einstellen kann.
Leider funktioniert das nicht so wie ich es mir vorgestellt habe. Eigentlich wollte ich, dass das Programm sozusagen in die set-Funktion reingeht und dort so lange "gefangen" ist bis ich den set-Knopf so lange gedrückt habe dass die Schleifenbedingung nicht mehr erfüllt ist. Das Problem ist, dass das Programm 1.die tmpSet variable nicht inkrementiert und 2. garnicht in die Funktion reingeht, damit ich etwas verändern kann.
Dazu muss ich noch sagen, dass das folgende Programm unvollständig ist und ich euch bitte mir nur das Problem mit meiner Set Methode erläutern zu können.
#include <TimerOne.h>
///////Variablendeklaration////////
//Uhrzeitsangabe
struct uhr{
volatile int sekunde=50;
int minute=59;
int stunde=23;
}Uhrzeit1;
//Einstellungsknöpfe
int setButton=7;
int setButtonStatus;
int tmpSet=0;
int downButton;
int downButtonStatus;
int tmpDown=0;
int upButton;
int upButtonStatus;
int tempUp=0;
///////////Funktionen//////////
//Funktionsliste
void zaehler(void);
void uhrzeit(void);
void set(void);
void zaehler(){
Uhrzeit1.sekunde++;
}
void uhrzeit(){
if(!(Uhrzeit1.sekunde<60)){
Uhrzeit1.minute++;
Uhrzeit1.sekunde=0;
if(!(Uhrzeit1.minute<60)){
Uhrzeit1.stunde++;
Uhrzeit1.minute=0;
if(Uhrzeit1.stunde>23){
Uhrzeit1.sekunde=0;
Uhrzeit1.minute=0;
Uhrzeit1.stunde=0;
}
}
}
}
void set(){
while(tmpSet>0){
if(tmpSet==1){
if(downButtonStatus==1){
delay(20);
Uhrzeit1.minute--;
}
else if(upButtonStatus==1){
delay(20);
Uhrzeit1.minute++;
}
else if(setButtonStatus==1){
delay(20);
tmpSet++;
}
}
else if(tmpSet==2){
if(downButtonStatus==1){
delay(20);
Uhrzeit1.stunde--;
}
else if(upButtonStatus==1){
delay(20);
Uhrzeit1.stunde++;
}
else if(setButtonStatus==1){
delay(20);
tmpSet=0;
}
}
}
}
void ausgabe(){
Serial.print(Uhrzeit1.stunde);
Serial.print(" : ");
Serial.print(Uhrzeit1.minute);
Serial.print(" : ");
Serial.println(Uhrzeit1.sekunde);
}
void setup() {
Serial.begin(9600);
Timer1.initialize(1000000);
Timer1.attachInterrupt(zaehler);
pinMode(setButton, INPUT);
}
void loop() {
setButtonStatus=digitalRead(setButton);
uhrzeit();
if(setButtonStatus==HIGH){
delay(100);
tmpSet++;
Timer1.stop();
set();
Timer1.resume();
}
ausgabe();
}
Schon einmal vielen Dank ich freue mich wenn ihr mir helfen könnt