Erkennung Taster klemmt

Gast #2502811
Hi!
bin grad dabei ein Programm für ein Projekt zuschreiben was auch soweit 
funtioniert.
Über eine AD wandlung lese ich 3 zustände eines Tasters ein! weil ich 
auch einen Kurzschluss erkennen muss!
nun die Frage: wenn ich den Taster drücke soll etwas passieren, aber wie 
erkenne ich jetz wenn der Taster klemmt? sprich das er länger als eine 
sekunde gedrückt ist?
1
void Taster()
2
    {
3
    if (TasterV <= 512 &&TasterV>=105) //wenn Spg. 0,5V bis 2,5V, dann weiter Status_d ändern
4
    {
5
    tasterkurz=0;  
6
    if (Status_d==1)
7
        {  
8
            Status_d=0;
9
          //  eeprom_write_byte(0x20,(unsigned int) Status_d);
10
            _delay_ms(4);
11
            PORTD |= (1<<PORTD7);  //LED am µC an
12

13

14
            _delay_ms(500);
15
  
16
        }
17
        else 
18
        {    
19
            Status_d=1;
20
          //  eeprom_write_byte(0x20,(unsigned int) Status_d);
21
            _delay_ms(4);
22
            PORTD &= ~(1<<PORTD7);   //LED am µC an
23

24

25
            _delay_ms(500);
26
              
27

28
        }
29
    }
30
    else if (TasterV <= 100 )    //wenn Spg. 0bis 0,5V, dann Fehler = 1
31
    {
32
      
33
        tasterkurz = 1;
34
    }
Gast #2502836
>nun die Frage: wenn ich den Taster drücke soll etwas passieren, aber wie
>erkenne ich jetz wenn der Taster klemmt? sprich das er länger als eine
>sekunde gedrückt ist?

Wenn jemand mit dem Fuß auf deiner Hand steht, wie erkennst du
dann wie lange er da drauf steht? Richtig, du zählst einfach mit:
Aua, aua, aua, aua. Das waren 4 Sekunden.
Gast #2502844
haha! das hab ich mir soweit auch gedacht! aber an welche stelle mach 
ich das am besten! zählschleife bis xxx und dann den fehler auslösen! 
arbeite aber komplett ohne interrups
#2502861
Mattes schrieb:
> aber wie erkenne ich jetz wenn der Taster klemmt? sprich das er länger
> als eine sekunde gedrückt ist?
Im einfachsten Fall, indem du nach einer Sekunde nachguckst, ob er immer 
noch gedrückt ist. Das führt natürlich zu Fehlern, wenn der Taster 
gedrückt und losgelassen wurde und nach ca. 1s wieder gedrückt würde. 
Also so eine Art Doppelklick. Das könnte als Dauerdrücken interpretiert 
werden.

Mit den 500-ms-Delays wird das so nichts.

Du guckst dir den Taster alle 10ms an. Und wenn er gedrückt ist, zählst 
du.

Also so ungefähr:

while (1)
{
    if(Checktaster()) nAua++; else nAua = 0;
    //Auswerten
    if (nAua >= 1000) Alarm();
    else
    {
      if (nAua) Lampe(1); else Lampe(0);
    }
    _delay_ms(10);
}

Und dann guckst du dir an, wieviel einfacher das mit einem 
Timer-Interrupt geht.
mfg.
Gast #2502866
ist mir auch schon aufgefallen ist aber für die uni! und wenn die das 
sagen muss das auch ohne gemacht werden! mach jetz einfach eine zählung 
und dann ist gut! wenns zu schnell geht las ich auch bis 1000 zählen! 
wird morgen mal getester!

kennt sich zuällig einer gut mit eeprom write and read aus! und kann mir 
ein passendes beispiel programm zukommen lassen! das im tutorium check 
ich nich so ganz

danke
Gast #2502879
achja.... die 500ms delay kommen da noch wieder raus! und einen 
spielschutz brauch ich eigentlich auch noch!
das mit den interpts hab ich mir schon angeguckt!

lg

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.