LM35

Dependents:   HealthCare_Graduation

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?

UserRevisionLine numberNew 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 }