Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: Zeitschleife Kategorie: Programmierung Basic (von Achim - 11.04.2009 19:01)
 Als Antwort auf Zeitschleife von Manfred - 10.04.2009 14:36
Achim nutzt:  CC1-Station V1.1
> Ich möchte folgendes erreichen:  
> 1.wenn der Taster gedrückt und wieder losgelassen wird soll das Rollo ganz nach unten/oben fahren.
> 2. wenn der Taster länger gedrückt wird (mehr als 3 sec sollen alle Rollos im haus fahren ( es ist Nacht).
> 3. wenn der Taster 2 x hintereinader gedrückt wird dann stop dieses Rollo an der aktuellen Position.
>
> so und hier ist mein problem
>
> ich schreibs mal so:
> wenn das inputbyte befüllt ist < 255 dann zeitstempel und prozess1 füllen
> wenn das inputbyte befüllt ist < 255 und prozess >0 ist und  der beginn des Tastendrucks länger als 3 sec her dann soll die outputaktion alles zu / alles auf gestartet werden.
>
> wenn das inputbyte befüllt ist <255 und prozess >0 ist und innerhalb der 3 sec das zweite Mal das Inputbyte befüllt wurde dann stop der Outputaktion

> PS ich muss das ganze so schreiben damit ich nacheinander 5 Inputkarten (Adressen) abfrage

Und jede der Karten hat mehrere Taster? (Die 5. Karte hat 8?) Können verschiedene Taster gleichzeitig gedrückt werden und soll das Programm dann für jeden Taster obigen Algorithmus auswerten?

Ich kenne das 1.1-Basic und den Wertebereich von den Variablen dort nicht, aber Du bräuchtest dann ggf. für jeden Taster eine Variable die den Timestamp hält. Man kann das natürlich auf viele verschiedene Arten machen. Nehmen wir mal an, Du speicherst das so, dass Du auch drei Wochen nach einem Tastendruck feststellen kannst, dass das vor drei Wochen und 2 Sekunden war, und nicht vor 2 Sekunden. Ansonsten musst Du natürlich entsprechend die Timestamps vor dem Überlauf auch wieder zurücksetzen, oder Du setzt nicht den Timestamp, sondern zählst die Sekunden seit Tastendruck.

In der Annahme, dass Deine Routine mit dem inputbyte oben einen gehalteten Taster ständig meldet, musst Dir natürlich auch den letzten Zustand jedes Tasters merken und ob Du den Tastendruck > 3 Sekunden bereits erkannt hast.

Dann könnte das für einen Taster skizziert so aussehen:

gedrueckt_alt = off  ' Initial Taster los gelassen
timestamp_gedrueckt = 0
dauerdruck = off

#loop

  gedrueckt = inputbyte < 255 'momentan gedrueckt?

  if not gedrueckt_alt and gedrueckt then gosub gedrueckt ' Taste wurde soeben gedrückt

  if gedrueckt_alt and not gedrueckt then gosub losgelassen ' Taste wurde soeben losgelassen

  gedrueckt_alt = gedrueckt ' neuen Zustand merken

  if gedrueckt and (now - timestamp_gedrueckt > 3) and not dauerdruck then gosub dauer ' laenger als 3 Sek gedr.

goto loop

#gedrueckt
  if (now - timestamp_gedrueckt <= 3) then gosub stop ' zweimal in 3 Sek gedr.
  timestamp_gedrueckt = now ' geeignet ermitteln und merken
return

#losgelassen
  if (now - timestamp_gedrueckt <= 3) then gosub rollo_rauf_runter ' weniger als 3 Sek gedr.
  dauerdruck = off  ' bereit fuer nächsten Dauerdruck
return

#dauer
  dauerdruck = on  ' nur einmal losrattern
  gosub alles_rauf_runter
return

HTH

Bye
 Achim

 Antwort schreiben

Bisherige Antworten: