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

Dependents:   2019NHK_A_manual_red 2019NHK_A_manual_red 2019NHK_A_manual_blue

chatteringremoval.cpp

Committer:
skouki
Date:
2019-08-30
Revision:
0:443871490643
Child:
2:866aa77e2fd6

File content as of revision 0:443871490643:

#include"chatteringremoval.h"

chatteringremoval::chatteringremoval(PinName pin):
    d_in(pin)
{
    d_in.mode(PullUp);
    flag = false;
}

unsigned int chatteringremoval::getCount()
{
    return count;
}

void chatteringremoval::setInvalidationtime_s(unsigned int time)
{
    _time = time * 1000 * 1000;    
    thread.start(callback(this, &chatteringremoval::threadloop));
}

void chatteringremoval::setInvalidationtime_ms(unsigned int time)
{
    _time = time * 1000 ;  
    thread.start(callback(this, &chatteringremoval::threadloop));
}

void chatteringremoval::setInvalidationtime_us(unsigned int time)
{
    _time = time;    
    thread.start(callback(this, &chatteringremoval::threadloop));
}

void chatteringremoval::countreset()
{
    count = 0;    
}
void chatteringremoval::threadloop()
{
    while(true){
        bool b = d_in.read();
        
        if(!b && !flag){
            flag = true;
            count++;   
            t.reset();
            t.start(); 
        }

        
        if(t.read_us() >= _time && b){
            flag = false;
        }
    }    
}