チャタリング防止できそうなものです。
Dependents: 2019NHK_A_manual_red 2019NHK_A_manual_red 2019NHK_A_manual_blue
chatteringremoval.cpp@2:866aa77e2fd6, 2019-09-02 (annotated)
- 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?
User | Revision | Line number | New 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 | } |