チャタリング防止できそうなものです。
Dependents: 2019NHK_A_manual_red 2019NHK_A_manual_red 2019NHK_A_manual_blue
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 }
Generated on Fri Aug 5 2022 08:52:26 by
1.7.2