Forum: Mikrocontroller und Digitale Elektronik 2x taster drucken dann led an


von D. K. (kirsche)


Lesenswert?

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

von Achim M. (minifloat)


Lesenswert?

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.

von D. K. (kirsche)


Lesenswert?

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...

von Tobias (Gast)


Lesenswert?

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.

von D. K. (kirsche)


Lesenswert?

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?

von Achim M. (minifloat)


Lesenswert?

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

von D. K. (kirsche)


Lesenswert?

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
    }

von Thomas E. (thomase)


Lesenswert?

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.

von D. K. (kirsche)


Lesenswert?

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
Noch kein Account? Hier anmelden.