Test für den Test

Dependencies:   mbed

Committer:
schoeni_91
Date:
Mon Jan 18 09:44:43 2016 +0000
Revision:
0:6ef5de7d9560
Test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
schoeni_91 0:6ef5de7d9560 1 #include "mbed.h"
schoeni_91 0:6ef5de7d9560 2
schoeni_91 0:6ef5de7d9560 3 InterruptIn iiUp(p15);
schoeni_91 0:6ef5de7d9560 4 DigitalIn diUp(p15);
schoeni_91 0:6ef5de7d9560 5 InterruptIn iiDown(p12);
schoeni_91 0:6ef5de7d9560 6 DigitalIn diDown(p12);
schoeni_91 0:6ef5de7d9560 7 BusOut leds(LED1, LED2, LED3, LED4);
schoeni_91 0:6ef5de7d9560 8
schoeni_91 0:6ef5de7d9560 9 // prototypes
schoeni_91 0:6ef5de7d9560 10
schoeni_91 0:6ef5de7d9560 11 // functions
schoeni_91 0:6ef5de7d9560 12 // Diese Funktion ist zum Entprellen von Tastern geeignet:
schoeni_91 0:6ef5de7d9560 13 // Durch den zusätzlichen Code kann eine Entprellzeit von durchschnittlich 1,5-4ms
schoeni_91 0:6ef5de7d9560 14 // (mindestens 8*150us = 1,2ms) erreicht werden.
schoeni_91 0:6ef5de7d9560 15 // Grundsätzlich prüft die Funktion den Pegel des Pins eine DigitalIn.
schoeni_91 0:6ef5de7d9560 16 // Wenn der Pegel 8 Mal konstant war, wird die Schleife verlassen.
schoeni_91 0:6ef5de7d9560 17 // Diese Funktion kann sehr gut eingesetzt werden, um in einer Endlosschleife Taster
schoeni_91 0:6ef5de7d9560 18 // anzufragen, da sie, wie erwähnt, eine kurze Wartezeit hat.
schoeni_91 0:6ef5de7d9560 19 uint8_t debounce(DigitalIn myIn)
schoeni_91 0:6ef5de7d9560 20 {
schoeni_91 0:6ef5de7d9560 21 #define LEVEL_CHECKS 8
schoeni_91 0:6ef5de7d9560 22 #define MAX_LOOPS 30 // stoppt das Überprüfen des Prellen nach max. MAX_LOOPS Durchläufen
schoeni_91 0:6ef5de7d9560 23 unsigned char port_buffer;
schoeni_91 0:6ef5de7d9560 24 unsigned char debounceCounter = 0;
schoeni_91 0:6ef5de7d9560 25 uint8_t loopCounter = 0;
schoeni_91 0:6ef5de7d9560 26
schoeni_91 0:6ef5de7d9560 27 do {
schoeni_91 0:6ef5de7d9560 28 port_buffer = myIn;
schoeni_91 0:6ef5de7d9560 29 wait_us(150);
schoeni_91 0:6ef5de7d9560 30 loopCounter++;
schoeni_91 0:6ef5de7d9560 31 if(myIn == port_buffer)
schoeni_91 0:6ef5de7d9560 32 debounceCounter++; // mindestens 'LEVEL_CHECKS' Abtastungen in Folge: gleicher Pegel
schoeni_91 0:6ef5de7d9560 33 else
schoeni_91 0:6ef5de7d9560 34 debounceCounter = 0;
schoeni_91 0:6ef5de7d9560 35 } while ((debounceCounter <= LEVEL_CHECKS) && (loopCounter <= MAX_LOOPS));
schoeni_91 0:6ef5de7d9560 36 return loopCounter;
schoeni_91 0:6ef5de7d9560 37 }
schoeni_91 0:6ef5de7d9560 38
schoeni_91 0:6ef5de7d9560 39 // ISR
schoeni_91 0:6ef5de7d9560 40 void cntUp()
schoeni_91 0:6ef5de7d9560 41 {
schoeni_91 0:6ef5de7d9560 42 debounce(diUp);
schoeni_91 0:6ef5de7d9560 43 leds = leds + 1;
schoeni_91 0:6ef5de7d9560 44 }
schoeni_91 0:6ef5de7d9560 45
schoeni_91 0:6ef5de7d9560 46 void cntDown()
schoeni_91 0:6ef5de7d9560 47 {
schoeni_91 0:6ef5de7d9560 48 debounce(diDown);
schoeni_91 0:6ef5de7d9560 49 leds = leds - 1;
schoeni_91 0:6ef5de7d9560 50 }
schoeni_91 0:6ef5de7d9560 51
schoeni_91 0:6ef5de7d9560 52
schoeni_91 0:6ef5de7d9560 53 // main program
schoeni_91 0:6ef5de7d9560 54 int main()
schoeni_91 0:6ef5de7d9560 55 {
schoeni_91 0:6ef5de7d9560 56 iiUp.rise(&cntUp);
schoeni_91 0:6ef5de7d9560 57 iiDown.rise(&cntDown);
schoeni_91 0:6ef5de7d9560 58 while(1) {
schoeni_91 0:6ef5de7d9560 59 }
schoeni_91 0:6ef5de7d9560 60 }