// include the required libraries
#include <SevSeg.h>
// define the pins for the 7-segment display
#define digit1 2
#define digit2 3
#define digit3 4
#define digit4 5
#define segA 6
#define segB 7
#define segC 8
#define segD 9
#define segE 10
#define segF 11
#define segG 12
#define segDP 13
// define the pins for the LM35 temperature sensor
#define tempPin A0
// define the pins for the buttons
#define upButton A1
#define downButton A2
// define the setpoint temperature
int setpoint = 25;
// initialize the 7-segment display
SevSeg sevseg;
void setup() {
  // set the pins for the buttons as inputs
  pinMode(upButton, INPUT);
  pinMode(downButton, INPUT);
  // initialize the 7-segment display
  byte numDigits = 4;
  byte digitPins[] = {digit1, digit2, digit3, digit4};
  byte segmentPins[] = {segA, segB, segC, segD, segE, segF, segG, segDP};
  bool resistorsOnSegments = true;
  bool updateWithDelays = false;
  byte hardwareConfig = COMMON_ANODE;
  sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays);
}
void loop() {
  // read the temperature from the LM35 sensor
  int tempReading = analogRead(tempPin);
  float tempC = (tempReading * 5.0) / 1024.0 * 100.0;
  // check if the up button is pressed
  if (digitalRead(upButton) == HIGH) {
    setpoint++;
  }
  // check if the down button is pressed
  if (digitalRead(downButton) == HIGH) {
    setpoint--;
  }
  // display the temperature and setpoint on the 7-segment display
  int tempDisplay = (int) tempC;
  int setpointDisplay = setpoint;
  sevseg.setNumber(tempDisplay, 1);
  sevseg.setNumber(setpointDisplay, 2);
  sevseg.refreshDisplay();
  // wait for a short time before reading the temperature again
  delay(100);
}