Versteh nicht woran das liegen kann.
Ich sag mal, das Problem ist eher logischer Natur 
Schau Dir den Programmablauf in Ruhe an...
Du Testest, ob ein Pin HIGH ist, wenn ja schaltest Du eine LED sofort an, dann gehst Du in die "1Sekunde vernichten" Schleife rein, in der der µC jetzt gefangen ist, dann fragst Du wieder den Pin ab, wenn HIGH wieder 1 Sekunde nichts tun, egal ob die LEDs schon an ist, oder nicht
Wenn Du jetzt ungünstig Deinen Taster loslässt, also wenn i sag
ich mal 2 ist, wie lange dauert es, bis die nächste Pin Prüfung gemacht wird?
Besser wäre hier auf Flankenwechsel zu reagieren, also in die Zeilen mit LED an und delay nur dann springen wenn der Pegel am PD0 von LOW auf HIGH wechselt.
Mögliche Lösung sieht dann so aus:
Code:
uint8_t flanke = 0;
...
...
if (PIND & (1<<PD0)) {
if (!flanke){
flanke = 1;
PORTA |= (1<<PA1);
for (i=1; i<=100; i=i+1)
{
_delay_ms(10);
}
PORTA |= (1<<PA0);
}
}
else{
flanke = 0;
PORTA &= ~(1<<PA0);
PORTA &= ~(1<<PA1);
}
Naja, ein Durchlauf ist jetzt aber nötig, Du mußt also die Taste solange drücken, bis PA0 HIGH wird, dafür gehen die LEDs sofort aus...
Logisch?
Gruß Sebastian
Lesezeichen