#include <EEPROM.h>
#include <Adafruit_GFX.h>
#include <MCUFRIEND_kbv.h>
MCUFRIEND_kbv tft;
#include <Adafruit_MAX31856.h>
// Use software SPI: CS, DI, DO, CLK
Adafruit_MAX31856 maxthermo = Adafruit_MAX31856(10, 11, 12, 13);
#include <Fonts/FreeSans9pt7b.h>
#include <Fonts/FreeSans12pt7b.h>
#include <Fonts/FreeSerif12pt7b.h>
#include <FreeDefaultFonts.h>
#include <TouchScreen.h>
#define MINPRESSURE 10
#define MAXPRESSURE 1000
// Bellow 4 Pin for Touch funtionality
const int XP = 6;
const int XM = A2;
const int YP = A1;
const int YM = 7;
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
//ID=0x9341
int sysPin = 1; // Dont change Pin number
int Buzzer = 0; // Dont change Pin number
int X_Min = 100;
int X_Max = 910;
int Y_Min = 189;
int Y_Max = 915;
int sumTemp = 0;
int counter = 0;
int address = 1; //EEPROM address counter
unsigned long timer;
unsigned long int milli_time;
unsigned long previousTime = 0;
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
#define MAROON 0x7800
#define PURPLE 0x780F
Adafruit_GFX_Button on_btn, off_btn;
int pixel_x, pixel_y; //Touch_getXY() updates global vars
bool Touch_getXY(void)
{
TSPoint p = ts.getPoint();
pinMode(YP, OUTPUT); //restore shared pins
pinMode(XM, OUTPUT);
digitalWrite(YP, HIGH); //because TFT control pins
digitalWrite(XM, HIGH);
bool pressed = (p.z > MINPRESSURE && p.z < MAXPRESSURE);
if (pressed) {
pixel_y = map(p.x, X_Min, X_Max, 0, tft.height()); //.kbv makes sense to me
pixel_x = map(p.y, Y_Min, Y_Max, 0, tft.width());
}
return pressed;
}
void writeTemp()
{
while (digitalRead(sysPin) == LOW) {
maxthermo.triggerOneShot();
tft.fillCircle(10, 33, 8, GREEN);
delay(100);
tft.fillCircle(10, 33, 8, RED);
milli_time = millis();
sumTemp = sumTemp + maxthermo.readThermocoupleTemperature();
counter++;
if (counter == 10 ) {
counter = 0;
delay(100);
EEPROM.write(address, (sumTemp / 10)); // write value to current address counter address
address += 2; // increment address counter
if (address == 51)
{
address = 1; // 1 // if yes: reset address counter
}
tft.setCursor(10, 170);
tft.setTextColor(GREEN);
tft.setTextSize(5);
tft.print(sumTemp / 10);
delay(10000);
sumTemp = 0;
}
}
}
void callMem() {
for (int i = 1 ; i < 11 ; i++) { // 11
byte value = EEPROM.read(i); //read EEPROM data at address i
if (value != 0) //skip "empty" addresses
{
tft.setCursor(20, 170);
tft.setTextColor(GREEN);
tft.setTextSize(5);
tft.print(value);
delay(1500);
tft.fillRect(1, 130, 240, 80, RED);
}
}
}
void clearMem() {
for (int i = 1 ; i < 11 ; i++) { // 11
if (EEPROM.read(i) != 1) //skip already "empty" addresses
{
EEPROM.write(i, 1); //write 0 to address i
}
}
tft.setCursor(15, 140);
tft.setTextColor(GREEN);
tft.setTextSize(3);
tft.print("Yes Clear");
address = 1; //reset address counter
delay(3000);
tft.fillRect(1, 130, 240, 80, RED);
}
void handleFault(uint8_t fault) {
while (fault) {
maxthermo.triggerOneShot();
fault = maxthermo.readFault();
delay(1);
}
}
void btnHandle() {
bool down = Touch_getXY();
on_btn.press(down && on_btn.contains(pixel_x, pixel_y));
off_btn.press(down && off_btn.contains(pixel_x, pixel_y));
if (on_btn.justReleased()) // Yes Button
on_btn.drawButton();
if (off_btn.justReleased()) // No Button
off_btn.drawButton();
//************Yes Button Action**************************
if (on_btn.justPressed()) {
on_btn.drawButton(true);
callMem();
}
//************Erase Button Action**************************
if (off_btn.justPressed()) {
off_btn.drawButton(true);
clearMem();
}
}
void setup(void)
{
pinMode(sysPin, INPUT_PULLUP);
pinMode(Buzzer, OUTPUT);
digitalWrite(Buzzer, LOW);
uint16_t ID = tft.readID();
maxthermo.begin();
maxthermo.setThermocoupleType(MAX31856_TCTYPE_K);
if (ID == 0xD3D3) ID = 0x9341; // write-only shield
tft.begin(ID);
tft.setRotation(0); //PORTRAIT
tft.fillScreen(BLACK);
delay(3000);
tft.fillScreen(BLACK);
on_btn.initButton(&tft, 60, 240, 100, 40, WHITE, CYAN, MAGENTA, "Yes", 2);
off_btn.initButton(&tft, 180, 240, 100, 40, WHITE, CYAN, MAGENTA, "No", 2);
on_btn.drawButton(false);
off_btn.drawButton(false);
tft.fillRect(1, 130, 240, 80, RED);
timer = millis(); //millis() returns the time since program start in ms
}
void loop(void)
{
// batteryRead();
maxthermo.triggerOneShot();
uint8_t fault = maxthermo.readFault();
if (fault) handleFault(fault);
writeTemp();
btnHandle();
}