Thomas Schöngeld
/
interupt_counter
Test für den Test 1
Fork of interupt_counter by
Diff: main1.cpp
- Revision:
- 0:6ef5de7d9560
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main1.cpp Mon Jan 18 09:44:43 2016 +0000 @@ -0,0 +1,60 @@ +#include "mbed.h" + +InterruptIn iiUp(p15); +DigitalIn diUp(p15); +InterruptIn iiDown(p12); +DigitalIn diDown(p12); +BusOut leds(LED1, LED2, LED3, LED4); + +// prototypes + +// functions +// Diese Funktion ist zum Entprellen von Tastern geeignet: +// Durch den zusätzlichen Code kann eine Entprellzeit von durchschnittlich 1,5-4ms +// (mindestens 8*150us = 1,2ms) erreicht werden. +// Grundsätzlich prüft die Funktion den Pegel des Pins eine DigitalIn. +// Wenn der Pegel 8 Mal konstant war, wird die Schleife verlassen. +// Diese Funktion kann sehr gut eingesetzt werden, um in einer Endlosschleife Taster +// anzufragen, da sie, wie erwähnt, eine kurze Wartezeit hat. +uint8_t debounce(DigitalIn myIn) +{ +#define LEVEL_CHECKS 8 +#define MAX_LOOPS 30 // stoppt das Überprüfen des Prellen nach max. MAX_LOOPS Durchläufen + unsigned char port_buffer; + unsigned char debounceCounter = 0; + uint8_t loopCounter = 0; + + do { + port_buffer = myIn; + wait_us(150); + loopCounter++; + if(myIn == port_buffer) + debounceCounter++; // mindestens 'LEVEL_CHECKS' Abtastungen in Folge: gleicher Pegel + else + debounceCounter = 0; + } while ((debounceCounter <= LEVEL_CHECKS) && (loopCounter <= MAX_LOOPS)); + return loopCounter; +} + +// ISR +void cntUp() +{ + debounce(diUp); + leds = leds + 1; +} + +void cntDown() +{ + debounce(diDown); + leds = leds - 1; +} + + +// main program +int main() +{ + iiUp.rise(&cntUp); + iiDown.rise(&cntDown); + while(1) { + } +}