if (PIND & T1)
{
PORTD |= LED1;
}
if ((PIND & T1) && (PORTD & LED1))
{
PORTD &=~ LED1;
}
wie wäre es damit ?
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
muss man ?Zitat von coCo
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
es geht leider immer noch nicht!
if (PIND & T1)
{
PORTD |= LED1;
}
if ((PIND & T1) && (PORTD & LED1))
{
PORTD &=~ LED1;
}
kannst du mir vielleicht ein Beispiel posten?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.
was geht nicht ?Zitat von RIFMAN
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
@jar:
Entprellt wird hier nichts... und die Shifts sind doppelt gemoppelt![]()
Disclaimer: none. Sue me.
1, na jaZitat von SprinterSB
2 ???
sind ja auch 2 LED und 2 Tasten![]()
(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...
Disclaimer: none. Sue me.
dann wäre die define wohl besser, mag ich eh lieberZitat von SprinterSB
![]()
und dann klappts auch mit dem shiften
#define T1 PD2
#define T2 PD3
#define LED1 PD5
#define LED2 PD6
Lesezeichen