CCCPaste

Aa rev_02

/********* Pleasedontcode.com **********

	Pleasedontcode thanks you for automatic code generation! Enjoy your code!

	- Terms and Conditions:
	You have a non-exclusive, revocable, worldwide, royalty-free license
	for personal and commercial use. Attribution is optional; modifications
	are allowed, but you're responsible for code maintenance. We're not
	liable for any loss or damage. For full terms,
	please visit pleasedontcode.com/termsandconditions.

	- Project: Aa
	- Source Code compiled for: Arduino Nano
	- Source Code created on: 2023-12-04 14:25:51
	- Source Code generated by: Neeraj

********* Pleasedontcode.com **********/

/****** SYSTEM REQUIREMENTS *****/
/****** SYSTEM REQUIREMENT 1 *****/
	/* Lcd show current temperature and set temperature */
	/* set button to select set temperature for desired */
	/* temperature by up down button and led work on set */
	/* temperature and off Inc temperature */
/****** SYSTEM REQUIREMENT 2 *****/
	/* Lcd show current temperature */
/****** END SYSTEM REQUIREMENTS *****/

/****** DEFINITION OF LIBRARIES *****/
#include 
#include 
#include 
#include 

/**
 * FUNCTION PROTOTYPES
 */
void setup(void);
void loop(void);
void setTemperatureButtonInterrupt(void);
float setTemperatureButtonLogic(float currentTemp);
void displayTemperature(float currentTemp, float targetTemp);

/**
 * DEFINITION OF DIGITAL INPUT PINS
 */
const uint8_t Temp_DS18B20_DQ_PIN_D2 = 2;
const uint8_t Set_Temperature_Button_PIN = 3;

/**
 * DEFINITION OF I2C PINS
 */
const uint8_t Lcd_LCD1602I2C_I2C_PIN_SDA_A4 = A4;
const uint8_t Lcd_LCD1602I2C_I2C_PIN_SCL_A5 = A5;
const uint8_t Lcd_LCD1602I2C_I2C_SLAVE_ADDRESS = 0x39;

/**
 * GLOBAL VARIABLES
 */
float currentTemperature = 0;
float setTemperature = 25;
bool isSetMode = false;

/**
 * DEFINITION OF LIBRARIES CLASS INSTANCES
 */
DS18B20 tempSensor(Temp_DS18B20_DQ_PIN_D2);
LiquidCrystal_I2C lcd(Lcd_LCD1602I2C_I2C_SLAVE_ADDRESS, 16, 2);

void setup(void)
{
    // Initialize digital input pins
    pinMode(Temp_DS18B20_DQ_PIN_D2, INPUT);
    pinMode(Set_Temperature_Button_PIN, INPUT_PULLUP);
    
    // Begin LCD communication and display initial message
    lcd.begin(16, 2);
    lcd.backlight();
    lcd.print("DS18B20 Test");
  
    // Attach interrupt to the set temperature button pin
    attachInterrupt(digitalPinToInterrupt(Set_Temperature_Button_PIN), setTemperatureButtonInterrupt, FALLING);
}

void setTemperatureButtonInterrupt(void)
{
  // Toggle the set temperature mode
  isSetMode = !isSetMode;
  
  if (isSetMode)
  {
      lcd.setCursor(0, 1);
      lcd.print("SET MODE       ");   // Update LCD to show set mode
  }
  else
  {
      lcd.clear();                  // Clear the LCD
  }
}

void loop(void)
{
    if (isSetMode)
    {
        setTemperature = setTemperatureButtonLogic(setTemperature); // Handle set temperature button logic when in set mode
    }
        
    displayTemperature(currentTemperature, setTemperature); // Wait for temperature updates
  
    delay(1000);
}


float setTemperatureButtonLogic(float currentTemp)
{
    // Increment or decrement the set temperature based on the affected button press
    if (digitalRead(Set_Temperature_Button_PIN) == HIGH)
    {
        setTemperature++;
         if (setTemperature >= 50)   // Restrict the maximum set temperature to 50
        {
            setTemperature = 50;
        }
    }
    else
    {
        setTemperature--;
        if (setTemperature <= 0)    // Restrict the minimum set temperature to 0
        {
            setTemperature = 0;
        }
    }
    
    return setTemperature;
}


void displayTemperature(float currentTemp, float targetTemp)
{
    lcd.setCursor(0, 0);
    lcd.print("Current: ");
    lcd.print(currentTemp);
    lcd.write(223);                    // Display degree symbol
    lcd.print("C");
    lcd.setCursor(0, 1);
    lcd.print("Target : ");
    lcd.print(targetTemp);
    lcd.write(223);                   // Display degree symbol
    lcd.print("C");
}