Test für den Test

Dependencies:   mbed

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) {
+    }
+}