Gast
#40258
moin ! ich habe 8 taster an dem port d angeschlossen diese taster möchte ich auf zwei verschiedene methoden auslesen: 1. normal ob er gedrücktist (entprellen) 2. ob er für mind. 3 sekunden gedrückt ist. ich hab schon einiges gelesen und leute genervt und trotzdem weiß ich noch nicht wie ich es anstellen soll - habe mir jetzt folgendes überlegt: ich mache einen interrupt der alle 50ms ausgeführt wird (der µC läuft bei 1Mhz) am anfang dieses int's ist eine große schleife die abfragt: ist t1 or t2 or t3 or t4 or t5 or t6 or t7 or t8 gedrückt ?? nein: interrupt beenden und zu main zurückkehren ja: dann kommt eine switch anweisung die herausfindet WELCHER der taster gedrückt ist Case t1 Case t2 Case t3 Case t4 ... ... In jeder sieser case blöcke steht jetzt: eine kleine schleife zum entprellen die 65025 zyklen nachschaut ob der jeweilige taster gedrückt ist bzw bleibt. DANACH könnte man den druck ja schon als kurzen tastendruck intapretieren aber es soll ja weiterhin überürüft werden ob es nicht im einen langer tastendruck (3 sekunden) handelt. also soll der zähler jetzt weiter hochzählen bis 3millionen (3sekunden bei 1MHz) wird der taster beim inkrementieren zwischen 65.025 und 3.000.000 unterbrochen (durch loslassen) wird der interrupt unterbrochen und zur funktion t1_kurz gewechselt hat der zähler 3.000.000 erreicht wird der interrupt auch unterbrochen und zur funktion t1_lang gewechselt 1. kann man das so machen, mus sich dabei was besonderes beachten oder gibt es da intelligentere lösungen ?! 2. als was muss ich eine variable deklarieren um die bis 3.000.000 hochzählen zukönnen ? viele grüße lordchen