チャタリング防止できそうなものです。
Dependents: 2019NHK_A_manual_red 2019NHK_A_manual_red 2019NHK_A_manual_blue
chatteringremoval.cpp@0:443871490643, 2019-08-30 (annotated)
- Committer:
- skouki
- Date:
- Fri Aug 30 06:29:48 2019 +0000
- Revision:
- 0:443871490643
- Child:
- 2:866aa77e2fd6
v1
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 | 0:443871490643 | 3 | chatteringremoval::chatteringremoval(PinName pin): |
skouki | 0:443871490643 | 4 | d_in(pin) |
skouki | 0:443871490643 | 5 | { |
skouki | 0:443871490643 | 6 | d_in.mode(PullUp); |
skouki | 0:443871490643 | 7 | flag = false; |
skouki | 0:443871490643 | 8 | } |
skouki | 0:443871490643 | 9 | |
skouki | 0:443871490643 | 10 | unsigned int chatteringremoval::getCount() |
skouki | 0:443871490643 | 11 | { |
skouki | 0:443871490643 | 12 | return count; |
skouki | 0:443871490643 | 13 | } |
skouki | 0:443871490643 | 14 | |
skouki | 0:443871490643 | 15 | void chatteringremoval::setInvalidationtime_s(unsigned int time) |
skouki | 0:443871490643 | 16 | { |
skouki | 0:443871490643 | 17 | _time = time * 1000 * 1000; |
skouki | 0:443871490643 | 18 | thread.start(callback(this, &chatteringremoval::threadloop)); |
skouki | 0:443871490643 | 19 | } |
skouki | 0:443871490643 | 20 | |
skouki | 0:443871490643 | 21 | void chatteringremoval::setInvalidationtime_ms(unsigned int time) |
skouki | 0:443871490643 | 22 | { |
skouki | 0:443871490643 | 23 | _time = time * 1000 ; |
skouki | 0:443871490643 | 24 | thread.start(callback(this, &chatteringremoval::threadloop)); |
skouki | 0:443871490643 | 25 | } |
skouki | 0:443871490643 | 26 | |
skouki | 0:443871490643 | 27 | void chatteringremoval::setInvalidationtime_us(unsigned int time) |
skouki | 0:443871490643 | 28 | { |
skouki | 0:443871490643 | 29 | _time = time; |
skouki | 0:443871490643 | 30 | thread.start(callback(this, &chatteringremoval::threadloop)); |
skouki | 0:443871490643 | 31 | } |
skouki | 0:443871490643 | 32 | |
skouki | 0:443871490643 | 33 | void chatteringremoval::countreset() |
skouki | 0:443871490643 | 34 | { |
skouki | 0:443871490643 | 35 | count = 0; |
skouki | 0:443871490643 | 36 | } |
skouki | 0:443871490643 | 37 | void chatteringremoval::threadloop() |
skouki | 0:443871490643 | 38 | { |
skouki | 0:443871490643 | 39 | while(true){ |
skouki | 0:443871490643 | 40 | bool b = d_in.read(); |
skouki | 0:443871490643 | 41 | |
skouki | 0:443871490643 | 42 | if(!b && !flag){ |
skouki | 0:443871490643 | 43 | flag = true; |
skouki | 0:443871490643 | 44 | count++; |
skouki | 0:443871490643 | 45 | t.reset(); |
skouki | 0:443871490643 | 46 | t.start(); |
skouki | 0:443871490643 | 47 | } |
skouki | 0:443871490643 | 48 | |
skouki | 0:443871490643 | 49 | |
skouki | 0:443871490643 | 50 | if(t.read_us() >= _time && b){ |
skouki | 0:443871490643 | 51 | flag = false; |
skouki | 0:443871490643 | 52 | } |
skouki | 0:443871490643 | 53 | } |
skouki | 0:443871490643 | 54 | } |