//This wonderful ChatGPT Code
#include <OneWire.h>
#include <DallasTemperature.h>
#include "TM1637Display.h"
// Data wire for DS18B20 is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 5
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// TM1637Display setup
#define CLK 11 // Define the CLK pin of TM1637
#define DIO 12 // Define the DIO pin of TM1637
TM1637Display display(CLK, DIO);
// Custom segment code for 'C' and 'F'
uint8_t segC[] = {0x39};
uint8_t segF[] = {0x71};
// Button setup
#define BUTTON_PIN 6
bool prevButtonState = LOW;
bool currentButtonState;
bool showCelsius = true; // By default, show temperature in Celsius
void setup(void)
{
sensors.begin();
pinMode(BUTTON_PIN, INPUT_PULLUP);
display.setBrightness(0x0f);
}
void loop(void)
{
sensors.requestTemperatures();
float temperature = sensors.getTempCByIndex(0);
currentButtonState = digitalRead(BUTTON_PIN);
if (currentButtonState == LOW && prevButtonState == HIGH) {
showCelsius = !showCelsius; // Toggle the temperature scale
delay(50); // Debounce
}
prevButtonState = currentButtonState;
if (!showCelsius) {
temperature = (temperature * 9.0) / 5.0 + 32.0;
}
displayTemperature(temperature, showCelsius);
delay(500);
}
void displayTemperature(float temperature, bool inCelsius)
{
int16_t dispTemperature = round(temperature * 100);
uint8_t segmentData[4];
segmentData[0] = display.encodeDigit((dispTemperature / 1000) % 10);
segmentData[1] = display.encodeDigit((dispTemperature / 100) % 10);
segmentData[2] = display.encodeDigit((dispTemperature / 10) % 10);
segmentData[3] = inCelsius ? segC[0] : segF[0];
display.setSegments(segmentData);
}