LM35
Dependents: HealthCare_Graduation
LM35.cpp@0:813970f650f3, 2018-06-18 (annotated)
- Committer:
- DuyLionTran
- Date:
- Mon Jun 18 07:38:21 2018 +0000
- Revision:
- 0:813970f650f3
version 1.3.7 04-06-2018 Some minor bugs fixed
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
DuyLionTran | 0:813970f650f3 | 1 | #include "LM35.h" |
DuyLionTran | 0:813970f650f3 | 2 | |
DuyLionTran | 0:813970f650f3 | 3 | LM35Therm::LM35Therm(PinName analogPin, float compensation) { |
DuyLionTran | 0:813970f650f3 | 4 | _pAin = new AnalogIn(analogPin); |
DuyLionTran | 0:813970f650f3 | 5 | _calibrate = compensation; |
DuyLionTran | 0:813970f650f3 | 6 | _isFirstRead = true; |
DuyLionTran | 0:813970f650f3 | 7 | } |
DuyLionTran | 0:813970f650f3 | 8 | |
DuyLionTran | 0:813970f650f3 | 9 | LM35Therm::~LM35Therm() { |
DuyLionTran | 0:813970f650f3 | 10 | delete _pAin; |
DuyLionTran | 0:813970f650f3 | 11 | } |
DuyLionTran | 0:813970f650f3 | 12 | |
DuyLionTran | 0:813970f650f3 | 13 | void LM35Therm::getAverageValue() { |
DuyLionTran | 0:813970f650f3 | 14 | _sumAnalog = 0; |
DuyLionTran | 0:813970f650f3 | 15 | |
DuyLionTran | 0:813970f650f3 | 16 | for (uint8_t i = 0; i < SAMPLE_COUNT; i++) { |
DuyLionTran | 0:813970f650f3 | 17 | analogSamples[i] = _pAin->read(); |
DuyLionTran | 0:813970f650f3 | 18 | } |
DuyLionTran | 0:813970f650f3 | 19 | |
DuyLionTran | 0:813970f650f3 | 20 | for (uint8_t i = 0; i < SAMPLE_COUNT; i++) { |
DuyLionTran | 0:813970f650f3 | 21 | _sumAnalog = _sumAnalog + analogSamples[i]; |
DuyLionTran | 0:813970f650f3 | 22 | } |
DuyLionTran | 0:813970f650f3 | 23 | |
DuyLionTran | 0:813970f650f3 | 24 | averageAnalog = _sumAnalog / SAMPLE_COUNT; |
DuyLionTran | 0:813970f650f3 | 25 | _sumAnalog = 0; |
DuyLionTran | 0:813970f650f3 | 26 | |
DuyLionTran | 0:813970f650f3 | 27 | if (_isFirstRead) { |
DuyLionTran | 0:813970f650f3 | 28 | for (uint8_t i = 0; i < SAMPLE_COUNT; i++) { |
DuyLionTran | 0:813970f650f3 | 29 | analogAverageSamples[i] = averageAnalog; |
DuyLionTran | 0:813970f650f3 | 30 | _sumAnalog = _sumAnalog + analogAverageSamples[i]; |
DuyLionTran | 0:813970f650f3 | 31 | } |
DuyLionTran | 0:813970f650f3 | 32 | filtedAvgAnalog = _sumAnalog / SAMPLE_COUNT; |
DuyLionTran | 0:813970f650f3 | 33 | _isFirstRead = false; |
DuyLionTran | 0:813970f650f3 | 34 | } |
DuyLionTran | 0:813970f650f3 | 35 | else { |
DuyLionTran | 0:813970f650f3 | 36 | for (uint8_t i = 0; i < SAMPLE_COUNT - 1; i++) { |
DuyLionTran | 0:813970f650f3 | 37 | analogAverageSamples[i] = analogAverageSamples[i]; |
DuyLionTran | 0:813970f650f3 | 38 | _sumAnalog = _sumAnalog + analogAverageSamples[i]; |
DuyLionTran | 0:813970f650f3 | 39 | } |
DuyLionTran | 0:813970f650f3 | 40 | analogAverageSamples[SAMPLE_COUNT - 1] = averageAnalog; |
DuyLionTran | 0:813970f650f3 | 41 | _sumAnalog = _sumAnalog + analogAverageSamples[SAMPLE_COUNT - 1]; |
DuyLionTran | 0:813970f650f3 | 42 | } |
DuyLionTran | 0:813970f650f3 | 43 | filtedAvgAnalog = _sumAnalog / SAMPLE_COUNT; |
DuyLionTran | 0:813970f650f3 | 44 | } |
DuyLionTran | 0:813970f650f3 | 45 | |
DuyLionTran | 0:813970f650f3 | 46 | void LM35Therm::setCompensation(float newCompensation) { |
DuyLionTran | 0:813970f650f3 | 47 | _calibrate = newCompensation; |
DuyLionTran | 0:813970f650f3 | 48 | } |
DuyLionTran | 0:813970f650f3 | 49 | |
DuyLionTran | 0:813970f650f3 | 50 | float LM35Therm::LM35Therm::getTempInC() { |
DuyLionTran | 0:813970f650f3 | 51 | _readVoltage = filtedAvgAnalog * 3.3; |
DuyLionTran | 0:813970f650f3 | 52 | float avgVolt = filtedAvgAnalog * _calibrate * 1000.0; |
DuyLionTran | 0:813970f650f3 | 53 | tempInC = avgVolt; |
DuyLionTran | 0:813970f650f3 | 54 | return tempInC; |
DuyLionTran | 0:813970f650f3 | 55 | } |
DuyLionTran | 0:813970f650f3 | 56 | |
DuyLionTran | 0:813970f650f3 | 57 | float LM35Therm::LM35Therm::getTempInF() { |
DuyLionTran | 0:813970f650f3 | 58 | tempInF = (9.0 * tempInC)/5.0 + 32.0; |
DuyLionTran | 0:813970f650f3 | 59 | return tempInF; |
DuyLionTran | 0:813970f650f3 | 60 | } |