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

Dependents:   2019NHK_A_manual_red 2019NHK_A_manual_red 2019NHK_A_manual_blue

chatteringremoval.cpp

Committer:
ec30109b
Date:
2019-09-23
Revision:
3:dce990775412
Parent:
2:866aa77e2fd6
Child:
4:3c82016a7083

File content as of revision 3:dce990775412:

#include"chatteringremoval.h"

chatteringremoval::chatteringremoval(PinName pin,float time):
    d_in(pin)
{
    d_in.mode(PullUp);
    _time = time;
    value = true;
    flag = false;
    flag_ = true;
    mode = true;
    thread.start(callback(this, &chatteringremoval::threadloop));
}

chatteringremoval::chatteringremoval(float time):
    d_in(NC)
{
    _time = time;
    value = true;
    b = true;
    flag = false;
    flag_ = true;
    mode = false;
    thread.start(callback(this, &chatteringremoval::threadloop));
}

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

void chatteringremoval::countreset()
{
    count = 0;    
}

void chatteringremoval::valuecount()
{
    if(value) flag_ = false;
    if(!value && !flag_){
        flag_ = true;
        count++;    
    }
}

void chatteringremoval::assignvalue(bool data)
{
    _data = data;
}

void chatteringremoval::threadloop()
{
    while(true){
        checkchattering();
        valuecount();
    }    
}
void chatteringremoval::checkchattering()
{
    if(mode) b = d_in.read();
    else b = _data;
     
    if(!b && !flag){
        flag = true;
        value = 0;  
        t.reset();
        t.start(); 
    }
    
    
    if((t.read_us() >= _time*1000*1000) && b){
        value = 1;
        flag = false;
    }    
}

bool chatteringremoval::getValue()
{
    return value;
}