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

Dependents:   2019NHK_A_manual_red 2019NHK_A_manual_red 2019NHK_A_manual_blue

Committer:
ec30109b
Date:
Thu Oct 03 08:32:17 2019 +0000
Revision:
4:3c82016a7083
Parent:
3:dce990775412
less thread

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;
ec30109b 3:dce990775412 10 flag_ = true;
skouki 2:866aa77e2fd6 11 mode = true;
ec30109b 4:3c82016a7083 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;
ec30109b 3:dce990775412 22 flag_ = true;
skouki 2:866aa77e2fd6 23 mode = false;
ec30109b 4:3c82016a7083 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;
ec30109b 4:3c82016a7083 49 checkchattering();
ec30109b 4:3c82016a7083 50 valuecount();
skouki 2:866aa77e2fd6 51 }
skouki 2:866aa77e2fd6 52
skouki 0:443871490643 53 void chatteringremoval::threadloop()
skouki 0:443871490643 54 {
skouki 0:443871490643 55 while(true){
skouki 2:866aa77e2fd6 56 checkchattering();
skouki 2:866aa77e2fd6 57 valuecount();
skouki 2:866aa77e2fd6 58 }
skouki 2:866aa77e2fd6 59 }
skouki 2:866aa77e2fd6 60 void chatteringremoval::checkchattering()
skouki 2:866aa77e2fd6 61 {
skouki 2:866aa77e2fd6 62 if(mode) b = d_in.read();
skouki 2:866aa77e2fd6 63 else b = _data;
skouki 2:866aa77e2fd6 64
skouki 2:866aa77e2fd6 65 if(!b && !flag){
skouki 2:866aa77e2fd6 66 flag = true;
skouki 2:866aa77e2fd6 67 value = 0;
skouki 2:866aa77e2fd6 68 t.reset();
skouki 2:866aa77e2fd6 69 t.start();
skouki 2:866aa77e2fd6 70 }
skouki 2:866aa77e2fd6 71
skouki 2:866aa77e2fd6 72
ec30109b 4:3c82016a7083 73 if((t.read() >= _time) && b){
skouki 2:866aa77e2fd6 74 value = 1;
skouki 2:866aa77e2fd6 75 flag = false;
skouki 2:866aa77e2fd6 76 }
skouki 2:866aa77e2fd6 77 }
skouki 0:443871490643 78
skouki 2:866aa77e2fd6 79 bool chatteringremoval::getValue()
skouki 2:866aa77e2fd6 80 {
skouki 2:866aa77e2fd6 81 return value;
skouki 0:443871490643 82 }