hello
I use the enhanced-nextion-library from https://github.com/jyberg.)
and my arduino crashes as soon as I try to use just the declaration of some function:
Nextvariable or NexPicture
example : NexVariable lune(next,0,12, "va0");
if I comment this function everything works normally
did I do something wrong somewhere that would block the process ?
my code : (not finished)
#include "Nextion.h"
#include <SoftwareSerial.h>
#include <SPI.h>
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <DS3232RTC.h> // https://github.com/JChristensen/DS3232RTC
#define DS3231_ADDRESS 0x68 //adresse physique DS3231
#define ONE_WIRE_BUS 5 //pin 5 for DS18B20/
// var DS18B20
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
//var DS3231
bool century = false;
bool h12Flag;
bool pmFlag;
uint16_t kelvin = 6500 ;// initialisation kelvin par défaut
/*
* Declare Nextion instance
*/
#ifdef ESP8266
// esp8266 / NodeMCU software serial ports
SoftwareSerial mySerial(D2, D1); // RX, TX
#else
SoftwareSerial mySerial(2,3); // RX, TX
#endif
Nextion *next = Nextion::GetInstance(mySerial); // software serial
//Nextion *next = Nextion::GetInstance(Serial); // HW serial
//init DS3231
//RTC_DS3231 rtc;
DS3232RTC myRTC;
const char *tableauDesJours[] = { "Samedi", "Dimanche","Lundi", "Mardi", "Mercredi", "Jeudi","Vendredi"};
//**** Variable temperature
float Celcius=0;
float Fahrenheit=0;
//variable moon
String nfm = ""; // days to next full moon
// Declare objects that we are going to read from the display. This includes buttons, sliders, text boxes, etc:
// Format: <type of object> <object name>(<nextion instance>,<page id>, <object id>, "<object name>");
/* ***** Types of objects:
* NexButton - Button
* NexDSButton - Dual-state Button
* NexHotspot - Hotspot, that is like an invisible button
* NexCheckbox - Checkbox
* NexRadio - "Radio" checkbox, that it's exactly like the checkbox but with a rounded shape
* NexSlider - Slider
* NexGauge - Gauge
* NexProgressBar - Progress Bar
* NexText - Text box
* NexScrolltext - Scroll text box
* NexNumber - Number box
* NexVariable - Variable inside the nextion display
* NexPage - Page touch event
* NexGpio - To use the Expansion Board add-on for Enhanced Nextion displays
* NexRtc - To use the real time clock for Enhanced Nextion displays
* *****
*/
// page Nextion
/*
* Declare a main page object [nextion instance, page id:0, page name: "page0"].
*/
NexPage p0(next,0,"menu");
NexPage p1(next,1,"kelvin");
NexPage p2(next,2,"home");
NexPage p3(next,3,"settings");
NexPage p4(next,4,"arduino");
// texte modifiable page 0
/*
* NexText(Nextion instance, page id:0, objet id, cobjet name);
*/
NexText tempnexion(next,0, 5, "temp");
NexText date(next,0, 2, "date");
NexNumber heuremenu(next,0,6,"h0");
NexNumber minutemenu(next,0,7,"m0");
NexNumber secondemenu(next,0,8,"s0");
NexVariable lune(next,0,12,"va0"); // <=============== bug ??
// text modifiable pag 1
NexNumber titrekelvin(next,1,73,"n0");
//texte modifiable page 2
NexNumber jourresumer(next,2,4,"day");
NexNumber moisresumer(next,2,5,"month");
NexNumber anneeresumer(next,2,6,"year");
NexNumber heureresumer(next,2,1,"hour");
NexNumber minuteresumer(next,2,2,"minute");
NexNumber seconderesumer(next,2,3,"second");
NexText jsemaineresumer(next,2,9,"weektext");
//texte modifiable page 3
NexNumber joursetting(next,3,4,"day");
NexNumber moissetting(next,3,5,"month");
NexNumber anneesetting(next,3,6,"year");
NexNumber heuresetting(next,3,1,"heure");
NexNumber minutesetting(next,3,2,"minute");
NexNumber secondesetting(next,3,3,"seconde");
NexText jsemainesetting(next,3,21,"weektext");
//declaration des boutons
// bouton ennregistrement
NexButton enrsetting(next,3,28,"enrsetting");
//liste de surveillance nextion
NexTouch *nex_listen_list[] = {&p0,&p1,&p2,&p4,&enrsetting,NULL};
// gestion des evenements
void sondetemperature()
{
// init temp DS18B20
sensors.begin();
// ds18b20 temp request
sensors.requestTemperatures();
delay(500); // delai request temperature
Celcius=sensors.getTempCByIndex(0);
Fahrenheit=sensors.toFahrenheit(Celcius);
float t = Celcius;
static char temperatureCTemp[6];
dtostrf(t, 6, 2, temperatureCTemp);
tempnexion.setText(temperatureCTemp);
}
// display time, date
void display()
{
byte Hour ;
byte Minute;
byte Second ;
Wire.beginTransmission(DS3231_ADDRESS); // cherche si horloge presente a son adresse
byte erreur = Wire.endTransmission(); // transmission ok ou pas
if (erreur == 0) { // si transmission ok
// partie affichage date
char buf[40];
time_t t = myRTC.get();
sprintf(buf, "%.2d/%s/%d",
day(t), monthShortStr(month(t)), year(t));
date.setText(buf);
//partie affichage horaire
Hour = hour(t);
Minute = minute(t);
Second = second(t);
heuremenu.setValue(Hour);
minutemenu.setValue(Minute);
secondemenu.setValue(Second);
}else {
date.setText("pas DS3231");
}
}
// traitement des pages surveillés
void p0PopCallback(void *ptr) //traitement page 0
{
sondetemperature();
display();
}
void p1PopCallback(void *ptr) //traitement page 1
{
time_t t = myRTC.get();
byte heureactuel ;
heureactuel = hour(t);
//radio bouton a etat allumer suivant l'heure
//lecture kelvin actuel
uint32_t kelvinactuel ;
titrekelvin.getValue(&kelvinactuel);
//traitement kelvin
}
void p2PopCallback(void *ptr) //traitement page 2
{
//affichage de l'heure et date du DS3231
byte Jours ;
Jours = RTC.readRTC(3);
time_t t = myRTC.get();
jsemaineresumer.setText(tableauDesJours[Jours]);
heureresumer.setValue(hour(t));
minuteresumer.setValue(minute(t));
seconderesumer.setValue(second(t));
jourresumer.setValue(day(t));
moisresumer.setValue(month(t));
anneeresumer.setValue(year(t));
}
void enrsettingPopCallback(void *ptr) //traitement page 3
{
time_t t = myRTC.get();
//recuperation de l'heure et date de la page setting pour ds3231
tmElements_t tm;
uint32_t Annee ;
uint32_t Mois ;
uint32_t Jours ;
uint32_t Heure ;
uint32_t Minute ;
uint32_t Seconde ;
delay(50);
heuresetting.getValue(&Heure);
minutesetting.getValue(&Minute);
secondesetting.getValue(&Seconde);
joursetting.getValue(&Jours);
moissetting.getValue(&Mois);
anneesetting.getValue(&Annee);
if (Annee >= 100 && Annee < 1000) // verifie si dizaine d'année et superieur a 1000 ans
Serial.println(F("Erreur : L'année doit comporter deux ou quatre chiffres !")); //debug
else {
Serial.println(F("Début traitement Date")); // debug
if (Annee >= 1000)
tm.Year = CalendarYrToTm(Annee);// si annee superieur a 1000 deduit 1970 (annee de defaut ds331)
else // (y < 100)
tm.Year = y2kYearToTm(Annee); // si annee inferieur a 100 deduit 30 pour calcul par rapport a 70 (1970)
tm.Month = Mois;
tm.Day = Jours;
tm.Hour = Heure;
tm.Minute = Minute;
tm.Second = Seconde;
t = makeTime(tm);
RTC.set(t); // utiliser la valeur time_t pour s'assurer que le jour de la semaine correct est défini.
Serial.println(t); // debug
setTime(t);
int Joursemaine = RTC.readRTC(3);
jsemainesetting.setText(tableauDesJours[Joursemaine]);
}
}
void p4PopCallback(void *ptr) //traitement page 4
{
//libre à Coder
}
//initialisation executer une seule fois
void setup(void)
{
Serial.begin(9600);
// Start the I2C interface
Wire.begin();
// Initialize Nextion connection wiht selected baud in this case 19200
if(!next->nexInit(19200))
{
Serial.println("nextion init fails");
}
delay(50);// delai initiaisation nextion
//surveillance des pages
p0.attachPop(p0PopCallback,&p0);
p1.attachPop(p1PopCallback,&p1);
p2.attachPop(p2PopCallback,&p2);
enrsetting.attachPop(enrsettingPopCallback,&enrsetting);
p4.attachPop(p4PopCallback,&p4);
setSyncProvider(RTC.get);
}
// boucle continue de l'arduino
void loop(void)
{
/*
* Quand un événement pop ou push se produit à chaque fois,
* le composant correspondant [id de la page de droite et id du composant] dans la liste des événements tactiles sera demandé.
*/
next->nexLoop(nex_listen_list);
}