#include <GyverNTC.h>
#include <GyverOLED.h>
#include <math.h>
#include <EasyBuzzer.h>
//#define USE_MICRO_WIRE
GyverOLED<SSD1306_128x64, OLED_BUFFER> oled;
//GyverOLED<SSD1306_128x64, OLED_NO_BUFFER> oled;
unsigned char xmax=128;          unsigned char ymax=62;                                   
unsigned char xcenter= 126;      unsigned char xcenter2= 2;                            
unsigned char ycenter=ymax/2+10; unsigned char ycenter2=ymax/2+10;                        
unsigned char arc=ymax/2;        unsigned char arc2=ymax/2;                                                                               
#define RL1               3                   //RELÉ 1
#define RL2               5                   //RELÉ 2
#define buzzer            11                  //Buzzer
#define ni                A0                  //entrada nivel
#define te                A2                  //entrada termistor
#define vo                A1                  //entrada voltimetro
#define Vref              4.97                //voltaje referencia vcc
#define ADC               1024                // Multiplo de entrada ADC
#define NUM_SAMPLES       5                   // NUMERO DE MUESTRAS TOMADAS Voltaje
#define NUMSAMPLES        10                  // NUMERO DE MUESTRAS TOMADAS NTC
#define RV1               98700               //RV1=100000 ohms
#define RV2               9780                //RV2=10000 ohms
GyverNTC therm(te, 992, 3680, 25, 974); //pin, termistor R, termistor B, temperatura base, resistencia R
unsigned char sample_count=0, w,  m, m1A, m2A, p2, V;
int samples[NUMSAMPLES], sum=0, w2;
float p, p3, x1, x2, y1, y2, volt;   
unsigned long timer, timer2, timer3, timer4, timer5;
static bool RL1s, RL2s;

const uint8_t fondo[] PROGMEM = 
{

	0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x3F, 0xE0, 0xC0, 0x00, 0x00, 0xC0, 0xF0, 0x7F, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xC0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x21, 0x3F, 0x20, 0x00, 0x39, 0x25, 0x27, 0x00, 0x3F, 0x21, 0x3F, 0x00, 0x00, 0x01, 0x01, 0x03, 0x02, 0x02, 0x06, 0x04, 0x08, 0x10, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0F, 0x0F, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x18, 0x08, 0x04, 0x06, 0x02, 0x02, 0x03, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x14, 0x14, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x18, 0xF0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xF0, 0x1C, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0xF8, 0xF0, 0xF0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0xA0, 0x80, 0x00, 0xE0, 0x20, 0xE0, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x00, 0x00, 0xF0, 0xD0, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF0, 0xF0, 0xF8, 0xF8, 0xF8, 
	0x0F, 0x07, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x07, 0x03, 0x00, 0x07, 0x06, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x07, 0x0F, 0x0F, 0x0F, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x04, 0x00, 

};

const uint8_t logoford[] PROGMEM =  
{

	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xE0, 0xE0, 0xE0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xE0, 0xE0, 0xE0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xC0, 0xE0, 0x60, 0x60, 0x30, 0x30, 0x38, 0x98, 0x98, 0x9C, 0xCC, 0xCC, 0xCE, 0xE6, 0xE6, 0xE7, 0xE3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0x7C, 0x3C, 0x3C, 0xBC, 0x9C, 0x9C, 0xDC, 0xDC, 0xDE, 0xDE, 0xDE, 0xDE, 0xDE, 0xDE, 0xDE, 0x9E, 0x9E, 0x9E, 0x9E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x3E, 0x3C, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xE7, 0xE6, 0xE6, 0xCE, 0xCC, 0xCC, 0x9C, 0x98, 0x98, 0x38, 0x30, 0x30, 0x60, 0x60, 0xE0, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x80, 0xE0, 0xF0, 0x38, 0x1C, 0x8C, 0xCE, 0xE7, 0xF3, 0xF3, 0xF9, 0xF8, 0xFC, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x03, 0x00, 0x00, 0x3C, 0x7E, 0x7F, 0x3F, 0x3F, 0x9F, 0xC7, 0xF7, 0xFF, 0xFF, 0xFF, 0x7F, 0x1F, 0x8F, 0xC7, 0xF3, 0xF9, 0xFC, 0x1E, 0xCF, 0x0F, 0xDF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFC, 0xFC, 0xFC, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xFC, 0xFC, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x1F, 0x3F, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFC, 0xFC, 0xF9, 0xF1, 0xF3, 0xE7, 0xCE, 0x8C, 0x1C, 0x38, 0x70, 0xE0, 0x80, 0x00, 0x00, 
	0xF8, 0xFF, 0xDF, 0x01, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x3F, 0x9F, 0xDF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFC, 0xFC, 0xFC, 0xFC, 0xF6, 0xF3, 0x7B, 0x3B, 0x19, 0x01, 0xC1, 0xF0, 0xF8, 0xFC, 0xFD, 0x7D, 0x3C, 0x1C, 0x9C, 0xCC, 0xCA, 0xDF, 0xFF, 0x8F, 0x1F, 0x7F, 0xFF, 0x7F, 0x3F, 0x9F, 0x8F, 0x8F, 0x0F, 0x0F, 0x1F, 0x3F, 0x9F, 0x0F, 0x0F, 0x0F, 0x1F, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x1F, 0x9F, 0xCF, 0xCF, 0xCF, 0x8F, 0x1F, 0x7F, 0x1F, 0x0F, 0x03, 0xC0, 0xE0, 0xF8, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x70, 0x01, 0x8F, 0xFF, 0xF8, 
	0x00, 0x07, 0x1F, 0x3C, 0x78, 0xE1, 0xC7, 0x8F, 0x9F, 0x3F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC1, 0x00, 0x00, 0x1F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x1F, 0x0F, 0x0F, 0x07, 0x83, 0xC0, 0xF0, 0xF8, 0xFE, 0xFF, 0x7F, 0x3F, 0x8F, 0x03, 0x00, 0x78, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x1F, 0x81, 0xC0, 0xF1, 0xF8, 0xFE, 0x3F, 0x1F, 0x07, 0x81, 0xE0, 0xF8, 0xF0, 0xE0, 0xE7, 0xEF, 0xE6, 0xE6, 0xE7, 0x03, 0x01, 0x00, 0x78, 0xFE, 0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x01, 0x00, 0xC0, 0xF0, 0x7C, 0x3F, 0x3F, 0xCF, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x1F, 0x8F, 0xC7, 0xE3, 0x70, 0x3C, 0x1F, 0x07, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x07, 0x06, 0x0C, 0x1C, 0x19, 0x39, 0x33, 0x73, 0x67, 0x67, 0xEF, 0xCF, 0xCF, 0x9F, 0x9F, 0x9F, 0x3F, 0x3F, 0x3F, 0x3F, 0x7F, 0x7E, 0x7C, 0x7C, 0xFC, 0xF8, 0xF8, 0xF8, 0xFC, 0xFC, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFF, 0xFF, 0xFE, 0xFC, 0xFC, 0xF8, 0xF8, 0xFC, 0xFC, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFC, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFE, 0xFE, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFE, 0xFF, 0x7F, 0x7F, 0x7F, 0x7F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x9F, 0x9F, 0xCF, 0xCF, 0xCF, 0x67, 0x67, 0x73, 0x33, 0x39, 0x19, 0x1C, 0x0C, 0x0E, 0x07, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x07, 0x06, 0x06, 0x06, 0x0E, 0x0C, 0x0C, 0x0C, 0x1C, 0x1C, 0x1D, 0x19, 0x19, 0x19, 0x39, 0x39, 0x39, 0x3B, 0x33, 0x33, 0x33, 0x33, 0x33, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x77, 0x77, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x77, 0x77, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x39, 0x39, 0x39, 0x19, 0x19, 0x19, 0x19, 0x1C, 0x1C, 0x0C, 0x0C, 0x0C, 0x0E, 0x06, 0x06, 0x06, 0x07, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 

};
const uint8_t helice1[] PROGMEM =  
{
	0x00, 0x00, 0x00, 0x3C, 0x3E, 0x7F, 0xFF, 0xFF, 0xFF, 0x7E, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0xE0, 0xF0, 0xF8, 0xF8, 0xF8, 0xF8, 0xFD, 0x7F, 0x1E, 0x1E, 0x3C, 0x3C, 0x7C, 0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x3E, 
	0x00, 0x03, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  };
const uint8_t helice2[] PROGMEM = 
{

	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3E, 0x00, 0x00, 0x00, 0x00, 
	0xF8, 0xFC, 0xFE, 0xFE, 0xFE, 0xFE, 0x7E, 0x3E, 0x1E, 0x1F, 0x1F, 0xFF, 0xFF, 0xF9, 0xF8, 0xF0, 0xF0, 0xF0, 0xF0, 0xE0, 
	0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x07, 0x07, 0x07, 0x07, 0x03, 0x03, 

  };
const uint8_t helice3[] PROGMEM = 
{
	0xE0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xE0, 0xE0, 0xC0, 0x80, 0x80, 0xE0, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7C, 0x00, 
	0x07, 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x03, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xF1, 0xE1, 0xC1, 0xC1, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x00, 0x00, 0x00, 
  };
void gauge(uint8_t angle) 
{
  oled.drawBitmap(0, 0, fondo, 128, 64);
  x1=sin(2*angle*2*3.14/360); y1=cos(2*angle*2*3.14/360); 
  oled.line(xcenter, ycenter, xcenter+arc*x1, ycenter-arc*y1); // line x0,y0,x1,y1
  oled.setScale(2);
  oled.setCursorXY(92,47); oled.print(w);
}
void gauge2(uint8_t angle2) 
{
 x2=sin(2*angle2*2*3.14/360); y2=cos(2*angle2*2*3.14/360); 
  oled.line(xcenter2, ycenter2, xcenter2+arc2*x2, ycenter2-arc2*y2);
  oled.setScale(1);      
  if (w2>99){oled.setCursorXY(37, 44); oled.print(F("°"));} //se desplaza el simbolo ° grados a 3 digitos
  else {oled.setCursorXY(28, 44); oled.print(F("°"));} 
  oled.setCursorXY(1, 47);
  if (w2<0 ){ oled.print(F("error"));}  
  else {//u8g2.setFont(u8g2_font_profont22_tr); 
  oled.setScale(2);
  oled.print(w2);}   
}
void voltimetro ()
{
  oled.setScale(2);
  oled.setCursorXY(35, 0);             
  oled.print(volt,1);                          // Imprime voltaje con un decimal en pantalla
}
void helice()
{
static uint8_t frame = 0 ;
if(frame==0){oled.drawBitmap(58, V, helice1, 20, 20);}
if(frame==1){oled.drawBitmap(58, V, helice2, 20, 20);}
if(frame==2){oled.drawBitmap(58, V, helice3, 20, 20);}
  frame++;
  if(frame>2){ frame = 0; }
}
void ventilador()
{
   //u8g2.setFont(u8g2_font_unifont_t_77);
    if (RL1s==true ) {  V=20; helice();}
    if (RL2s==true ) { V=40; helice();}
   // if (w2 > 115) { u8g2.drawGlyph(12, 30, 0x26a0);}
   // if (volt > 14.8){ u8g2.drawGlyph(95, 12, 0x26a1);}
   // if (w < 23){ u8g2.drawGlyph(108, 32, 0x26fd);  }
}
void setup(void) 
{
Serial.begin(9600);                                //Velocidad Port Serial
while (!Serial);                                   //Espera hasta que el puerto Serie este conectado
pinMode(ni, INPUT);pinMode(te, INPUT); pinMode(vo, INPUT); // Configurados entradas analogicas
pinMode(RL1, OUTPUT); pinMode(RL2, OUTPUT);        //Configurados como salidas digitales
 Wire.setClock(200000L);                          //100khz modo compatible, "fast" mode is 400Khz.  max. 800000hz
 // u8g2.setI2CAddress(0x3C * 2);                  //direccion de oled 0x3C predeterminado, 0x3D alternativo
  oled.init();                                     //Inicializamos el dispositivo oled
  oled.clear();                                    //Borra buffer, pantalla
  oled.drawBitmap(0,3,logoford,128,64);            //Ejecuta logo FORD
  oled.update();                                  // update. Only for buffered mode! OLED_BUFFER
  delay(2000);                                    //Envia datos al oled por 2s
  oled.clear(); 
  EasyBuzzer.setPin(buzzer);                        //Selecciona el pin de salida
  EasyBuzzer.beep( 2000 );                          //Ajusta Frecuencia en Hz, Duración beep en ms                           
  EasyBuzzer.stopBeep();                            //Inicia buzzer en modo off
  timer = millis();  timer2 = millis(); 
  timer3 = millis(); timer4 = millis();
  timer5 = millis();
}

void loop()
{
if (millis() > timer2) 
  {
//*****************************************************************************************//
while (sample_count < NUM_SAMPLES){sum += analogRead(ni); sample_count++;}  //Toma de muestras
p =((float)sum / (float)NUM_SAMPLES * Vref)/ADC;  // Promedio de muestras tomadas 
// Lectura voltaje del sensor de 0.4v a 2.55v
m = constrain(p,0.45,3)*10;                        //Solo se enfoca en un rango de voltaje y multiplica rango x10
w = map(m,4.5,30,15,55);                            //mapea valores minimos y maximos del nivel en litros
m1A = map(m,4.5,30,135,180);                        //mapea valores para ajutar la aguja 0° a 45° 
sample_count = 0; sum = 0;                          //Reestablece los contadores
 timer2 = millis() + 10000UL;                       // Refresco cada 10s
  }
if (millis() > timer3) 
  {
//****************************************************************************************///
while (sample_count < NUM_SAMPLES){sum += analogRead(vo); sample_count++;}  //Toma de muestras
  p3 =((float)sum / NUM_SAMPLES * Vref)/ADC;                   // Promedio de muestras tomadas
  volt = p3/((float)RV2/(RV1+RV2));                             // Lectura Voltaje final
 sample_count = 0; sum = 0;                                     // Reestablece los contadores 
//*****************************************************************************************//
                                          //ejecuta lecturas termistor
w2= therm.getTempAverage();                                        //Temperatura leida
p2= constrain(w2,60,130);                      // limita valores entre rangos grafica
if (p2 < 60) { p2=60;}                                // Establece p2 en 60 a todo dato menor en si mismo
m2A = map(p2,60,130,45,0);                            // grafica segun los mapeos de valores angulares                                         
 timer3 = millis() + 3000UL;                          // Refresco cada 3s
  }
if (millis() > timer)                                
  {
//*****************************************************************************************//                                                                    
  if (w2>=97) {RL1s=true; PORTD |= _BV(RL1); }    //RL1s=true; digitalWrite(RL1,HIGH); //Vent 1 97°C
  if (w2<94 ) {RL1s=false; PORTD &= ~ _BV(RL1);}  //RL1s=false; digitalWrite(RL1,LOW);
  if (w2>=105){RL2s=true; PORTD |= _BV(RL2); }   //RL1s=true; digitalWrite(RL2,HIGH); //Vent 2 105°C         
  if (w2<102) {RL2s=false; PORTD &= ~ _BV(RL2);}  //RL2s=false; digitalWrite(RL2,LOW); 
  if (w2>=115){EasyBuzzer.update();}  else {EasyBuzzer.stopBeep();} 
//*****************************************************************************************//
//u8g2.clearBuffer();
oled.clear(); 
gauge(m1A); gauge2(m2A); voltimetro(); ventilador();     // Preparar datos en pantalla oled    
  oled.update();                                      // Enviar todos los datos
 timer = millis() + 400UL;                               // Refresco cada 400ms
    }
if (millis() > timer4) 
  {
Serial.print(F("N:")); Serial.print(w,1);
Serial.print(F(" B:")); Serial.print(volt,1);  
Serial.print(F(" T:")); Serial.println(w2,1); 

timer4 = millis() + 10000UL;                             // Refresco cada 10s
  }
if(millis() > timer5)
  {
TWCR = 0;                                                //Reset I2C comunicación
oled.init(); 
timer5 = millis() + 120000UL;                             //cada 2min "salta congelamiento de pixels"
  } 
}
NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module