Hallo,
Ich möchte eine Stoppuhr programmieren.
Diese soll durch einen Taster zum starten und stoppen gebracht werden.
Alles klappt soweit nur das ich den Taster gedrückt halten muss damit die Uhr läuft und wenn ich den Taster wieder loslasse stoppt die Uhr.
Allerdings soll bei einem Drücken die Uhr loslaufen und beim 2. mal Drücken wieder stoppen....
(Das ganze wird in Millisekunden angegeben)
Danke schonmal im vorraus!!!
byte einer = 0;
byte zehner = 0;
byte hunderter = 0;
// unsigned long start;
unsigned long previousMicros = 0;
unsigned long currentMicros;
int Seg7[] //Array für 7-Seg Anzeige
{
0b00111111, //0
0b00000110, //1
0b01011011, //2
0b01001111, //3
0b01100110, //4
0b01101101, //5
0b01111101, //6
0b00000111, //7
0b01111111, //8
0b01101111 //9
};
void setup()
{
for(i=0; i<12; i++) //Millisekunden werden an Pin 0-11 über 7-Seg Anzeige ausgegeben
{
pinMode(i, OUTPUT);
digitalWrite(i, OUTPUT);
}
for(i=12; i<13; i++) //Stoptaster wird an Pin 12 eingelesen
{
digitalWrite (i, INPUT_PULLUP);
}
digitalWrite(9, INPUT); //7-Seg Anzeige Ground wird als Eingang geschaltet
digitalWrite(10, INPUT);
digitalWrite(11, INPUT);
}
void loop()
{
loslaufen();
reset();
speichern();
anzeigen();
pausieren();
}
void loslaufen()
{
if (digitalRead (12) == LOW)
{
currentMicros = micros();
if(currentMicros - previousMicros >=999) //Wartet bis Micros bei 1000 (bzw. 999) ist
{
previousMicros = currentMicros;
einer++; //Wenn Micros 1000 erreicht hat wird 1 hochgezählt
}
if (einer > 9) //Wenn einer Stelle bei 9 ist, wird zehner 1 hochgezählt -> einer reset
{
einer = 0;
zehner++;
}
if(zehner > 9) //Wenn zehner Stelle bei 9 ist, wird hunderter 1 hochgezählt -> zehner reset
{
zehner = 0;
hunderter++;
}
if(hunderter > 9) //Wenn hunderter Stelle bei 9 ist, wird hunderter resetet -> alles 0
{
hunderter = 0;
}
anzeigen(); //Springt ins Unterprogramm für die Ausgabe an den 7-Seg Anzeigen
}
}
void reset()
{
}
void speichern()
{
}
void anzeigen()
{
digitalWrite(9,0); //Pin 9 aus
PORTD = Seg7[einer]; //Setzt "einer Counter" an Pin 9
digitalWrite(9,1); //Pin 9 an
PORTD = 0b00000000; //Vergleicht Binär "einer Counter" mit 0b00000000 und fängt an zu multiplexen
digitalWrite(10,0);
PORTD = Seg7[zehner];
digitalWrite(10,1);
PORTD = 0b00000000;
digitalWrite(11,0);
PORTD = Seg7[hunderter];
digitalWrite(11,1);
PORTD = 0b00000000;
}
void pausieren()
{
}