#include <U8g2lib.h>
#include <Wire.h>
#include <math.h>
#include <EasyBuzzer.h>
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);
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 ni1 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 THERMISTOR 992 // VALOR OHM DEL SENSOR 25 °C(992 spark)(2500 optra)
#define TEMPERATURENOMINAL 25 // temp. for nominal resistance (almost always 25 C)
#define NUMSAMPLES 10 // NUMERO DE MUESTRAS TOMADAS NTC
#define BCOEFFICIENT 3680 // beta coefficient 3000-4000 (3680 spark)
#define SERIESRESISTOR 974 // resistor en serie 10k (1k para spark)
#define RV1 98700 //RV1=100000 ohms
#define RV2 9780 //RV2=10000 ohms
unsigned char sample_count=0, w, m, m1A, m2A, p2, V;
int samples[NUMSAMPLES], sum=0,sum1=0, w2;
float steinhart, p, p3, x1, x2, y1, y2, volt;
unsigned long timer, timer2, timer3, timer4, timer5;
static bool RL1s, RL2s;
const static unsigned char fondo [] U8X8_PROGMEM=
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0C, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0C,
0x00, 0x00, 0x00, 0x00, 0xF8, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x60, 0x06, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x06, 0x00, 0x00, 0x0F, 0x00,
0x98, 0x3B, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03,
0x00, 0xF0, 0x00, 0x00, 0x10, 0x2A, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0x00, 0x10, 0x2B, 0x60, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x03, 0xF0, 0x00,
0x90, 0x28, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01,
0xC0, 0x00, 0x10, 0x00, 0x90, 0x28, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x70, 0x00, 0xB8, 0x3B, 0x00, 0x04,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00,
0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0xE0,
0x1F, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x70,
0x00, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0x80, 0x3B, 0x01, 0x00, 0x00,
0x00, 0x00, 0x80, 0x10, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x80,
0x28, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x10, 0x00, 0x00, 0x00, 0xFC,
0x3F, 0x00, 0x00, 0x80, 0x2B, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x70,
0x00, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x80, 0x2A, 0x01, 0x00, 0x00,
0x00, 0x00, 0x80, 0x10, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x80,
0x2A, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x10, 0x00, 0x00, 0x00, 0xF8,
0x1F, 0x00, 0x00, 0x80, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70,
0x00, 0x00, 0x00, 0xF8, 0x07, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
};
const static unsigned char logoford [] U8X8_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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xFF,
0xFF, 0x2D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xDB, 0xEB, 0xFF, 0xFF, 0x07,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x3F, 0x00, 0x00,
0x00, 0x00, 0xFD, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0,
0xFF, 0x00, 0x00, 0xA4, 0x25, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFE, 0x03, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xC0,
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x3F, 0x80, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x03, 0xFC, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x03,
0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xC0, 0x1F, 0x00, 0x00,
0x00, 0x00, 0x7F, 0xE0, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x07, 0xFE, 0x00, 0x00, 0x00, 0xC0, 0x0F, 0xFE, 0xFF, 0x07, 0x00, 0xFC,
0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF0, 0x03, 0x00, 0x00, 0xF0, 0xC1, 0xFF,
0xFF, 0xE0, 0xFF, 0x00, 0xFE, 0xFF, 0xFD, 0xFF, 0xFF, 0xC3, 0x0F, 0x00,
0x00, 0x78, 0xF0, 0xFF, 0x7F, 0xFC, 0xFF, 0x03, 0x00, 0x00, 0xFC, 0xFF,
0xFF, 0x0F, 0x1E, 0x00, 0x00, 0x3E, 0xFE, 0xFF, 0x3F, 0xFE, 0xFF, 0x3C,
0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x7F, 0x78, 0x00, 0x00, 0x8F, 0xFF, 0xFF,
0x1F, 0xFF, 0x7F, 0xFE, 0x01, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xF1, 0x00,
0xC0, 0xE3, 0xFF, 0xFF, 0x8F, 0xFF, 0x3F, 0xFF, 0x1F, 0xE0, 0xFF, 0xFF,
0xFF, 0xFF, 0xC7, 0x03, 0xE0, 0xF1, 0xFF, 0xFF, 0x8F, 0xBF, 0x9F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x07, 0x70, 0xFC, 0xFF, 0xFF,
0xCF, 0xDF, 0xCF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x0E,
0x78, 0xFE, 0xFF, 0xFF, 0x87, 0xCF, 0xC7, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF,
0xF7, 0xFF, 0x7F, 0x1C, 0x38, 0xFF, 0xFF, 0xFF, 0x0F, 0xE3, 0xE7, 0xF5,
0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0x38, 0x9C, 0xFF, 0xFF, 0xFF,
0x0F, 0xF0, 0xF3, 0xF5, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0x39,
0xCE, 0xFF, 0xFF, 0xFF, 0x1F, 0xF8, 0xB1, 0xF8, 0xFF, 0xFF, 0xFF, 0x7F,
0xF8, 0xFF, 0xFF, 0x73, 0xCE, 0xFF, 0xFF, 0xFF, 0x3F, 0x3C, 0x00, 0xFD,
0xFF, 0xFF, 0xFF, 0x7F, 0xFC, 0xFF, 0xFF, 0x67, 0xE6, 0xFF, 0xFF, 0xFF,
0xFF, 0x87, 0xF8, 0xFB, 0xFF, 0xFF, 0xFF, 0x3F, 0xFC, 0xFF, 0xFF, 0xE7,
0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0x77, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F,
0xFE, 0xFF, 0xFF, 0xE7, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xD1,
0x0F, 0xC7, 0x3F, 0x1C, 0xFF, 0xFF, 0xFF, 0xC7, 0xF7, 0xFF, 0xFF, 0xFF,
0xFC, 0x3F, 0x7E, 0x98, 0x07, 0x82, 0x0F, 0x08, 0xFF, 0xFF, 0xFF, 0xEF,
0xE3, 0xFF, 0xFF, 0x3F, 0xFE, 0x1F, 0x3F, 0x9E, 0x33, 0x80, 0xC7, 0x89,
0xFF, 0xFF, 0xFF, 0xCF, 0xE7, 0xFF, 0xFF, 0x1F, 0xFF, 0x0F, 0x1F, 0x3F,
0x39, 0x84, 0xE3, 0x83, 0xFF, 0xFF, 0xFF, 0xE7, 0xE6, 0xFF, 0xFF, 0x9F,
0xFF, 0x8F, 0x8F, 0xBF, 0x3C, 0xCC, 0xF1, 0xC3, 0xFF, 0xFF, 0xFF, 0x67,
0xE6, 0xFF, 0xFF, 0x8F, 0xFF, 0xC7, 0xCF, 0x3F, 0x1E, 0xFE, 0xF8, 0xC3,
0xFF, 0xFF, 0xFF, 0x67, 0xCE, 0xFF, 0xFF, 0x8F, 0xFF, 0xC3, 0xC7, 0x1F,
0x1F, 0x7C, 0xF8, 0xE1, 0xFF, 0xFF, 0xFF, 0x73, 0x9C, 0xFF, 0xFF, 0x8F,
0xFF, 0xE1, 0xE7, 0x1F, 0x8F, 0x18, 0xFC, 0xE1, 0xFD, 0xFF, 0xFF, 0x33,
0x1C, 0xFF, 0xFF, 0x8F, 0x7F, 0xF0, 0xE3, 0x9F, 0x8F, 0x01, 0xFC, 0xF0,
0xFD, 0xFF, 0xFF, 0x38, 0x38, 0xFE, 0xFF, 0x0F, 0x3F, 0xF8, 0xE3, 0xCF,
0xC7, 0x7F, 0x7C, 0xF0, 0xFE, 0xFF, 0x7F, 0x1C, 0x70, 0xFC, 0xFF, 0x1F,
0x04, 0xF8, 0xE1, 0xC7, 0xC3, 0x7F, 0x3C, 0x38, 0xFF, 0xFF, 0x3F, 0x0E,
0xE0, 0xF9, 0xFF, 0x1F, 0x00, 0xFC, 0xC4, 0xE3, 0xE3, 0x7F, 0x18, 0x98,
0xFF, 0xFF, 0x1F, 0x07, 0xC0, 0xE3, 0xFF, 0x3F, 0x00, 0xFE, 0x06, 0xF0,
0xE1, 0x7F, 0x00, 0xC0, 0xFF, 0xFF, 0xC7, 0x03, 0x80, 0x87, 0xFF, 0x7F,
0x80, 0xFF, 0x0F, 0xFC, 0xF1, 0xFF, 0xC0, 0xE0, 0xFF, 0xFF, 0xE1, 0x01,
0x00, 0x1E, 0xFE, 0xFF, 0xFB, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x7F, 0x78, 0x00, 0x00, 0x7C, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x3E, 0x00, 0x00, 0xF0, 0xC1, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x83, 0x0F, 0x00,
0x00, 0xC0, 0x0F, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x7F, 0xF0, 0x03, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x03,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xC0, 0x3F, 0x00, 0x00,
0x00, 0x00, 0xE0, 0x1F, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07,
0xF8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0xE0, 0xFF, 0xFF,
0xFF, 0xFF, 0x07, 0xC0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8,
0x7F, 0x00, 0x20, 0xEB, 0x77, 0x01, 0x00, 0xFD, 0x1F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x80, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xA7,
0xEA, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0x5F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
};
const static unsigned char helice1 [] U8X8_PROGMEM=
{
0x00, 0x00, 0x00, 0xF0, 0x01, 0x00, 0xF8, 0x03, 0x00, 0xF8, 0x07, 0x00,
0xF8, 0x07, 0x00, 0xF8, 0x07, 0x00, 0xF8, 0x07, 0x00, 0xE0, 0x07, 0x00,
0xC0, 0x85, 0x03, 0x80, 0xE7, 0x0F, 0x80, 0xFF, 0x0F, 0xF8, 0xFF, 0x0F,
0xFC, 0xFF, 0x0F, 0xFE, 0xFD, 0x0F, 0xFE, 0xF9, 0x07, 0xFE, 0xE0, 0x03,
0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7C, 0x00, 0x00,
};
const static unsigned char helice2 [] U8X8_PROGMEM=
{
0x00, 0x3E, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00,
0x00, 0xFF, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7C, 0x00,
0x00, 0x7C, 0x00, 0xF8, 0x3F, 0x00, 0xFC, 0x1E, 0x00, 0xFE, 0x7F, 0x00,
0xFE, 0xFF, 0x07, 0xFE, 0xF9, 0x0F, 0xFE, 0xF8, 0x0F, 0x7E, 0xF8, 0x0F,
0x7C, 0xF8, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x00,
};
const static unsigned char helice3 [] U8X8_PROGMEM=
{
0x00, 0xE0, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xF0, 0x07, 0x00, 0xF0, 0x07,
0x7C, 0xF0, 0x07, 0xFE, 0xF9, 0x07, 0xFF, 0xFB, 0x07, 0xFF, 0xFF, 0x03,
0xFF, 0xFF, 0x01, 0xFF, 0x1F, 0x00, 0x7F, 0x1E, 0x00, 0x1C, 0x3A, 0x00,
0x00, 0x7E, 0x00, 0x00, 0xFE, 0x01, 0x00, 0xFE, 0x01, 0x00, 0xFE, 0x01,
0x00, 0xFE, 0x01, 0x00, 0xFC, 0x01, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00,
};
void gauge(uint8_t angle)
{
u8g2.drawXBMP(0,0,128,64,fondo);
x1=sin(2*angle*2*3.14/360); y1=cos(2*angle*2*3.14/360);
u8g2.drawLine(xcenter, ycenter, xcenter+arc*x1, ycenter-arc*y1);
u8g2.setFont(u8g2_font_profont22_tr); u8g2.setCursor(98,60); u8g2.print(w);
}
void gauge2(uint8_t angle2)
{
x2=sin(2*angle2*2*3.14/360); y2=cos(2*angle2*2*3.14/360);
u8g2.drawLine(xcenter2, ycenter2, xcenter2+arc2*x2, ycenter2-arc2*y2);
u8g2.setFont(u8g2_font_profont10_tr);
if (w2>99){u8g2.setCursor(37, 50); u8g2.print(F("o"));} //se desplaza el simbolo ° grados a 3 digitos
else {u8g2.setCursor(28, 50); u8g2.print(F("o"));}
u8g2.setCursor(1, 60);
if (w2<0 ){ u8g2.print(F("error"));} else {u8g2.setFont(u8g2_font_profont22_tr); u8g2.print(w2);}
}
void voltimetro ()
{
u8g2.setFont(u8g2_font_profont22_tr);
u8g2.setCursor(35, 14);
u8g2.print(volt,1); // Imprime voltaje con un decimal en pantalla
}
void helice()
{
static uint8_t frame = 0 ;
if(frame==0){u8g2.drawXBMP(58,V,20,20,helice1);}
if(frame==1){u8g2.drawXBMP(58,V,20,20,helice2);}
if(frame==2){u8g2.drawXBMP(58,V,20,20,helice3);}
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 termistor()
{
float Rth, average=0; char i;
for (i=0; i< NUMSAMPLES; i++) { samples[i] = analogRead(te); }
for (i=0; i< NUMSAMPLES; i++) { average += samples[i]; }
average /= NUMSAMPLES;
Rth = (ADC * float(THERMISTOR)/average)-(THERMISTOR); //Valor de Rth en funcion del conexionado de nuestro termistor
steinhart = (1/((1/298.15)+(1/float(BCOEFFICIENT))*log(SERIESRESISTOR/Rth)))-273.15; //Aplicamos directamente Steinhart-hart para NTC
}
void setup(void)
{
//Serial.begin(9600); //Velocidad Port Serial
//while (!Serial); //Espera hasta que el puerto Serie este conectado
pinMode(ni1, INPUT);
pinMode(te, INPUT); pinMode(vo, INPUT); // Configurados entradas analogicas
pinMode(RL1, OUTPUT); pinMode(RL2, OUTPUT); //Configurados como salidas digitales
// u8g2.setBusClock(100000); //100khz modo compatible, "fast" mode is 400Khz.
// u8g2.setI2CAddress(0x3C * 2); //direccion de oled 0x3C predeterminado, 0x3D alternativo
u8g2.begin(); //Inicializamos el dispositivo oled
u8g2.setDrawColor(1); // Modo blanco y negro
u8g2.clear(); //Borra buffer, pantalla
u8g2.drawXBMP(0,3,128,64,logoford); //Ejecuta logo FORD
u8g2.sendBuffer();
delay(2000); //Envia datos al oled por 2s
u8g2.clear();
EasyBuzzer.setPin(buzzer); //Selecciona el pin de salida
EasyBuzzer.beep( 2000, 500 ); //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(ni1); sample_count++;} //Toma de muestras
p =((float)sum / (float)NUM_SAMPLES * Vref)/ADC; // Promedio de muestras tomadas
// Lectura voltaje del sensor de min 0.72v a max 3.0v
m = constrain(p,0.72,3.0)*10; //Solo se enfoca en un rango de voltaje y multiplica rango x10
w = map(m,7.2,30,15,55); //mapea valores minimos y maximos del nivel en litros
m1A = map(m,7.2,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){sum1 += analogRead(vo); sample_count++;} //Toma de muestras
p3 =((float)sum1 / NUM_SAMPLES * Vref)/ADC; // Promedio de muestras tomadas
volt = p3/((float)RV2/(RV1+RV2)); // Lectura Voltaje final
sample_count = 0; sum1 = 0; // Reestablece los contadores
termistor(); //ejecuta lecturas termistor
w2= steinhart; //Temperatura guardada en variable w2
p2= constrain(steinhart,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)
{
//*****************************************************************************************//
gauge(m1A); gauge2(m2A); voltimetro(); ventilador(); // Preparar datos en pantalla oled
u8g2.sendBuffer(); // Enviar todos los datos
timer = millis() + 500UL; // 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(steinhart,1);
timer4 = millis() + 10000UL; // Refresco cada 10s
}
*/
if(millis() > timer5)
{
//*****************************************************************************************//
TWCR = 0; //Reset I2C comunicación
u8g2.begin();
u8g2.clearBuffer();
timer5 = millis() + 120000UL; //cada 2min "salta congelamiento de pixels"
}
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();} // Alarma Alta temperatura
}