Erkennung Taster klemmt

Gast #2502811
Lesenswert?

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
Lesenswert?

>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.
#2502861
Lesenswert?

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
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren