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

Dependents:   2019NHK_A_manual_red 2019NHK_A_manual_red 2019NHK_A_manual_blue

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers chatteringremoval.cpp Source File

chatteringremoval.cpp

00001 #include"chatteringremoval.h"
00002 
00003 chatteringremoval::chatteringremoval(PinName pin,float time):
00004     d_in(pin)
00005 {
00006     d_in.mode(PullUp);
00007     _time = time;
00008     value = true;
00009     flag = false;
00010     flag_ = true;
00011     mode = true;
00012     //thread.start(callback(this, &chatteringremoval::threadloop));
00013 }
00014 
00015 chatteringremoval::chatteringremoval(float time):
00016     d_in(NC)
00017 {
00018     _time = time;
00019     value = true;
00020     b = true;
00021     flag = false;
00022     flag_ = true;
00023     mode = false;
00024     //thread.start(callback(this, &chatteringremoval::threadloop));
00025 }
00026 
00027 unsigned int chatteringremoval::getCount()
00028 {
00029     return count;
00030 }
00031 
00032 void chatteringremoval::countreset()
00033 {
00034     count = 0;    
00035 }
00036 
00037 void chatteringremoval::valuecount()
00038 {
00039     if(value) flag_ = false;
00040     if(!value && !flag_){
00041         flag_ = true;
00042         count++;    
00043     }
00044 }
00045 
00046 void chatteringremoval::assignvalue(bool data)
00047 {
00048     _data = data;
00049     checkchattering();
00050         valuecount();
00051 }
00052 
00053 void chatteringremoval::threadloop()
00054 {
00055     while(true){
00056         checkchattering();
00057         valuecount();
00058     }    
00059 }
00060 void chatteringremoval::checkchattering()
00061 {
00062     if(mode) b = d_in.read();
00063     else b = _data;
00064      
00065     if(!b && !flag){
00066         flag = true;
00067         value = 0;  
00068         t.reset();
00069         t.start(); 
00070     }
00071     
00072     
00073     if((t.read() >= _time) && b){
00074         value = 1;
00075         flag = false;
00076     }    
00077 }
00078 
00079 bool chatteringremoval::getValue()
00080 {
00081     return value;
00082 }