2x taster drucken dann led an

#2143967
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.
OP #2143985
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...
Gast #2144031
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.
OP #2144065
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?
#2144101
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.