Guten Abend miteinander,
Ich habe ein kleines Problem mit meinem Eieruhrprogramm. Ich wähle mit einem Taster meine Zeit aus (1-10min) und starte dann mit einem zweiten Knopf. Mit diesem zweiten Knopf möchte ich den begonnenen Countdown wieder stoppen, jedoch habe ich keine Ahnung wie ich das machen soll Ich werd aus dem Internet einfach nicht schlau, jedes mal wenn ich auf einer Webseite lande findet sich dort einfach nicht die Lösung für mein Problem.
Hier mein Code, vielleicht findet ja jemand eine Möglichkeit, bzw. meinen Fehler. Ich versuche hier mein "void Countdown" Programm mithilfe einer Variablen (f) zu unterbrechen. Ich habe mir eigentlich vorgestellt, dass sobald f=2 ist, der Countdown stoppt. (While (f == 1))
#include <Wire.h>
#include "Adafruit_LEDBackpack.h"
#include "Adafruit_GFX.h"
Adafruit_7segment matrix = Adafruit_7segment();
int x = 0;
int y = 0;
int f = 0;
void Countdown (int y) {
while (f == 1) {
if (y == 42) {
matrix.print(0000, HEX);
matrix.drawColon(true);
matrix.writeDisplay();
}
if (y == 1) {
matrix.print( 100, DEC);
matrix.drawColon(true);
matrix.blinkRate(0);
matrix.writeDisplay();
delay (1000);
uint16_t blinkcounter = 0;
boolean drawDots = false;
for (uint16_t counter = 59; counter > 0; counter --) {
matrix.writeDigitNum(0, (counter / 1000), drawDots);
matrix.writeDigitNum(1, (counter / 100) % 10, drawDots);
matrix.drawColon(true);
matrix.writeDigitNum(3, (counter / 10) % 10, drawDots);
matrix.writeDigitNum(4, counter % 10, drawDots);
matrix.writeDisplay();
delay(1000); }
}
if (y == 2) {
matrix.print( 200, DEC);
matrix.drawColon(true);
matrix.blinkRate(0);
matrix.writeDisplay();
delay (1000);
uint16_t blinkcounter = 0;
boolean drawDots = false;
for (uint16_t counter = 159; counter > 100; counter --) {
matrix.writeDigitNum(0, (counter / 1000), drawDots);
matrix.writeDigitNum(1, (counter / 100) % 10, drawDots);
matrix.drawColon(true);
matrix.writeDigitNum(3, (counter / 10) % 10, drawDots);
matrix.writeDigitNum(4, counter % 10, drawDots);
matrix.writeDisplay();
delay(1000); }
for (uint16_t counter = 59; counter > 0; counter --) {
matrix.writeDigitNum(0, (counter / 1000), drawDots);
matrix.writeDigitNum(1, (counter / 100) % 10, drawDots);
matrix.drawColon(true);
matrix.writeDigitNum(3, (counter / 10) % 10, drawDots);
matrix.writeDigitNum(4, counter % 10, drawDots);
matrix.writeDisplay();
delay(1000); }
}
//USW.
void ShowTime (int x) { //subroutine to show the mins before start
if (x == 1) { //1 min
matrix.print( 100, DEC);
matrix.drawColon(true);
matrix.blinkRate(2);
matrix.writeDisplay();
y = 1;
}
if (x == 2) { //2 min
matrix.print( 200, DEC);
matrix.drawColon(true);
matrix.blinkRate(2);
matrix.writeDisplay();
y = 2;
}
if (x == 3) { //3 min
matrix.print( 300, DEC);
matrix.drawColon(true);
matrix.blinkRate(2);
matrix.writeDisplay();
y = 3;
}
if (x == 4) { //4 min
matrix.print( 400, DEC);
matrix.drawColon(true);
matrix.blinkRate(2);
matrix.writeDisplay();
y = 4;
}
if (x == 5) { //5 min
matrix.print( 500, DEC);
matrix.drawColon(true);
matrix.blinkRate(2);
matrix.writeDisplay();
y = 5;
}
//USW. (bis 10)
void setup() {
#ifndef __AVR_ATtiny85__ //backpack address
Serial.begin(9600);
#endif
matrix.begin(0x70); // 0x70 = l2c address of the 7-segment display
pinMode (10, INPUT); //set-time button
matrix.print(1000, DEC);
matrix.drawColon(true);
matrix.writeDisplay();
}
void loop() {
if (digitalRead (10)==HIGH) {
x=x+1;
ShowTime(x);
delay(1000);
if (x==11) {
x=0;
}
}
if (f == 0) {
if (digitalRead (9)==HIGH) {
f = 1;
delay(50);
Countdown(y);
}
if (f == 1) {
if (digitalRead (9)==HIGH) {
f = 2;
delay(50);
Countdown(42); //ist einfach nur die anzeige 00:00
delay(1000);
f = 0;
}
}
}
}