-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: Taster mit Zeitschleife

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    07.01.2010
    Ort
    Deutschland
    Beiträge
    735

    Taster mit Zeitschleife

    Anzeige

    Hallo Forum,
    Ich wollte mal fragen ob ihr wisst, wie Ich folgendes programmieren kann?
    Ich möchte einen Taster nehmen und wenn man ihn 1sek gedrückt hat soll er die Aktion erst starten.Wenn er länger oder kürzer gedrückt worden ist, soll nichts passieren.
    Wie programmiere ich das????
    Wenn es geht hätte ich gerne einen Beispielcode gesehen.
    Entweder in Basic oder C

    Ich sag schon mal Danke!

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    46
    Beiträge
    765
    Ich nutze oft einen Timer, welcher mir die TickCount API nachmacht.
    Einfach den Wert des TickCounts merken, wenn der Timer gedrückt wurde und wenn er losgelassen wurde, die Zeit ausrechnen.

    Du kannst auch die Sekunden "mißbrauchen", falls Du eine Uhr mitlaufen hast. Oder in der Hauptschleife bei gedrücktem Taster eine ms warten und wenn der Taster nach ~ 1000 Durchläufen losgelassen wurde reagieren.

    Beispielcode macht für mich erst Sinn, wenn ich weiß, welche der Vorraussetzungen bei Dir (dem Programm) gegeben sind.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    02.04.2010
    Beiträge
    37
    ja so ähnlich mach ichs auch immer

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.07.2006
    Ort
    Karlsruhe/München
    Alter
    27
    Beiträge
    587
    Oder einfach jede 10ms pollen und die Durchgänge Zählen, wie lange er low ist. Bei high abrechen. Am besten mit ISR (interrupt) realisieren.

  5. #5
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.970
    Hallo!

    @ bnitram

    Deine Idee hat nur dann Sinn, wenn die 1 Sek mit genauer Toleranz (z.B. +/- 20 %) festgelegt ist. Es ist praktisch nicht möglich einen Taster genau 1 Sek gedrückt halten ...

    MfG

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    07.01.2010
    Ort
    Deutschland
    Beiträge
    735
    @ PICture
    Das stimmt auch wieder.


    Kennt den jemand einen Beispielcode in Basic oder C ??
    ( falls es euch hilft, ich habe den Pro-Bot128 )

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    07.01.2010
    Ort
    Deutschland
    Beiträge
    735
    Also Ich wollte es irgendwie so machen:

    ....
    If sw2 = 1 for AbsDelay(1000) Then
    FLL_ON()
    End If
    .....

    Aber das geht mal garnich!!!!
    Hat einer ne bessere Idee?????

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.10.2009
    Beiträge
    120
    Erst eine Frage: ist es OK dass wenn die Taste gedrueckt ist, der uC NUR auf Loslassen der Taste wartet (d.h. er kuemmert sich nicht ums Sensoren einlesen, Daten ausgeben etc....)?
    Wenn ja, kannst du etwa wie folgt machen (Syntax in deinem Compiler ist wahrscheinlich anders):

    Code:
    bool Taste1sGedrueckt()
    {
    	// Ich nehme an: "0" = Taste gedrueckt
    
    	uint ms=0;		// 16-bits uint
    	while (Taste==0)	// Taste gedrueckt?
    	{
    		delay_ms(1);
    		ms++;
    	}
    
    	// Hierher kommen wir wenn die Taste losgelassen wird (oder nicht gedrueckt ist)
    	// Nun checken wir die verlaufene Zeit
    	if ((ms>=800) && (ms<=1200))	// 1s +/- 20%
    		return true;
    	else
    		return false;
    }

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    07.01.2010
    Ort
    Deutschland
    Beiträge
    735
    Danke nflatjor555,
    leider programmiere ich in Basic mit einer Libyer!!
    (ich habe sie unten mal gepostet)
    Vielleicht kannst du ja mal nen Basic Code daraus machen???!!
    Angehängte Dateien Angehängte Dateien

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    46
    Beiträge
    765
    Die SYSTEM_CNT() bietet sich an. Wenn sw2 gedrückt ist, darin eine Variable hochzählen.
    Wenn sw2 nicht gedrückt ist, abfragen, ob die Variable zwischen 80 und 120 ist, wenn ja entsprechend reagieren und die Variable auf 0 setzen. Wenn nein nur die Variable auf 0 setzen.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •