Moin Moin,
Die Noobs aus der E-Technik hier.
Folgendes Problem, wenn wir bei unserer Switch Case Funktion zu Case 1 kommen, fängt unser Counter perfekt anzuzählen.
Drücken wir erneut den Taster springt er aber nicht zu Case 2 sondern geht komplett aus.
Ersetzetn wir das ausgabe(); durch ein Bitmuster funktioniert die ganze Switch Case funktion ohne probleme
HILFEEEEE!
int i;
int statustaster = 0 ;
byte einer = 0;
byte zehner = 0;
byte hunderter = 0;
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()
{
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;
}
if (digitalRead(12) == LOW)
{
statustaster++;
delay(500);
}
switch (statustaster)
{
case 0:
PORTD = 0b00111111;
break;
case 1:
ausgabe();
//PORTD = 0b00000110;
break;
case 2:
PORTD = 0b01011011;
break;
default :
statustaster = 0;
break;
}
}
void ausgabe()
{
digitalWrite(9,0); //Pin 9 aus
PORTD = Seg7[einer]; //Setzt "einer Counter" an Pin 9
//delay(1);
digitalWrite(9,1); //Pin 9 an
digitalWrite(10,0);
PORTD = Seg7[zehner];
//delay(1);
digitalWrite(10,1);
digitalWrite(11,0);
PORTD = Seg7[hunderter];
// delay(1);
digitalWrite(11,1);
}
Millisekunden_test.ino (2.46 KB)