hallo leute, ich möchte gerne mit einem taster (2 mal drucken dann led an) eine led zum leuchten brine... ist das was für anfänger? wie prog. man das? habe einen atmega 8 und prog. mit C soviel ich herausgefunden habe verwändet man den PD6 (T1) für das... lg
D. Kirschner schrieb: > ist das was für anfänger na klar!* D. Kirschner schrieb: > soviel ich herausgefunden habe verwändet man den PD6 (T1) für das den Taster wie auch deine LED kannst du an einen beliebigen IO-Pin deines Controllers hängen. Zählen kann man auch in Software :) 1. Mach dich mal damit vertraut, wie man einen Taster abfragt, zu Beginn erstmal ohne Entprellung(das ist eine Wissenschaft für sich). 2. Dann mach dich damit vertraut, wie man eine LED anschließt und wie man die zum Leuchten bringt. (1. und 2. beinhalten ein bisschen Bit-Schubserei, woran man sich gewöhnen sollte oder es lieben lernen sollte.) 3. Einen Zählerstand hochzählen lassen(wir steigen in einfache Arithmetik ein) 4. Eine if()-Abrage nebst passender Syntax um das LED-Anschalten herum bauen. mfg mf *Auch "Profis" scheitern manchmal an sowas, nur auf einer anderen Ebene.
1 | main() |
2 | {
|
3 | DDRB = 0xFF; |
4 | PORB = 0x00; |
5 | |
6 | DDRD = 0x00; |
7 | PORTD = 0x02; |
8 | |
9 | do { |
10 | if (!(PIND&0x02)) |
11 | PORTB = 0xFF; |
12 | else
|
13 | PORTB = 0x00; |
14 | } while (1); |
15 | }
|
soweit bin ich schon gekommen...habs auch auf den atmel raufgeschmissen und es funk. ganz gut (ist halt ohne entprellen) komme nur mit den zwei mal zählen nicht klar...
1 | #include <util/delay.h> |
2 | |
3 | main() |
4 | {
|
5 | DDRB = 0xFF; |
6 | PORB = 0x00; |
7 | |
8 | DDRD = 0x00; |
9 | PORTD = 0x02; |
10 | |
11 | int i=0; |
12 | |
13 | do { |
14 | if (!(PIND&0x02)) |
15 | {
|
16 | i++; |
17 | _delay_ms(500); |
18 | }
|
19 | if (i==2) |
20 | {
|
21 | PORTB = 0xFF; |
22 | _delay_ms(2000); |
23 | PORTB = 0x00; |
24 | i=0; |
25 | }
|
26 | } while (1); |
27 | }
|
Eine einfachste Erweiterung des Programms um eine Zählvariable und um eine Entprellung der allereinfachsten Art. Nach zwei Tastendrücken (oder einem, der länger als eine halbe Sekunde andauert) geht die LED an, dann leuchtet sie 2 Sekunden und geht wieder aus.
danke =) kann man es erweitern? also wenn ich 2x den taster druck leuchtet die led 2sek und wenn ich 3x druck 3sek
1 | if (i==2) |
2 | {
|
3 | PORTB = 0xFF; |
4 | _delay_ms(2000); |
5 | PORTB = 0x00; |
6 | i=0; |
7 | }
|
8 | |
9 | if (i==3) |
10 | {
|
11 | PORTB = 0xFF; |
12 | _delay_ms(3000); |
13 | PORTB = 0x00; |
14 | i=0; |
15 | }
|
kann man das so machten?
i ist zuerst mal 2, dann wird in den if block gesprungen und i auf 0 gesetzt. i gleich 3 wird nie erreicht. mfg mf
also:
1 | int i=0; |
2 | int k=0; |
3 | |
4 | do
|
5 | {
|
6 | if (i==2) |
7 | {
|
8 | PORTB = 0xFF; |
9 | _delay_ms(2000); |
10 | PORTB = 0x00; |
11 | i=0; |
12 | }
|
13 | |
14 | if (k==3) |
15 | {
|
16 | PORTB = 0xFF; |
17 | _delay_ms(3000); |
18 | PORTB = 0x00; |
19 | k=0; |
20 | }
|
21 | }
|
So einfach geht das nicht. Wenn du die Taste 3x drücken willst, springt der Controller nach 2x Drücken in die entsprechende if-Anweisung. Verharrt dort 2 Sekunden (delay). Danach kannst du dann ein drittes mal drücken, was aber auch schon wieder das erste mal für 2x Drücken ist. mfg.
stimmt... ok, dann lass ich es daweil lieber bis ich mich besser mit dem prog. auskenne... aber trotzdem danke glg
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.