Code-Basis für Programm zum Taster-Entprellen
Fork of Laser-Distance by
Diff: main.cpp
- Revision:
- 13:87f9e63b2cfa
- Parent:
- 12:b436e51e86a8
--- a/main.cpp Mon Oct 01 11:21:17 2018 +0000 +++ b/main.cpp Mon Oct 08 07:53:17 2018 +0000 @@ -3,43 +3,52 @@ #define USE_I2C_2V8 DigitalOut myled(P0_8); // 7=rot, 8=grün, 9=blau -DigitalIn sw_o(P0_12); +InterruptIn sw_o(P0_12); InterruptIn sw_b(P0_13); InterruptIn sw_g(P0_14); +Timer t1; // ein (globaler) Timer für alle Tasten I2C i2c_disp(P0_5, P0_4); // SDA, SCL auf LPC11U24 SB1602E lcd(i2c_disp); -int count_o, count_b, count_g = 0; +int count_o = 0, count_b = 0, count_g = 0; +int lastMS_o = 0, lastMS_b = 0, lastMS_g = 0; // Timer-Werte beim letzten Interrupt in [ms] -void blue(){ - count_b++; - } -void green() { - count_g++; - } +void incrementO() { + //t1.start(); // startet beim ersten Aufruf den Timer, bei weiteren Aufrufen passiert nichts (Timer läuft weiter) + + if (t1.read_ms() - lastMS_o > 10) { // ist die Differenz zwischen aktueller Zeit und letztem Aufruf > 10ms ... + count_o++; // ... dann inkrementiere die Zählervariable + } + lastMS_o = t1.read_ms(); // speichert den aktuellen Timer-Wert (für den nächsten Aufruf/Taster-Interrupt) +} -int main() -{ - sw_o.mode(PullUp); - sw_b.mode(PullUp); - sw_g.mode(PullUp); +void incrementB() { + t1.reset(); + if (t1.read_ms() - lastMS_b > 10) count_b++; + lastMS_b = t1.read_ms(); +} - sw_b.fall(&blue); - sw_g.fall(&green); - wait(0.2); +void incrementG() { + if (t1.read_ms() - lastMS_g > 10) count_g++; + lastMS_g = t1.read_ms(); +} + +int main() { + sw_o.mode(PullUp); + sw_g.mode(PullUp); + sw_b.mode(PullUp); - int sw_o_old = 0; - int sw_o_new; + sw_o.fall(&incrementO); + sw_b.fall(&incrementB); + sw_g.fall(&incrementG); lcd.printf(0, "Red Blue Green\r"); // Parameter von printf auf LCD: Zeilennummer (0 or 1), string + + t1.start(); + while(1) { - sw_o_new = sw_o; - if ((sw_o_new==0) && (sw_o_old==1)) count_o++; // fallende Flanke: old=1 & new=0 - sw_o_old = sw_o_new; - lcd.printf(1,1, "%d %d %d", count_o, count_b, count_g); - myled = !myled; - + lcd.printf(1, 1, "%d %d %d", count_o, count_b, count_g); } } \ No newline at end of file