EZR

Dependencies:   CRC16 FreescaleIAP FreescaleWatchdog GGSProtocol LM75B PIMA Parameters PersistentCircularQueue SerialNumberV2COM mbed-dev-watchdog_2016_03_04

Fork of smartRamalKW by Equipe Firmware V2COM

Committer:
tpadovani
Date:
Thu Jul 30 17:24:01 2015 +0000
Revision:
16:cae76dbd681f
Parent:
9:e501499af4ef
Child:
22:b66e36356dd4
Retorna valor zero para leituras de tens?o abaixo de um valor parametrizado (default 5V).

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tpadovani 5:1bc98277c257 1 #include "sensor.h"
tpadovani 5:1bc98277c257 2
tpadovani 8:e8d86c66283c 3 extern AnalogIn voltage[];
tpadovani 5:1bc98277c257 4 extern ParametersBlock APP_PARAMETERS;
tpadovani 5:1bc98277c257 5
tpadovani 8:e8d86c66283c 6 Ticker tickerSamples;
tpadovani 8:e8d86c66283c 7 Timeout samplesTimeout;
tpadovani 8:e8d86c66283c 8 unsigned char currentChannel;
tpadovani 8:e8d86c66283c 9 float sample[DEFAULT_SAMPLES];
tpadovani 8:e8d86c66283c 10 int currentSample;
tpadovani 8:e8d86c66283c 11 bool finished;
tpadovani 8:e8d86c66283c 12 bool timeout;
tpadovani 8:e8d86c66283c 13
tpadovani 8:e8d86c66283c 14 float getTensaoInstantanea(unsigned char channel){
tpadovani 8:e8d86c66283c 15 currentChannel = channel;
tpadovani 8:e8d86c66283c 16 currentSample = 0;
tpadovani 8:e8d86c66283c 17 finished = false;
tpadovani 8:e8d86c66283c 18 timeout = false;
tpadovani 8:e8d86c66283c 19 tickerSamples.attach_us(&readSample, APP_PARAMETERS.SAMPLES_DELAY_US);
tpadovani 8:e8d86c66283c 20 samplesTimeout.attach_us(&timeoutReadingSamples, (DEFAULT_SAMPLES + 2) * APP_PARAMETERS.SAMPLES_DELAY_US);
tpadovani 8:e8d86c66283c 21
tpadovani 8:e8d86c66283c 22 while(!finished && !timeout){
tpadovani 8:e8d86c66283c 23 wait(0.1f);
tpadovani 8:e8d86c66283c 24 }
tpadovani 8:e8d86c66283c 25
tpadovani 16:cae76dbd681f 26 float resp = calculateRMS();
tpadovani 16:cae76dbd681f 27 float limit = 0;
tpadovani 16:cae76dbd681f 28 if(channel == 0){
tpadovani 16:cae76dbd681f 29 limit = APP_PARAMETERS.LIMITE_TENSAO_ZERO_CH0_V;
tpadovani 16:cae76dbd681f 30 } else{
tpadovani 16:cae76dbd681f 31 limit = APP_PARAMETERS.LIMITE_TENSAO_ZERO_CH1_V;
tpadovani 16:cae76dbd681f 32 }
tpadovani 16:cae76dbd681f 33 if(resp < limit){
tpadovani 16:cae76dbd681f 34 return 0;
tpadovani 16:cae76dbd681f 35 } else{
tpadovani 16:cae76dbd681f 36 return resp;
tpadovani 16:cae76dbd681f 37 }
tpadovani 8:e8d86c66283c 38 }
tpadovani 8:e8d86c66283c 39
tpadovani 8:e8d86c66283c 40 bool getEstadoSensor(unsigned char channel){
tpadovani 8:e8d86c66283c 41 if(getTensaoInstantanea(channel) > APP_PARAMETERS.LIMITE_TENSAO_SENSOR_V){
tpadovani 7:fe8e827f4d1b 42 return SENSOR_COM_FORNECIMENTO;
tpadovani 7:fe8e827f4d1b 43 } else{
tpadovani 7:fe8e827f4d1b 44 return SENSOR_SEM_FORNECIMENTO;
tpadovani 7:fe8e827f4d1b 45 }
tpadovani 5:1bc98277c257 46 }
tpadovani 8:e8d86c66283c 47
tpadovani 8:e8d86c66283c 48 void readSample(){
tpadovani 8:e8d86c66283c 49 sample[currentSample++] = voltage[currentChannel];
tpadovani 8:e8d86c66283c 50 if(currentSample == DEFAULT_SAMPLES){
tpadovani 8:e8d86c66283c 51 finished = true;
tpadovani 8:e8d86c66283c 52 samplesTimeout.detach();
tpadovani 8:e8d86c66283c 53 tickerSamples.detach();
tpadovani 8:e8d86c66283c 54 }
tpadovani 8:e8d86c66283c 55 }
tpadovani 8:e8d86c66283c 56
tpadovani 8:e8d86c66283c 57 void timeoutReadingSamples(){
tpadovani 8:e8d86c66283c 58 tickerSamples.detach();
tpadovani 8:e8d86c66283c 59 timeout = true;
tpadovani 8:e8d86c66283c 60 }
tpadovani 8:e8d86c66283c 61
tpadovani 8:e8d86c66283c 62 float calculateRMS(){
tpadovani 8:e8d86c66283c 63 float rms = 0;
tpadovani 8:e8d86c66283c 64 for(int i=0; i < DEFAULT_SAMPLES; i++){
tpadovani 9:e501499af4ef 65 sample[i] = abs(sample[i]*APP_PARAMETERS.SAMPLES_ANG_COEF.floatValue + APP_PARAMETERS.SAMPLES_LIN_COEF.floatValue);
tpadovani 8:e8d86c66283c 66 rms += sample[i]*sample[i];
tpadovani 8:e8d86c66283c 67 }
tpadovani 9:e501499af4ef 68 rms = rms / DEFAULT_SAMPLES;
tpadovani 8:e8d86c66283c 69 return sqrt(rms);
tpadovani 8:e8d86c66283c 70 }