EZR
Dependencies: CRC16 FreescaleIAP FreescaleWatchdog GGSProtocol LM75B PIMA Parameters PersistentCircularQueue SerialNumberV2COM mbed-dev-watchdog_2016_03_04
Fork of smartRamalKW by
sensor.cpp@16:cae76dbd681f, 2015-07-30 (annotated)
- 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?
User | Revision | Line number | New 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 | } |