Hi,
ich hab mit einem AVR einen Timer aufgebaut, um die Zeit einstellen zu
können habe ich 2 Taster um nicht ewig warten zu müssen soll der Eimer
nach 10 Einzelschritten in 10 Schritten hoch bzw. runter zählen und wenn
man ihn los lässt wieder mit Einzelschritten beginnen.
Mein versuch :
SIGNAL (SIG_OVERFLOW2)
{
cli(); // Interrupts nicht zulassen
if (pin_keys & (1 << btn_up)) // Up-Taste gedrückt
key_up++;
else
{
key_up = 0;
}
if (pin_keys & (1 << btn_down)) // Down-Taste gedrückt
key_down++;
else
{
key_down = 0;
}
if (pin_keys & (1 << btn_start)) // Start-Taste gedrückt
key_start++;
sei(); // Interrupts zulassen
}
und in der main dann :
while (1)
{
if (key_up >= 100)
{
display_value += 10;
key_up = 90;
}
else if (key_up >= 10) // Up-Taste gedrückt
{
display_value++; // Wert +1
if (display_value > 999) // Wenn Überlauf => Wert=0
display_value = display_value - 999;
key_up = 0;
}
if (key_down >=100)
{
display_value -= 10;
key_down = 90;
}
else if (key_down >= 10) // Down-Taste gedrückt
{
display_value--; // Wert -1
if (display_value <= 1) // Wenn Unterlauf => Wert=999
display_value = 999 + display_value;
key_down =0;
}
leider zählt er so nur rasant in 10er Schritten.
Hat jemand ne Idee woran es liegt? Ich steh grad etwas auf dem Schlauch.
Oder zufällig ne Lösung parat? Bin über jeden anstoß froh.
Gruß SkySurfer