- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 5 von 5

Thema: Wie bei Knopfdruck Variable um eins hochzählen?

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    04.10.2007
    Alter
    40
    Beiträge
    17

    Wie bei Knopfdruck Variable um eins hochzählen?

    Anzeige

    Powerstation Test
    Hallo,

    habe mir das RN-Control gebaut, da ich mir das arbeiten mit Mikrocontrollern beibringen will. Soweit klappt auch schon alles, USART, LCD, ADC usw.

    Nun hab ich mir in C mal das Grundgerüst für eine Uhr geschrieben. Sekunden hochzählen und halt dann jeweils die Minuten und Stunden hochzählen lassen. Jetzt wollt ich per Knopfdruck die Stunden und Minuten manuell hochzählen, da die Uhr sonst ja immer von 00:00:00 zu zählen beginnt.
    Abgefragt wird der Button ja über den AD-Wandler an PortA.7. Momentan zählen die Sekunden wahnsinnig schnell hoch wenn ich die Taste drück was auch verständlich is da die Funktion die die Variable inkrementiert dauernd durchläuft.

    Ich hatte an ne Flankenerkennung gedacht, da die ja nur einmal stattfindet wenn man nen Taster drückt, da der Taster aber an dem AD-Wandler hängt wüsst ich net wie ich das lösen könnt.

    Für nen kleinen Denkanstoss, wie man das beheben kann wär ich sehr dankbar. Is bestimmt nur ne Kleinigkeit für C Profis ^^

    Danke schonmal

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    03.10.2007
    Beiträge
    68
    Hallo Wasserkäfer,

    es gibt zwei Möglichkeiten:

    schlechte, nach erkennen der Taste Zeit abwarten und nochmal abfragen,

    gute, Flag setzen, das Taste gekommen ist und merken. Wenn Taste geht Flag wieder löschen, dann hast Du die Flanke. Hat allerdings den Nachteil, das für jede Stelle einmal gedrückt wird.

    Elegant macht man sowas mit nem Keyrepeat nach einer definierten Zeit, will heißen, das Zählen läuft schneller je länger man die Taste festhält.

    Grüße

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    04.10.2007
    Alter
    40
    Beiträge
    17
    Danke

    habs jetzt mal geschafft über den schlechten Weg :P *schäm*
    Morgen möcht ich mir mal den "guten" Weg anschaun und ausprobieren. Wie ich das realisier ist mir noch unklar. Grad frag ich einfach mit 2 if-Funktionen die Zustände kurz hintereinander ab und reagier dementsprechen darauf, aber leider sind danoch 2 _delay_ms drinnen um das zeitversetzte abfragen zu realisieren. Wie ist die "gute" möglichkeit denn gemeint? Da müsst ich doch auch einfach nur den Zustandswechsel abfragen oder?

    Vom Keyrepeat lass ich mal noch die Finger von :P

    Danke schonmal

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    38
    Beiträge
    4.255
    Damit die Tastenerkennung im Hintergrund mitlaufen kann, ohne das Hauptprogramm zu blockieren, müsste sie in einem Timer-interrupt laufen. Also zb alle 10ms die Tasten einlesen, vom ADC-Wert auf die einzelnen Tasten zurückrechnen, und dann die Flankenerkennung durchführen.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    03.10.2007
    Beiträge
    68
    Hey Wasserkäfer,

    das ist die richtige Einstellung, mühsam ernährt sich das Eichhörnchen. =D>

    Nee, ist schon richtig sich schrittweise ran zu arbeiten. Weil dann lernt man vielmehr als nur was stupide ab zu tippen.

    Wie uwegw geschrieben hat kann man das in einer Timertask machen oder über einen Tasten-Interrupt.

    Versuch Dich einmal daran. Wenns nicht klappt einfach melden.

    Toi, Toi, Toi. =D>

    Grüße

Berechtigungen

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

Labornetzteil AliExpress