/* References: * https://lastminuteengineers.com/multiple-ds18b20-arduino-tutorial/ */ #include "ArduinoJson.h" #include #include // Data wire is conntec to the Arduino digital pin 4 #define ONE_WIRE_BUS 2 #define MOSFET1 3 #define MOSFET2 4 // Setup a oneWire instance to communicate with any OneWire devices OneWire oneWire(ONE_WIRE_BUS); // Pass our oneWire reference to Dallas Temperature sensor DallasTemperature sensors(&oneWire); DeviceAddress Thermometer; int deviceCount = 0; int analogPin = 2; int data = 0; char userInput; char* commandVer; // temperature values in °C float tempSensor1; float tempSensor2; // HighTemp - when to turn on the power float HTemp1 = 12.0; float HTemp2 = 16.0; // LowTemp - when to turn of the power float LTemp1 = 10.0; float LTemp2 = 14.0; bool fetState1; bool fetState2; uint8_t addrSensor1[8] = { 0x28, 0xFF, 0x64, 0x1F, 0x79, 0xD1, 0xB1, 0x75 }; uint8_t addrSensor2[8] = { 0x28, 0xFF, 0x64, 0x1F, 0x79, 0xD7, 0xDA, 0x9A }; /* // countLowTemp int cLTemp1 = 0; int cLTemp2 = 0; // countHighTemp int cHTemp1 = 0; int cHTemp2 = 0; // loops to count temp before switching state int cTemp = 5; */ void setup() { // put your setup code here, to run once: pinMode(MOSFET1, OUTPUT); pinMode(MOSFET2, OUTPUT); Serial.begin(9600); sensors.begin(); // little welcome //Serial.println(".:: arduino-fridge-powercontrol by DeltaLima, 2023 ::."); // locate devices on the bus /*Serial.println("Locating devices..."); Serial.print("Found "); deviceCount = sensors.getDeviceCount(); Serial.print(deviceCount, DEC); Serial.println(" devices."); Serial.println(""); Serial.println("Printing addresses..."); for (int i = 0; i < deviceCount; i++) { Serial.print("Sensor "); Serial.print(i+1); Serial.print(" : "); sensors.getAddress(Thermometer, i); printAddress(Thermometer); } Serial.println(""); Serial.print("MOSFET1 start temp: "); Serial.print(HTemp1); Serial.print("°C, stop temp: "); Serial.print(LTemp1); Serial.println("°C"); Serial.print("MOSFET2 start temp: "); Serial.print(HTemp2); Serial.print("°C, stop temp: "); Serial.print(LTemp2); Serial.println("°C"); */ } void loop() { // put your main code here, to run repeatedly: //if(Serial.available()>0) { sensors.requestTemperatures(); tempSensor1 = sensors.getTempC(addrSensor1); if(tempSensor1 > HTemp1) { digitalWrite(MOSFET1, HIGH); fetState1 = 1; } else if(tempSensor1 < LTemp1) { digitalWrite(MOSFET1, LOW); fetState1 = 0; } tempSensor2 = sensors.getTempC(addrSensor2); if(tempSensor2 > HTemp2) { digitalWrite(MOSFET2, HIGH); fetState2 = 1; } else if(tempSensor1 < LTemp1) { digitalWrite(MOSFET2, LOW); fetState2 = 0; } /* Serial.print("Sens 1 "); Serial.print("Celsius temperature: "); // Why "byIndex"? You can have more than one IC on the same bus. 0 refers to the first IC on the wire Serial.print(sensors.getTempC(addrSensor1)); Serial.print(" - Fahrenheit temperature: "); Serial.print(sensors.getTempF(addrSensor1)); Serial.print(" - MOSFET1 Sate: "); Serial.println(fetState1); Serial.print("Sens 2 "); Serial.print("Celsius temperature: "); // Why "byIndex"? You can have more than one IC on the same bus. 0 refers to the first IC on the wire Serial.print(sensors.getTempC(addrSensor2)); Serial.print(" - Fahrenheit temperature: "); Serial.print(sensors.getTempF(addrSensor2)); Serial.print(" - MOSFET2 Sate: "); Serial.println(fetState2); */ StaticJsonDocument<96> jsonOut; //jsonOut["sensor"] = "1"; jsonOut[0]["temp"] = tempSensor1; jsonOut[0]["state"] = fetState1; //jsonOut["sensor"] = "2"; jsonOut[1]["temp"] = tempSensor2; jsonOut[1]["state"] = fetState2; serializeJson(jsonOut, Serial); Serial.println(); /* digitalWrite(MOSFET, HIGH); delay(2000); digitalWrite(MOSFET, LOW); delay(2000); */ delay(1000); // } } void printAddress(DeviceAddress deviceAddress) { for (uint8_t i = 0; i < 8; i++) { Serial.print("0x"); if (deviceAddress[i] < 0x10) Serial.print("0"); Serial.print(deviceAddress[i], HEX); if (i < 7) Serial.print(", "); } Serial.println(""); }