チャタリング防止できそうなものです。

Dependents:   2019NHK_A_manual_red 2019NHK_A_manual_red 2019NHK_A_manual_blue

Committer:
skouki
Date:
Mon Sep 02 01:39:35 2019 +0000
Revision:
2:866aa77e2fd6
Parent:
0:443871490643
Child:
3:dce990775412
v2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
skouki 0:443871490643 1 #include"chatteringremoval.h"
skouki 0:443871490643 2
skouki 2:866aa77e2fd6 3 chatteringremoval::chatteringremoval(PinName pin,float time):
skouki 0:443871490643 4 d_in(pin)
skouki 0:443871490643 5 {
skouki 0:443871490643 6 d_in.mode(PullUp);
skouki 2:866aa77e2fd6 7 _time = time;
skouki 2:866aa77e2fd6 8 value = true;
skouki 0:443871490643 9 flag = false;
skouki 2:866aa77e2fd6 10 flag_ = false;
skouki 2:866aa77e2fd6 11 mode = true;
skouki 2:866aa77e2fd6 12 thread.start(callback(this, &chatteringremoval::threadloop));
skouki 2:866aa77e2fd6 13 }
skouki 2:866aa77e2fd6 14
skouki 2:866aa77e2fd6 15 chatteringremoval::chatteringremoval(float time):
skouki 2:866aa77e2fd6 16 d_in(NC)
skouki 2:866aa77e2fd6 17 {
skouki 2:866aa77e2fd6 18 _time = time;
skouki 2:866aa77e2fd6 19 value = true;
skouki 2:866aa77e2fd6 20 b = true;
skouki 2:866aa77e2fd6 21 flag = false;
skouki 2:866aa77e2fd6 22 flag_ = false;
skouki 2:866aa77e2fd6 23 mode = false;
skouki 2:866aa77e2fd6 24 thread.start(callback(this, &chatteringremoval::threadloop));
skouki 0:443871490643 25 }
skouki 0:443871490643 26
skouki 0:443871490643 27 unsigned int chatteringremoval::getCount()
skouki 0:443871490643 28 {
skouki 0:443871490643 29 return count;
skouki 0:443871490643 30 }
skouki 0:443871490643 31
skouki 0:443871490643 32 void chatteringremoval::countreset()
skouki 0:443871490643 33 {
skouki 0:443871490643 34 count = 0;
skouki 0:443871490643 35 }
skouki 2:866aa77e2fd6 36
skouki 2:866aa77e2fd6 37 void chatteringremoval::valuecount()
skouki 2:866aa77e2fd6 38 {
skouki 2:866aa77e2fd6 39 if(value) flag_ = false;
skouki 2:866aa77e2fd6 40 if(!value && !flag_){
skouki 2:866aa77e2fd6 41 flag_ = true;
skouki 2:866aa77e2fd6 42 count++;
skouki 2:866aa77e2fd6 43 }
skouki 2:866aa77e2fd6 44 }
skouki 2:866aa77e2fd6 45
skouki 2:866aa77e2fd6 46 void chatteringremoval::assignvalue(bool data)
skouki 2:866aa77e2fd6 47 {
skouki 2:866aa77e2fd6 48 _data = data;
skouki 2:866aa77e2fd6 49 }
skouki 2:866aa77e2fd6 50
skouki 0:443871490643 51 void chatteringremoval::threadloop()
skouki 0:443871490643 52 {
skouki 0:443871490643 53 while(true){
skouki 2:866aa77e2fd6 54 checkchattering();
skouki 2:866aa77e2fd6 55 valuecount();
skouki 2:866aa77e2fd6 56 }
skouki 2:866aa77e2fd6 57 }
skouki 2:866aa77e2fd6 58 void chatteringremoval::checkchattering()
skouki 2:866aa77e2fd6 59 {
skouki 2:866aa77e2fd6 60 if(mode) b = d_in.read();
skouki 2:866aa77e2fd6 61 else b = _data;
skouki 2:866aa77e2fd6 62
skouki 2:866aa77e2fd6 63 if(!b && !flag){
skouki 2:866aa77e2fd6 64 flag = true;
skouki 2:866aa77e2fd6 65 value = 0;
skouki 2:866aa77e2fd6 66 t.reset();
skouki 2:866aa77e2fd6 67 t.start();
skouki 2:866aa77e2fd6 68 }
skouki 2:866aa77e2fd6 69
skouki 2:866aa77e2fd6 70
skouki 2:866aa77e2fd6 71 if((t.read_us() >= _time*1000*1000) && b){
skouki 2:866aa77e2fd6 72 value = 1;
skouki 2:866aa77e2fd6 73 flag = false;
skouki 2:866aa77e2fd6 74 }
skouki 2:866aa77e2fd6 75 }
skouki 0:443871490643 76
skouki 2:866aa77e2fd6 77 bool chatteringremoval::getValue()
skouki 2:866aa77e2fd6 78 {
skouki 2:866aa77e2fd6 79 return value;
skouki 0:443871490643 80 }