Was willst du genau?
Ich nehme mal an du willst dass, wenn die Taste gedrückt ist die LED an ist, und wenn die Taste nicht gedrückt ist, die LED aus ist.
Wenn du dir deinen Code an schaust, siehst du sofort, dass das nicht geht.
Du fragst deinen Taster nur einmal vor der Endlosschleife ab, also kann der Zustand von der LED sich auch nicht ändern.
Falsch!
VALUE = VALUE_TASTER;
while (1)
{
//LED schalten
} //
Richtig!
while (1)
{
VALUE = VALUE_TASTER;
//LED schalten
} //
Code:
//*******************************************
// READ FROM AP03 WRITE TO AP04
//*******************************************
#include <avr/io.h>
#define LED 4
#define TASTER 3
#define LED_ON PORTA |= (1 << LED )
#define LED_OFF PORTA &= ~( 1<< LED )
#define VALUE_TASTER bit_is_set (PINA, TASTER)
uint8_t VALUE;
// Initialisierung
void init (void)
{
DDRA |= (1 << LED); // PIN5 von DDRA als ausgang
DDRA &= ~( 1<< TASTER); // PIN4 von DDRA als eingang
PORTA |= (1 << TASTER); // Interne Pullup einschalten
}
int main (void)
{
init();
while (1)
{
VALUE = VALUE_TASTER;
if ( VALUE_TASTER)
LED_ON;
else
LED_OFF;
}
return 0;
}
Hier noch der Code wenn du die Taste druckst geht die LED an, beim nochmaligen drücken wieder aus.
Code:
//*******************************************
// READ FROM AP03 WRITE TO AP04
//*******************************************
#include <avr/io.h>
#define LED 4
#define TASTER 3
#define LED_ON PORTA |= (1 << LED )
#define LED_OFF PORTA &= ~( 1<< LED )
#define VALUE_TASTER bit_is_set (PINA, TASTER)
uint8_t VALUE;
// Initialisierung
void init (void)
{
DDRA |= (1 << LED); // PIN5 von DDRA als ausgang
DDRA &= ~( 1<< TASTER); // PIN4 von DDRA als eingang
PORTA |= (1 << TASTER); // Interne Pullup einschalten
}
int main (void)
{
init();
while (1)
{
if (VALUE_TASTER)
{
if ( !(PINA & (1<<PINA4)) )
LED_ON;
else
LED_OFF;
}
}
return 0;
}
mfg
Guy
Lesezeichen