#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

const int thermistorPin = A1;
const int seriesResistor = 10000;
const float nominalResistance = 1000;
const float nominalTemperature = 25;
const float bCoefficient = 3950;
const int adcMax = 1023;

int vtemperature;
int state;

void setup() {
  pinMode(12, INPUT_PULLUP);
  Serial.begin(9600);
  pinMode(A2, INPUT);
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
  display.clearDisplay();
}

void loop() {
  int adcValue = analogRead(thermistorPin);
  float resistance = seriesResistor * (adcMax / (float)adcValue - 1);
  int temperature = 1 / (log(resistance / nominalResistance) / bCoefficient + 1 / (nominalTemperature + 273.15)) - 273.15;
  temperature = temperature * -1;
  
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  
  int x;
  int k;

  x = analogRead(A2);
  //Serial.println(x);
  int target = map(x, 0, 870, 27, 50);

  if(digitalRead(12) == LOW) {
    if(k == 0) {
      state++;
      k = 1;
}}

    if(state > 1){
      state = 0;
    }

 if(digitalRead(12) == HIGH) {
    k = 0;
  }


  Serial.println(state);

if(state == 0){

  if(temperature < target){
    digitalWrite(3, HIGH);
  }
  if(temperature >= target){
    digitalWrite(3, LOW);
  }
}
if(state == 1){
  analogWrite(10, 180);
  digitalWrite(3, LOW);
}

  int red;
  int green;
  int blue;

  red = map(temperature, 27, target, 0, 200);
  blue = 201 - red;

  display.setCursor(10, 10);
  display.setTextSize(2);
  display.print("Set :");
  display.print(target);
  display.print("*C");
  display.setCursor(28, 30);
  display.print("  ");
  display.print(temperature);
  display.println(" C");
 

  red = map(temperature, 23, target, 5, 200);
  green = 200 - red;
  if(green < 0){
    green = 0;
  }
if(state == 0){
  digitalWrite(10, LOW);
  analogWrite(9, red);
  analogWrite(11, blue);
  display.setCursor(37, 48);
  display.print("On");
}
if(state == 1){
  digitalWrite(11, LOW);
    display.setCursor(34, 48);
    display.print("Off");
}
  display.display();
  delay(100);
}
