Hallo!
Also folgendes, ich habe gerade einen Taster an meinen AtMega32 angeschlossen und wollte damit bisschen die herumexperimentieren. In weiterer Folge soll daraus (total unkreativ) ein Anstoßsensor für meinen Roboter realisiert werden.
So, ich habe den Taster an PB0 angeschlossen und möchte jetzt einfach bei Tastendruck eine LED ausgehen lassen, diese dann eine Sekunde ausgeschaltet lassen und danach wieder einschalten. Das war das Ziel.
Hier dazu mein Code:
Code:
#include <avr/io.h>
#include <util/delay.h>
#define LEDRED PD6
#define Bumper1 PB0
#ifndef F_CPU
#define F_CPU 8000000
#endif
int main(void)
{
//DDRB |= (0<<Bumper1);
DDRD |= (1<<LEDRED) | (1<<PD7);
//PORTB |= (0<<Bumper1);
PORTD |= (1<<LEDRED);
while(1)
{
if(PINB & (1<<PINB0)) //wenn Taster gedrückt
{
PORTD &= ~(1<<LEDRED);
_delay_ms(1000); //warte 1 sek
}
else
{
PORTD |= (1<<LEDRED);
}
}
}
Die LED geht auch brav an und wieder aus, sowie geplant, allerdings eben nur so lange, wie der Taster gedrückt ist.
In der Theorie sollte das Programm doch eingentlich an dieser Stelle
Code:
if(PINB & (1<<PINB0)) //wenn Taster gedrückt
{
PORTD &= ~(1<<LEDRED);
_delay_ms(1000); //warte 1 sek
}
für 1 Sek verharren und damit die LED ausgeschaltet lassen, bevor dann der Zyklus fortgesetzt wird, oder?
Warum bleibt die LED nicht an?
LG
Lesezeichen