Own fork of MbedSmartRestMain
Dependencies: C027_Support C12832 LM75B MMA7660 MbedSmartRest mbed-rtos mbed
Fork of MbedSmartRestMain by
Potentiometer.cpp
00001 #include <stdio.h> 00002 #include "rtos.h" 00003 #include "Potentiometer.h" 00004 #include "SmartRestConf.h" 00005 #include "logging.h" 00006 00007 // Cutoff for avoiding sending similar sensor data. 00008 #define THRESHOLD_PERCENT_ANA 0.02 00009 // Timeout for forcing a sending even if readings are similar [seconds] 00010 #define TIME_LIMIT_ANA 900 00011 00012 AnalogIn analog1(A0); 00013 AnalogIn analog2(A1); 00014 00015 static inline bool valueChanged(float *V0, float *V1) 00016 { 00017 if (abs(V0[0]-V1[0]) <= abs(V0[0])*THRESHOLD_PERCENT_ANA && 00018 abs(V0[1]-V1[1]) <= abs(V0[1])*THRESHOLD_PERCENT_ANA) 00019 return false; 00020 else 00021 return true; 00022 } 00023 00024 int Potentiometer::read(char *buf, size_t maxLen, char *status, size_t num) 00025 { 00026 static const char *fmt = "107,%ld,%f,%f\r\n"; 00027 float data[2] = {0, 0}; 00028 float min[2] = {100, 100}; 00029 float max[2] = {0, 0}; 00030 // multiple sampling for data smoothing 00031 const unsigned short N = 20; 00032 for (unsigned short i = 0; i < N; ++i) { 00033 float d0 = (float)analog1*100; 00034 float d1 = (float)analog2*100; 00035 data[0] += d0; 00036 data[1] += d1; 00037 min[0] = min[0] <= d0 ? min[0] : d0; 00038 min[1] = min[1] <= d1 ? min[1] : d1; 00039 max[0] = max[0] >= d0 ? max[0] : d0; 00040 max[1] = max[1] >= d1 ? max[1] : d1; 00041 Thread::wait(10); 00042 } 00043 data[0] = (data[0]-min[0]-max[0]) / (N-2); 00044 data[1] = (data[1]-min[1]-max[1]) / (N-2); 00045 00046 float t_interval = timer.read(); 00047 if (!valueChanged(oldValues, data) && t_interval < TIME_LIMIT_ANA) { 00048 return 0; 00049 } 00050 00051 size_t l = snprintf(buf, maxLen, fmt, deviceID, data[0], data[1]); 00052 if (status) { 00053 snprintf(status, num, "Send Poti %.1f,%.1f", data[0], data[1]); 00054 } 00055 oldValues[0] = data[0]; 00056 oldValues[1] = data[1]; 00057 timer.reset(); 00058 return l; 00059 }
Generated on Sat Jul 16 2022 07:10:59 by 1.7.2