DX coldwatch — ESP32-S3 simulation

DS18B20 temperature sensor connected to ESP32-S3, missing pull-up resistor on 1-Wire bus.

An interactive ESP32-S3 circuit simulation you can run free in your browser on Velxio, by danielolasunkami9.

Components

Sketch code

#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#define NTC_PIN 7
#define increase 39
#define decrease 37
#define power 38
#define coolingpin 14
#define doorpin 12
int page=0;
float offsettemp=0;
bool automode= false;
bool settargetmode=false;
bool cooling=false;
bool doorstate=false;
bool powestate= true;
bool voltageavailable;
float target_temp=0;
int previousincreasestate=LOW;
int previuosdecreasestate=LOW;
int previouspowerstate=LOW;
int differential=3;
const int pinAc = 1;        // A1
const float offsetV = 0.15; // output with no line voltage
const float voltsPerVolt = 0.009;
LiquidCrystal_I2C lcd(0x27, 16, 2);

float TEMPERATURE(){
   int raw = analogRead(NTC_PIN);
  float v = raw * 3.3 / 4095.0;
  float r = 10000.0 * v / (3.3 - v);
  float tC = 1.0 / (1.0/298.15 + log(r/10000.0)/3950.0) - 273.15;
  return tC;
}
 void buttons() {

  automode = digitalRead(36);
  int currenpowerstate=digitalRead(power);


  int currentincreasestate = digitalRead(increase);
  int currentdecreasestate = digitalRead(decrease);

  // =========================
  // MONITOR MODE
  // =========================
  if (!automode) {

    if (currentincreasestate == HIGH &&
        previousincreasestate == LOW &&
        page < 3) {

      page++;
    }

    if (currentdecreasestate == HIGH &&
        previuosdecreasestate == LOW &&
        page > 0) {

      page--;
    }
    if (currenpowerstate == HIGH &&
    previouspowerstate == LOW) {

  powestate = !powestate;

  if (!powestate) {
    coolstate(false);
  }
}
  }

  // =========================
  // AUTO MODE
  // =========================
  else {

    if (settargetmode &&currentincreasestate == HIGH &&
        previousincreasestate == LOW &&
        offsettemp < 8) {

      offsettemp++;
    }

    if (settargetmode&&currentdecreasestate == HIGH &&
        previuosdecreasestate == LOW &&
        offsettemp > -10) {
          offsettemp--;
      }                    

      
     if (currenpowerstate == HIGH &&
    previouspowerstate == LOW) {

    if (!settargetmode) {

        settargetmode = true;

    } else {

        target_temp = TEMPERATURE() + offsettemp;
        offsettemp = 0;
        settargetmode = false;
    }
}
               

      
    
    
  }

  // Remember the current button states
  previousincreasestate = currentincreasestate;
  previuosdecreasestate = currentdecreasestate;
  previouspowerstate=currenpowerstate;
}
void coolstate(bool on){
    cooling=on;
   digitalWrite(coolingpin, on ? HIGH : LOW);
}
void controllogic() {

  if (!powestate) {
    coolstate(false);
    return;
  }

  float currentTemp = TEMPERATURE();

  if (!cooling &&
      currentTemp >= target_temp + differential) {
    coolstate(true);
  }
  else if (cooling &&
           currentTemp <= target_temp - differential) {
    coolstate(false);
  }
}
float voltage(){
  long sum = 0;
  for (int i = 0; i < 32; i++) sum += analogRead(pinAc);
  float pin = (sum / 32.0f) * 3.3f / 4095.0f;
  float line = (pin - offsetV) / voltsP

More projects by danielolasunkami9