#include <Wire.h>
#include <EEPROM.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Thermistor.h>
#include <NTC_Thermistor.h>
#include <AverageThermistor.h>

Adafruit_SSD1306 display(128, 64, &Wire, -1);

#define SENSOR_PIN             A0
#define REFERENCE_RESISTANCE   10000
#define NOMINAL_RESISTANCE     10000
#define NOMINAL_TEMPERATURE    25
#define B_VALUE                3680
#define READINGS_NUMBER 10
#define DELAY_TIME 10
Thermistor* thermistor = NULL;

void setup() {
  Serial.begin(9600);
  Thermistor* originThermistor = new NTC_Thermistor(SENSOR_PIN,REFERENCE_RESISTANCE,NOMINAL_RESISTANCE,NOMINAL_TEMPERATURE,B_VALUE);
  thermistor = new AverageThermistor(originThermistor,READINGS_NUMBER,DELAY_TIME);
  
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) 
  {
    Serial.println("No se pudo detectar la pantalla OLED. Conecte la pantalla y reinicie el programa.");
    while (1);
  }
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(5,0); display.println("Menu:");
  display.setCursor(0,10);display.println("Temperatura");
  display.display();
  Serial.println("Menu:");
}

void loop() {
  
  const double celsius = thermistor->readCelsius();
  const double fahrenheit = thermistor->readFahrenheit();
  
  if (Serial.available()>0) {
   int opcion = Serial.read() - '0';
    display.clearDisplay();
    display.setTextSize(1);
    display.setTextColor(WHITE);
    display.setCursor(5,0); display.println("Inserte numero:"); 
    display.setCursor(0,10); display.println("1. Celsius");
    display.setCursor(0,20); display.println("2. Fahrenheit");
   // display.display();
  
  switch (opcion) 
    {
      case 1:
        display.setCursor(0,30); display.print("Temperatura: ");
        display.print(celsius); display.print(" C");
        Serial.print(celsius); Serial.println(" C");
        break;
      case 2:
        display.setCursor(0,30); display.print("Temperatura: ");
        display.print(fahrenheit); display.print(" F");
        Serial.print(fahrenheit); Serial.println(" F");
        
        break;
        
    }
     display.display();
  }
}