Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie kriege ich die LED´s aus?
hallo!
ich habe es endlich hingekrigt 2 LED`s auf Tastendruck zum Leuchten gebracht,jetzt möchte ich sie wieder auf Tastendruck zum Ausschalten bringen! hat jemanden eine Idee, was dazu schreiben soll?
Das Programm lautet:
#include <avr/io.h>
//extern void wait(uint8_t T);
#define T1 0x04
#define T2 0x08
#define LED1 0x20
#define LED2 0x40
int main()
{
DDRD |= 0x60;
while(1)
{
if (PIND & T1)
{
PORTD |= LED1;
}
if (PIND & T2)
{
PORTD |= LED2;
}
else
{
PortD &= 0x00;
}
return 0;
}
if (PIND & T1)
{
PORTD |= LED1;
}
if ((PIND & T1) && (PORTD & LED1))
{
PORTD &=~ LED1;
}
wie wäre es damit ?
Hi,
du musst eine Variable verwenden die getoggelt wird sobald du die Taste drückst. In der While Schleife fragst du dann einfach die Variable ab, ist sie auf 1 -> LED ein, ist sie auf 0 -> LED aus.
MfG
Hi,
du musst eine Variable verwenden die getoggelt wird sobald du die Taste drückst. In der While Schleife fragst du dann einfach die Variable ab, ist sie auf 1 -> LED ein, ist sie auf 0 -> LED aus.
MfG
muss man ?
ich muss nicht, bei mir funzt die LED On Abfrage auch ohne Variable
lcd_gotoxy(19,3);
lcd_puts( (PORTB&(1<<_tog_LED_PB)) ? "T" : " " );
wenn sie also an ist, kann sie ausgeschaltet werden, wenn sie aus ist eingeschaltet
if (PIND & T1)
{
PORTD |= LED1;
}
if ((PIND & T1) && (PORTD & LED1))
{
PORTD &=~ LED1;
}
es geht leider immer noch nicht!
du musst eine Variable verwenden die getoggelt wird sobald du die Taste drückst. In der While Schleife fragst du dann einfach die Variable ab, ist sie auf 1 -> LED ein, ist sie auf 0 -> LED aus.
kannst du mir vielleicht ein Beispiel posten?
es geht leider immer noch nicht!
kannst du mir vielleicht ein Beispiel posten?
was geht nicht ?
schaltest du den Taster nach + oder GND ?
Pullup ist on/off ?
besser wäre Pullup setzen und die Taster nach GND zu schalten
//extern void wait(uint8_t T);
#define T1 0x04
#define T2 0x08
#define LED1 0x20
#define LED2 0x40
int main()
{
DDRD |= (1<<LED1); // LED1 definiert zum Ausgang machen
DDRD |= (1<<LED2); // LED2 definiert zum Ausgang machen
DDRD &=~(1<<T1); // T1 definiert zum Eingang machen
DDRD &=~(1<<T2); // T2 definiert zum Eingang machen
DDRD |= (1<<T1); // T1 Pullup setzen
DDRD |= (1<<T2); // T2 Pullup setzen
while(1)
{
if(PIND & T1==0)
{
while(PIND & T1==0)
;
if(PORTD & LED1)
PORTD &=~ LED1;
else
PORTD |= LED1;
}
if(PIND & T2==0)
{
while(PIND & T2==0)
;
if(PORTD & LED2)
PORTD &=~ LED2;
else
PORTD |= LED2;
}
}
return 0;
}
Achtung LED wechselt erst nach Taster loslassen , Minientprellung
SprinterSB
10.04.2007, 10:56
@jar:
Entprellt wird hier nichts... und die Shifts sind doppelt gemoppelt ;-)
@jar:
Entprellt wird hier nichts... und die Shifts sind doppelt gemoppelt ;-)
1, na ja
2 ???
sind ja auch 2 LED und 2 Tasten :)
SprinterSB
10.04.2007, 11:04
(1 << LED1) ist immer 0. Dito für (1<<LED2), (1<<T1) und (1<<T2)...
Wenn der Taster prellt, wird dennoch mehrfach umgeschaltet. Gleiches, wenn der Taster länger gedrückt resp. losgelassen bleibt (je nachdem, wie er angeschlossen ist).
Zudem blockiert das "Entprellen" eines Tasters die Hauptschleife und damit insbesondere auch den jeweils anderen Taster...
(1 << LED1) ist immer 0. Dito für (1<<LED2), (1<<T1) und (1<<T2)...
dann wäre die define wohl besser, mag ich eh lieber ;)
und dann klappts auch mit dem shiften
#define T1 PD2
#define T2 PD3
#define LED1 PD5
#define LED2 PD6
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.