mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Unterscheiden ob ein Taster kurz oder lange gedrückt wird


Autor: H. G. (ledi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich möchte mit einem Transceiver Daten von einer Senderplatine auf eine 
Empfängerplatine übertragen und die Daten auf der Empfängerseite 
auswerten.

Mittels Taster auf der Senderseite möchte ich zwei Funktionen steuern.
Tastendruck = kurz (< 1sek.) --> mache dies...
Tastendruck = lang (> 1sek.) --> mache das...

Der derzeitige Code kann diese Unterscheidung zwar treffen, aber das 
Programm wird an der Stelle der delay-Anweisung für die Dauer der 
Zeitverzögerung blockiert.

Hat wer eine Idee, wie ich das Problem am Besten lösen kann?

Hier der C-Code:
#include <avr/io.h>
#include <util/delay.h>

#define button_down  !(PINC & (1<<PINC7))  // Button = Low

int main(void)
{
  DDRB = 0xFF;      // PORTB auf Ausgang
  DDRC = (0<<PINC7);    // PINC7 auf Eingang

  char zustand=0;

  while (1)
  {
    char wert=0;
    if(zustand == 0 && button_down)  
    //Wenn Button = Low
    {
      zustand=1;
      _delay_ms(1000);
      wert=1;
    }
    else if(zustand == 1 && button_down) 
    //Wenn Button noch immer Low
    {
      zustand=2;
      wert=2;
      PORTB |= (1<<PB0);  // Tastendruck lang
    }
    else if(zustand == 1)
    {
        PORTB |= (1<<PB1);  // Tastendruck kurz
    }
  }
}

Autor: G ast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: me (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Timer Interrupt

Die Entprellroutine von Peter Dannegger 
http://www.mikrocontroller.net/articles/Entprellung (ganz unten) 
unterstützt diese Unterscheidung mit get_key_short() und get_key_long()

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.