#include <UTFT.h>
#include <UTouch.h>
#include <EEPROM.h> // needed for EEPROM
#include "EEPROMAnything.h" // needed for EEPROM
#include <OneWire.h> // Inclusion de la librairie OneWire
// #define EEPROMSIZE 512 // ATMEGA168 512 EEPROM
#define EEPROMSIZE 1024 // ATMEGA328P 1024 EEPROM
UTFT myGLCD(CTE70, 38, 39, 40, 41);
UTouch myTouch( 6, 5, 4, 3, 2);
extern uint8_t BigFont[];
int x, y;
char stCurrent[20] = "";
int stCurrentLen = 0;
char stLast[20] = "";
boolean relay = false;
struct config_t {
int validdata; // if this is 99 then data is valid
float temperature;
} mydata;
int datasize; // will hold size of the struct myfocuser - 6 bytes
int nlocations; // number of storage locations available in EEPROM
int currentaddr; // will be address in eeprom of the data stored
boolean writenow; // should we update values in eeprom
boolean found; // did we find any stored values?
long numwrites = 0L; // number of eeprom writes this session
float temp;
float temp1;
float moyennetemp;
#define relais 10
#define DS18B20 0x28 // Adresse 1-Wire du DS18B20
#define BROCHE_ONEWIRE 8 // Broche utilisée pour le bus 1-Wire
OneWire ds(BROCHE_ONEWIRE); // Création de l'objet OneWire ds
#define DS18B201 0x28 // Adresse 1-Wire du DS18B20
#define BROCHE_ONEWIRE1 9 // Broche utilisée pour le bus 1-Wire
OneWire ds1(BROCHE_ONEWIRE1); // Création de l'objet OneWire ds
// Fonction récupérant la température depuis le DS18B20
// Retourne true si tout va bien, ou false en cas d'erreur
boolean getTemperature(float *temp) {
byte data[9], addr[8];
// data : Données lues depuis le scratchpad
// addr : adresse du module 1-Wire détecté
if (!ds.search(addr)) { // Recherche un module 1-Wire
ds.reset_search(); // Réinitialise la recherche de module
return false; // Retourne une erreur
}
if (OneWire::crc8(addr, 7) != addr[7]) // Vérifie que l'adresse a été correctement reçue
return false; // Si le message est corrompu on retourne une erreur
if (addr[0] != DS18B20) // Vérifie qu'il s'agit bien d'un DS18B20
return false; // Si ce n'est pas le cas on retourne une erreur
ds.reset(); // On reset le bus 1-Wire
ds.select(addr); // On sélectionne le DS18B20
ds.write(0x44, 1); // On lance une prise de mesure de température
delay(500); // Et on attend la fin de la mesure
ds.reset(); // On reset le bus 1-Wire
ds.select(addr); // On sélectionne le DS18B20
ds.write(0xBE); // On envoie une demande de lecture du scratchpad
for (byte i = 0; i < 9; i++) // On lit le scratchpad
data[i] = ds.read(); // Et on stock les octets reçus
// Calcul de la température en degré Celsius
*temp = ((data[1] << 8) | data[0]) * 0.0625;
// Pas d'erreur
return true;
}
// Fonction récupérant la température depuis le DS18B20
// Retourne true si tout va bien, ou false en cas d'erreur
boolean getTemperature1(float *temp1) {
byte data[9], addr[8];
// data : Données lues depuis le scratchpad
// addr : adresse du module 1-Wire détecté
if (!ds1.search(addr)) { // Recherche un module 1-Wire
ds1.reset_search(); // Réinitialise la recherche de module
return false; // Retourne une erreur
}
if (OneWire::crc8(addr, 7) != addr[7]) // Vérifie que l'adresse a été correctement reçue
return false; // Si le message est corrompu on retourne une erreur
if (addr[0] != DS18B201) // Vérifie qu'il s'agit bien d'un DS18B20
return false; // Si ce n'est pas le cas on retourne une erreur
ds1.reset(); // On reset le bus 1-Wire
ds1.select(addr); // On sélectionne le DS18B20
ds1.write(0x44, 1); // On lance une prise de mesure de température
delay(500); // Et on attend la fin de la mesure
ds1.reset(); // On reset le bus 1-Wire
ds1.select(addr); // On sélectionne le DS18B20
ds1.write(0xBE); // On envoie une demande de lecture du scratchpad
for (byte i = 0; i < 9; i++) // On lit le scratchpad
data[i] = ds1.read(); // Et on stock les octets reçus
// Calcul de la température en degré Celsius
*temp1 = ((data[1] << 8) | data[0]) * 0.0625;
// Pas d'erreur
return true;
}
void drawButtons()
{
myGLCD.setColor(0, 0, 255);
myGLCD.fillRoundRect (0, 0, 300, 450);
myGLCD.setColor(255, 255, 255);
myGLCD.drawRoundRect (0, 0, 300, 450);
myGLCD.setColor(255, 255, 255);
myGLCD.print("Temperature haut", 15, 5);
myGLCD.setColor(255, 255, 255);
myGLCD.print("Humidite", 80, 150);
myGLCD.setColor(255, 255, 255);
myGLCD.print("Temperature bas", 20, 300);
myGLCD.setColor(255, 255, 255);
myGLCD.print("Resistance ", 5, 400);
myGLCD.setColor(0, 0, 255);
myGLCD.fillRoundRect (310, 0, 780, 65);
myGLCD.setColor(255, 255, 255);
myGLCD.drawRoundRect (310, 0, 780, 65);
myGLCD.setColor(255, 255, 255);
myGLCD.print("Moyenne temperature ", 400, 5);
myGLCD.setColor(0, 0, 255);
myGLCD.fillRoundRect (310, 80, 780, 150);
myGLCD.setColor(255, 255, 255);
myGLCD.drawRoundRect (310, 80, 780, 150);
myGLCD.setColor(255, 255, 255);
myGLCD.print("Temperature memoire", 400, 85);
/* myGLCD.setColor(255, 0, 0);
myGLCD.print("38.700", 490, 115); */
myGLCD.setColor(118, 238, 0);
myGLCD.fillRoundRect (310, 160, 780, 450);
myGLCD.setColor(255, 255, 255);
myGLCD.drawRoundRect (310, 160, 780, 450);
myGLCD.setColor(255, 255, 255);
myGLCD.setBackColor(118, 218, 0);
myGLCD.print("Temperature a memoiriser", 350, 165);
//chiffre de 1 a 5
for (x = 0; x < 6; x++)
{
myGLCD.setColor(0, 0, 255);
myGLCD.fillRoundRect (315 + (x * 60), 185, 370 + (x * 60), 225);
myGLCD.setColor(255, 255, 255);
myGLCD.drawRoundRect (315 + (x * 60), 185, 370 + (x * 60), 225);
myGLCD.printNumI(x + 1, 335 + (x * 60), 195);
}
//chiffre de 6 a 0
for (x = 0; x < 6; x++)
{
myGLCD.setColor(0, 0, 255);
myGLCD.fillRoundRect (315 + (x * 60), 235, 370 + (x * 60), 285);
myGLCD.setColor(255, 255, 255);
myGLCD.drawRoundRect (315 + (x * 60), 235, 370 + (x * 60), 285);
if (x < 3) myGLCD.printNumI(x + 7, 335 + (x * 60), 255);
}
myGLCD.setColor(255, 255, 255);
myGLCD.print("0", 515 , 255);
myGLCD.print(".", 575 , 255);
myGLCD.print("*", 635 , 255);
myGLCD.setColor(0, 0, 255);
myGLCD.fillRoundRect (315, 300, 450, 350);
myGLCD.setColor(255, 255, 255);
myGLCD.drawRoundRect (315, 300, 450, 350);
myGLCD.print("EFFACER", 325, 315);
myGLCD.setColor(0, 0, 255);
myGLCD.fillRoundRect (470, 300, 670, 350);
myGLCD.setColor(255, 255, 255);
myGLCD.drawRoundRect (470, 300, 670, 350);
myGLCD.print("MEMORISER", 500, 315);
// myGLCD.setColor(0, 255, 0);
// myGLCD.print("38.569 C", 450, 400);
}
void updateStr(int val)
{
String tempupdate = "";
if (stCurrentLen < 6)
{
stCurrent[stCurrentLen] = val;
stCurrent[stCurrentLen + 1] = '\0';
stCurrentLen++;
myGLCD.setColor(0, 0, 0);
myGLCD.setBackColor(118, 218, 0);
myGLCD.print(stCurrent, 420, 375);
if (stCurrent != "*") {
tempupdate += stCurrent;
Serial.println(tempupdate);
mydata.validdata = 99;
mydata.temperature = tempupdate.toFloat();
EEPROM_writeAnything(currentaddr, mydata); // update values in EEPROM
numwrites++;
writenow = true;
}
}
else
{
myGLCD.setColor(255, 0, 0);
myGLCD.print("BUFFER FULL!", 450, 400);
delay(500);
myGLCD.print(" ", 450, 400);
delay(500);
myGLCD.print("BUFFER FULL!", 450, 400);
delay(500);
myGLCD.print(" ", 450, 400);
myGLCD.setColor(118, 238, 0);
}
}
// Draw a red frame while a button is touched
void waitForIt(int x1, int y1, int x2, int y2)
{
myGLCD.setColor(0, 255, 0);
myGLCD.drawRoundRect (x1, y1, x2, y2);
while (myTouch.dataAvailable())
myTouch.read();
myGLCD.setColor(255, 255, 255);
myGLCD.drawRoundRect (x1, y1, x2, y2);
}