/*
*
* Increase_Decrease_PERCENTAGE.ino
*
*
* https://wokwi.com/projects/417249831108067329
*
*
*/
/*
void PRCNTG_Calc(uint16_t Xadc, uint16_t Xsldr, int16_t &outValue16, float &flt_Prcntg) {
//
// https://www.omnicalculator.com/it/matematica/incremento-percentuale
//
// < PERCENTAGE > Increase / Decrease values
//
// Xfinal (Xadc) -----> LDR [ADC] value --> Gstct_SLIDER.AdcLDRval16
// Xinitial (Xsldr) --> SLIDER value -----> Gstct_SLIDER.SLIDERpos16
//
// (((Xadc-Xsldr)/Xsldr)*100) ==> % Increase [Xadc value greater than Xsldr]
// (((Xsldr-Xadc)/Xsldr)*100) <== % Decrease [Xadc value less than Xsldr]
//
flt_Prcntg = (((float)Xadc-(float)Xsldr)/(float)Xsldr);
outValue16 = Xsldr + ((float)Xsldr * flt_Prcntg);
//
} // PRCNTG_Calc()
*/
//
struct stct_DS18B20_t {
//
const float InsdLOWalarm = 6.0F; // Inside_Sensor LOW TEMPERATURE alarm
const float InsdHIGHalarm = 49.0F; // Inside Sensor HIGH Temperature alarm
const float OtsdLOWalarm = -5.0F; // Outside_Sensor LOW TEMPERATURE alarm
const float Otsd_HighWrng = 45.0F; // Outside_Sensor FIRST HIGH Temperature alarm
const float OtsdHIGHalarm = 55.0F; // Outside_Sensor SECOND HIGH Temperature alarm
//
} Gstct_DS18B20;
//
bool Gstct_GLBL_blConditionsAreChanged = false;
float chk_Temperature(bool INSIDEtmprtr, float fl_tempC) {
//
//
static float fl_prvsInTmp = -99.9F, fl_prvsOutTmp = -99.9F, fl_Trhshld = 1.99F;
uint8_t mssgCODE8 = 0;
//
if (fl_tempC > -30.0) {
// NOTE: [[ (> -30.0) means LESS NEGATIVE temperature { -29.99, -19.31, -9.07 etc.} ]]
//
mssgCODE8 = 0;
// check temperatures range
//
// 41 Gstct_DS18B20.InsdHIGHalarm -> 49.0 -> (2816)=> 'WARNING_HIGH_INSIDE_temperature_required_INSPECTION'
// 42 Gstct_DS18B20.InsdLOWalarm -> 6.0 -> (2816)=> 'WARNING_LOW_INSIDE_temperature_Please_Keep_it_Checked'
//
if (INSIDEtmprtr) {
// INSIDE Temperatures
//
if (fl_tempC >= Gstct_DS18B20.InsdHIGHalarm) {
fl_prvsInTmp = fl_tempC;
mssgCODE8 = 41; // 'WARNING_HIGH_INSIDE_temperature_required_INSPECTION'
} else if (fl_tempC <= Gstct_DS18B20.InsdLOWalarm) {
fl_prvsInTmp = fl_tempC;
mssgCODE8 = 42; // 'WARNING_LOW_INSIDE_temperature_Please_Keep_it_Checked'
} else if ((fl_tempC > (fl_prvsInTmp + fl_Trhshld)) || (fl_tempC < (fl_prvsInTmp - fl_Trhshld))) {
// the measured variation is greater than +/- <fl_Trhshld> compared to the previous value
fl_prvsInTmp = fl_tempC;
mssgCODE8 = 43; // INSIDE operating temperatures range [6.01C to 48.99C]
// Temperature value has changed: enable log message
Gstct_GLBL_blConditionsAreChanged = true;
//
}// if-else
//
} else {
// OUTSIDE Temperatures
//
// 37 Gstct_DS18B20.Otsd_HighWrng -> 45.0 -> (6407)=> 'Alarm_HIGH_OUTSIDE_Temperature_*_Please_Keep_it_Checked_*'
// 38 Gstct_DS18B20.OtsdHIGHalarm -> 55.0 -> (6408)=> 'ALARM_HOT_OUTSIDE_REQUIRED_IMMEDIATE_VISUAL_INSPECTION_HOT'
// 39 Gstct_DS18B20.OtsdLOWalarm -> -5.0 -> (6409)=> 'Alarm_LOW_OUTSIDE_Temperature_*_Please_Keep_it_Checked_*'
//
// check temperatures range
if (fl_tempC >= Gstct_DS18B20.OtsdHIGHalarm) {
fl_prvsOutTmp = fl_tempC;
mssgCODE8 = 38; // 'ALARM_HOT_OUTSIDE_REQUIRED_IMMEDIATE_VISUAL_INSPECTION_HOT'
} else if (fl_tempC >= Gstct_DS18B20.Otsd_HighWrng) {
fl_prvsOutTmp = fl_tempC;
mssgCODE8 = 37; // 'Alarm_HIGH_OUTSIDE_Temperature_Please_Keep_it_Checked'
} else if (fl_tempC <= Gstct_DS18B20.OtsdLOWalarm) {
fl_prvsOutTmp = fl_tempC;
mssgCODE8 = 39; // 'Alarm_LOW_OUTSIDE_Temperature_Please_Keep_it_Checked'
} else if ((fl_tempC > (fl_prvsOutTmp + fl_Trhshld)) || (fl_tempC < (fl_prvsOutTmp - fl_Trhshld))) {
// the measured variation is greater than +/- <fl_Trhshld> compared to the previous value
fl_prvsOutTmp = fl_tempC;
mssgCODE8 = 40; // OUTSIDE operating temperatures range [-4.99 to 44.99C]
// Temperature value has changed: enable log message
Gstct_GLBL_blConditionsAreChanged = true;
//
}// if-else
//
}// if-else
//
if (mssgCODE8 > 36) {
//
switch (mssgCODE8) {
case 37:
Serial.printf("*** chk_Temperature(37) - %s", "(6407) Alarm_HIGH_OUTSIDE_Temperature_*_Please_Keep_it_Checked_*");
break;
case 38:
Serial.printf("*** chk_Temperature(38) - %s", "(6408) ALARM_HOT_OUTSIDE_REQUIRED_IMMEDIATE_VISUAL_INSPECTION_HOT");
break;
case 39:
Serial.printf("*** chk_Temperature(39) - %s", "(6409) Alarm_LOW_OUTSIDE_Temperature_*_Please_Keep_it_Checked_*");
break;
case 40:
Serial.printf("*** chk_Temperature(40) - %s", "(2803) OUTSIDE_temperature");
break;
case 41:
Serial.printf("*** chk_Temperature(41) - %s", "(2816) WARNING_HIGH_INSIDE_temperature_required_INSPECTION");
break;
case 42:
Serial.printf("*** chk_Temperature(42) - %s", "(2816) WARNING_LOW_INSIDE_temperature_Please_Keep_it_Checked");
break;
case 43:
Serial.printf("*** chk_Temperature(43) - %s", "(2816) INSIDE_temperature");
break;
default:
//
Serial.printf("*** chk_Temperature(default) - mssgCODE8 = %d", mssgCODE8);
//
break;
} // switch
//
} else {
// reading is invalid
fl_tempC = -99.9;
Serial.printf("*** chk_Temperature(-ELSE-) - mssgCODE8 = %d", mssgCODE8);
//
} // if-else
//
} // if-else ( > -30 C)...
//
Serial.printf(", fl_tempC=>%f, fl_prvsInTmp=>%f, fl_prvsOutTmp=>%f\n", fl_tempC, fl_prvsInTmp, fl_prvsOutTmp );
//Serial.printf("\n*** chk_Temperature(OUT) - mssgCODE8 = %d, fl_tempC=>%f, fl_prvsInTmp=>%f, fl_prvsOutTmp=>%f\n", mssgCODE8, fl_tempC, fl_prvsInTmp, fl_prvsOutTmp );
//
return fl_tempC;
//
} // chk_Temperature()
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
//
/*
uint16_t Xadc, Xsldr;
int16_t outValue16;
float flt_Prcntg;
//
Xadc = 700, Xsldr = 750;
PRCNTG_Calc(Xadc, Xsldr, outValue16, flt_Prcntg);
//
Serial.printf("%s -> %.4f", "flt_Prcntg [<]", flt_Prcntg);
Serial.printf("%s -> %d\n", "outValue16 [<]", outValue16);
//
Xadc = 750, Xsldr = 750;
PRCNTG_Calc(Xadc, Xsldr, outValue16, flt_Prcntg);
//
Serial.printf("%s -> %.4f", "flt_Prcntg [=]", flt_Prcntg);
Serial.printf("%s -> %d\n", "outValue16 [=]", outValue16);
//
Xadc = 800, Xsldr = 750;
PRCNTG_Calc(Xadc, Xsldr, outValue16, flt_Prcntg);
//
Serial.printf("%s -> %.4f", "flt_Prcntg [>]", flt_Prcntg);
Serial.printf("%s -> %d\n", "outValue16 [>]", outValue16);
*/
//
} // setup()
void loop() {
//
static float fl_tempC = -39.45F;
static bool INSIDEtmprtr = true;
//
fl_tempC += 1.0;
//
chk_Temperature(INSIDEtmprtr, fl_tempC);
//
if (fl_tempC > 128.00F) {
fl_tempC = -39.45F;
INSIDEtmprtr = !INSIDEtmprtr;
} // if
//
delay(75);
//
} // loop()
/*
Serial Monitor Output:
Hello, ESP32!
*/