EZR
Dependencies: CRC16 FreescaleIAP FreescaleWatchdog GGSProtocol LM75B PIMA Parameters PersistentCircularQueue SerialNumberV2COM mbed-dev-watchdog_2016_03_04
Fork of smartRamalKW by
sensor.cpp@22:b66e36356dd4, 2015-10-19 (annotated)
- Committer:
- tpadovani
- Date:
- Mon Oct 19 20:34:15 2015 +0000
- Revision:
- 22:b66e36356dd4
- Parent:
- 16:cae76dbd681f
- Child:
- 23:85202a52482d
debug condicional
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 | 22:b66e36356dd4 | 4 | extern DigitalOut ledLoad; |
tpadovani | 5:1bc98277c257 | 5 | extern ParametersBlock APP_PARAMETERS; |
tpadovani | 5:1bc98277c257 | 6 | |
tpadovani | 8:e8d86c66283c | 7 | Ticker tickerSamples; |
tpadovani | 8:e8d86c66283c | 8 | Timeout samplesTimeout; |
tpadovani | 8:e8d86c66283c | 9 | unsigned char currentChannel; |
tpadovani | 8:e8d86c66283c | 10 | float sample[DEFAULT_SAMPLES]; |
tpadovani | 8:e8d86c66283c | 11 | int currentSample; |
tpadovani | 8:e8d86c66283c | 12 | bool finished; |
tpadovani | 8:e8d86c66283c | 13 | bool timeout; |
tpadovani | 8:e8d86c66283c | 14 | |
tpadovani | 22:b66e36356dd4 | 15 | float getInstVoltage(unsigned char channel){ |
tpadovani | 8:e8d86c66283c | 16 | currentChannel = channel; |
tpadovani | 8:e8d86c66283c | 17 | currentSample = 0; |
tpadovani | 8:e8d86c66283c | 18 | finished = false; |
tpadovani | 8:e8d86c66283c | 19 | timeout = false; |
tpadovani | 8:e8d86c66283c | 20 | tickerSamples.attach_us(&readSample, APP_PARAMETERS.SAMPLES_DELAY_US); |
tpadovani | 8:e8d86c66283c | 21 | samplesTimeout.attach_us(&timeoutReadingSamples, (DEFAULT_SAMPLES + 2) * APP_PARAMETERS.SAMPLES_DELAY_US); |
tpadovani | 8:e8d86c66283c | 22 | |
tpadovani | 8:e8d86c66283c | 23 | while(!finished && !timeout){ |
tpadovani | 8:e8d86c66283c | 24 | wait(0.1f); |
tpadovani | 8:e8d86c66283c | 25 | } |
tpadovani | 8:e8d86c66283c | 26 | |
tpadovani | 22:b66e36356dd4 | 27 | float resp = calculateRMS(APP_PARAMETERS.SAMPLES_VOLTAGE_ANG_COEF.floatValue, APP_PARAMETERS.SAMPLES_VOLTAGE_LIN_COEF.floatValue); |
tpadovani | 16:cae76dbd681f | 28 | float limit = 0; |
tpadovani | 16:cae76dbd681f | 29 | if(channel == 0){ |
tpadovani | 16:cae76dbd681f | 30 | limit = APP_PARAMETERS.LIMITE_TENSAO_ZERO_CH0_V; |
tpadovani | 16:cae76dbd681f | 31 | } else{ |
tpadovani | 16:cae76dbd681f | 32 | limit = APP_PARAMETERS.LIMITE_TENSAO_ZERO_CH1_V; |
tpadovani | 16:cae76dbd681f | 33 | } |
tpadovani | 16:cae76dbd681f | 34 | if(resp < limit){ |
tpadovani | 16:cae76dbd681f | 35 | return 0; |
tpadovani | 16:cae76dbd681f | 36 | } else{ |
tpadovani | 16:cae76dbd681f | 37 | return resp; |
tpadovani | 16:cae76dbd681f | 38 | } |
tpadovani | 8:e8d86c66283c | 39 | } |
tpadovani | 8:e8d86c66283c | 40 | |
tpadovani | 22:b66e36356dd4 | 41 | float getInstCurrent(){ |
tpadovani | 22:b66e36356dd4 | 42 | currentChannel = 2; |
tpadovani | 22:b66e36356dd4 | 43 | currentSample = 0; |
tpadovani | 22:b66e36356dd4 | 44 | finished = false; |
tpadovani | 22:b66e36356dd4 | 45 | timeout = false; |
tpadovani | 22:b66e36356dd4 | 46 | tickerSamples.attach_us(&readSample, APP_PARAMETERS.SAMPLES_DELAY_US); |
tpadovani | 22:b66e36356dd4 | 47 | samplesTimeout.attach_us(&timeoutReadingSamples, (DEFAULT_SAMPLES + 2) * APP_PARAMETERS.SAMPLES_DELAY_US); |
tpadovani | 22:b66e36356dd4 | 48 | |
tpadovani | 22:b66e36356dd4 | 49 | while(!finished && !timeout){ |
tpadovani | 22:b66e36356dd4 | 50 | wait(0.1f); |
tpadovani | 22:b66e36356dd4 | 51 | } |
tpadovani | 22:b66e36356dd4 | 52 | |
tpadovani | 22:b66e36356dd4 | 53 | float resp = calculateRMS(APP_PARAMETERS.SAMPLES_CURRENT_ANG_COEF.floatValue, APP_PARAMETERS.SAMPLES_CURRENT_LIN_COEF.floatValue); |
tpadovani | 22:b66e36356dd4 | 54 | float limit = APP_PARAMETERS.LIMITE_CORRENTE_ZERO_A; |
tpadovani | 22:b66e36356dd4 | 55 | if(resp < limit){ |
tpadovani | 22:b66e36356dd4 | 56 | return 0; |
tpadovani | 22:b66e36356dd4 | 57 | } else{ |
tpadovani | 22:b66e36356dd4 | 58 | return resp; |
tpadovani | 22:b66e36356dd4 | 59 | } |
tpadovani | 22:b66e36356dd4 | 60 | } |
tpadovani | 22:b66e36356dd4 | 61 | |
tpadovani | 22:b66e36356dd4 | 62 | bool getSensorState(unsigned char channel){ |
tpadovani | 22:b66e36356dd4 | 63 | if(getInstVoltage(channel) > APP_PARAMETERS.LIMITE_TENSAO_SENSOR_V){ |
tpadovani | 22:b66e36356dd4 | 64 | if(channel == APP_PARAMETERS.LOAD_CHANNEL){ |
tpadovani | 22:b66e36356dd4 | 65 | ledLoad = LED_ON; |
tpadovani | 22:b66e36356dd4 | 66 | } |
tpadovani | 7:fe8e827f4d1b | 67 | return SENSOR_COM_FORNECIMENTO; |
tpadovani | 7:fe8e827f4d1b | 68 | } else{ |
tpadovani | 22:b66e36356dd4 | 69 | if(channel == APP_PARAMETERS.LOAD_CHANNEL){ |
tpadovani | 22:b66e36356dd4 | 70 | ledLoad = LED_OFF; |
tpadovani | 22:b66e36356dd4 | 71 | } |
tpadovani | 7:fe8e827f4d1b | 72 | return SENSOR_SEM_FORNECIMENTO; |
tpadovani | 7:fe8e827f4d1b | 73 | } |
tpadovani | 5:1bc98277c257 | 74 | } |
tpadovani | 8:e8d86c66283c | 75 | |
tpadovani | 8:e8d86c66283c | 76 | void readSample(){ |
tpadovani | 8:e8d86c66283c | 77 | sample[currentSample++] = voltage[currentChannel]; |
tpadovani | 8:e8d86c66283c | 78 | if(currentSample == DEFAULT_SAMPLES){ |
tpadovani | 8:e8d86c66283c | 79 | finished = true; |
tpadovani | 8:e8d86c66283c | 80 | samplesTimeout.detach(); |
tpadovani | 8:e8d86c66283c | 81 | tickerSamples.detach(); |
tpadovani | 8:e8d86c66283c | 82 | } |
tpadovani | 8:e8d86c66283c | 83 | } |
tpadovani | 8:e8d86c66283c | 84 | |
tpadovani | 8:e8d86c66283c | 85 | void timeoutReadingSamples(){ |
tpadovani | 8:e8d86c66283c | 86 | tickerSamples.detach(); |
tpadovani | 8:e8d86c66283c | 87 | timeout = true; |
tpadovani | 8:e8d86c66283c | 88 | } |
tpadovani | 8:e8d86c66283c | 89 | |
tpadovani | 22:b66e36356dd4 | 90 | float calculateRMS(float angCoef, float linCoef){ |
tpadovani | 8:e8d86c66283c | 91 | float rms = 0; |
tpadovani | 8:e8d86c66283c | 92 | for(int i=0; i < DEFAULT_SAMPLES; i++){ |
tpadovani | 22:b66e36356dd4 | 93 | sample[i] = abs(sample[i]*angCoef + linCoef); |
tpadovani | 8:e8d86c66283c | 94 | rms += sample[i]*sample[i]; |
tpadovani | 8:e8d86c66283c | 95 | } |
tpadovani | 9:e501499af4ef | 96 | rms = rms / DEFAULT_SAMPLES; |
tpadovani | 8:e8d86c66283c | 97 | return sqrt(rms); |
tpadovani | 8:e8d86c66283c | 98 | } |