Wijzigen component ID in Nextion editor

Software die niet past in bovenstaande onderwerpen
Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

Wijzigen component ID in Nextion editor

Berichtdoor benvo » 24 Apr 2017, 18:09

Hallo allemaal,

In een Nextion Editor kan je het e.e.a. wijzigen. Is het bijvoorbeeld mogelijk om een component ID te wijzigen in de Editor. Als dit mogelijk is, hoe zou dit dan moeten?
Weet iemand dit?

Groet,
Ben.

Advertisement

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Wijzigen component ID in Nextion editor

Berichtdoor Koepel » 24 Apr 2017, 23:00

In de Arduino code zet je de waarde zoals de Nextion Editor ze maakt, en niet andersom :roll:

Ik doe dit uit mijn hoofd, want ik zit in linux.

Wanneer je een component toevoegt, dan krijgt het een hoger id nummer en komt het ook bovenop de andere componenten. Je kunt dat id nummer niet wijzigen, maar je kunt het wel een zelfgekozen naam geven.
Volgens mij zitten er links-boven knoppen, om een component onder de andere te plaatsen, of bovenop te plaatsen. Dan verandert de volgorde en ook de id nummers.

Soms is namelijk het handig om componenten te laten overlappen of een hotspot (een touch-veld) bovenop iets anders te plaatsen.

Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

Re: Wijzigen component ID in Nextion editor

Berichtdoor benvo » 25 Apr 2017, 16:58

Daar ging het inderdaad om maar inmiddels heb ik de oplossing gevonden.

Overigens was dit een deel van een probleem waar ik de oplossing nog niet voor heb.
Ik heb een (Arduino)sketch voor een instelbare klok op mijn Nextion die ik aangepast heb zoals ik hem zou willen gebruiken.
De sketch werkt prima, de uren, minuten, seconden, datum (dag, maand, jaar) zijn met plus en min knoppen met één te wijzigen.
Maar wanneer ik deze sketch in een grotere, eigenlijk mijn hoofdsketch wil voegen werkt weer alles behalve de instelmogelijkheden. Daarvoor heb ik gekeken in de library van mijn klok, de RTClib, omdat ik denk dat ik het probleem in die richting moet zoeken. Ik zou de beide sketches willen laten zien maar ze zijn behoorlijk groot, althans de hoofdsketch. Hoe kan ik dit het beste aanpakken?

Dank je wel voor je reactie.

Groet,
Ben.

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Wijzigen component ID in Nextion editor

Berichtdoor Koepel » 25 Apr 2017, 17:43

Een Arduino Uno met een software Serial en RTC library en dan nog heel veel er bij, dat kan te veel zijn.
Wat zegt de compiler over het geheugengebruik ? Zou je dat willen plakken en kopiëren ?
Dus dat ik zo iets zie:
Code: Alles selecteren
De schets gebruikt 27780 bytes (86%)  programma-opslagruimte. Maximum is 32256 bytes.
Globale variabelen gebruiken 1300 bytes (63%) van het dynamisch geheugen. Resteren 748 bytes voor lokale variabelen. Maximum is 2048 bytes.


De nieuwste ITEAD Nextion library voegt teveel toe met 'upload' bestanden. De stabiele versie doet dat niet. Dan is het dus nodig dat jij vertelt welke ITEAD Nextion library je gebruikt.

Je kunt misschien stukken uit je code verwijderen. Ik kan via de seriele monitor commando's ingeven, maar dat kan ik weglaten als ik dat wil.

En je hele code nakijken op gebruik van sram. Dus veel de 'F()' macro gebruiken en PROGMEM.

Je kunt gerust de code laten zien, voor ons is dat niet snel te veel.

Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

Re: Wijzigen component ID in Nextion editor

Berichtdoor benvo » 25 Apr 2017, 19:03

Laat ik beginnen te vertellen dat er geen foutmeldingen zijn. Zelf heb ik het vermoeden dat er een probleem is met de librarys.

Eerst maar even de gevraagde informatie:
De schets gebruikt 22.340 bytes (8%) programma opslagruimte. Maximum is 253.952 bytes. Globale variabelen gebruiken 2.483 bytes (30%) van het dynamisch geheugen. Resteren 5.709 voor lokale variabelen. Maximum is 8.192 bytes.

Ik gebruik een Arduino Mega.
Nextion Editor 0.46
Itead_Nextion_master.zip 0.9.0

Eerst de schets van de instelbare klok.
De tweede schets is mijn "hoofdschets" met daar ingevoegd de instelbare klokschets

Schets 1

cpp code
[code]

#include "RTClib.h"
#include "Nextion.h"
#include <Wire.h> // Comes with Arduino IDE

#define DS3231_ADDRESS 0x68
RTC_DS3231 rtc;
DateTime CurrentTime;

/*
* Declare a button object [page id:2,component id:17, component name: "b1"].
*/
NexButton b1 = NexButton(2, 17, "b1");
NexButton b2 = NexButton(2, 18, "b2");
NexButton b3 = NexButton(2, 19, "b3");
NexButton b4 = NexButton(2, 20, "b4");
NexButton b5 = NexButton(2, 21, "b5");
NexButton b6 = NexButton(2, 22, "b6");

NexButton b10 = NexButton(2, 23, "b10");
NexButton b11 = NexButton(2, 24, "b11");
NexButton b12 = NexButton(2, 25, "b12");
NexButton b13 = NexButton(2, 26, "b13");
NexButton b14 = NexButton(2, 27, "b14");
NexButton b15 = NexButton(2, 28, "b15");


NexText t0 = NexText(2, 1, "t0");
NexText t1 = NexText(2, 2, "t1");
NexText t2 = NexText(2, 3, "t2");
NexText t4 = NexText(2, 16, "t4");




unsigned long timed;
unsigned long curtimed;
unsigned long timep;
unsigned long curtimep;
char buffer[15] = {0};
char buffer_temp[10] = {0};
char buffer_hour[10] = {0};
char buffer_week[10] = {0};
char buffer_second[10] = {0};
char buffer_year[10] = {0};

uint8_t number = 0;
/*
* Register a button object to the touch event list.
*/
NexTouch *nex_listen_list[] =
{
&b1,
&b2,
&b3,
&b4,
&b5,
&b6,
&b10,
&b11,
&b12,
&b13,
&b14,
&b15,
&t0,
&t1,
&t2,
&t4,
NULL
};
/*
* Button component pop callback function.
* In this example,the button's text value will plus one every time when it is released.
*/
void b1PopCallback(void *ptr)
{ byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
if (hour == 23){hour=-1;}
setDS3231time(second, minute, hour+1, dayOfWeek, dayOfMonth, month, year);
}

void b4PopCallback(void *ptr)
{ byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
if (hour == 0){hour=24;}
setDS3231time(second, minute, hour-1, dayOfWeek, dayOfMonth, month, year);
}

void b2PopCallback(void *ptr)
{ byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
if (minute == 59){minute=-1;}
setDS3231time(second, minute+1, hour, dayOfWeek, dayOfMonth, month, year);

}

void b5PopCallback(void *ptr)
{ byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
if (minute == 0){minute=60;}
setDS3231time(second, minute-1, hour, dayOfWeek, dayOfMonth, month, year);

}

void b3PopCallback(void *ptr)
{ byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
if (second == 59){second=-1;}
setDS3231time(second+1, minute, hour, dayOfWeek, dayOfMonth, month, year);

}

void b6PopCallback(void *ptr)
{ byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
if (second == 0){second=60;}
setDS3231time(second-1, minute, hour, dayOfWeek, dayOfMonth, month, year);

}

void b10PopCallback(void *ptr)
{ byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
if (dayOfMonth == 31){dayOfMonth=0;}
setDS3231time(second, minute, hour, dayOfWeek, dayOfMonth+1, month, year);

}

void b11PopCallback(void *ptr)
{ byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
if (month == 12){month=0;}
setDS3231time(second, minute, hour, dayOfWeek, dayOfMonth, month+1, year);

}

void b12PopCallback(void *ptr)
{ byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
if (year == 99){year=-1;}
setDS3231time(second, minute, hour, dayOfWeek, dayOfMonth, month, year+1);

}

void b13PopCallback(void *ptr)
{ byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
if (dayOfMonth == 1){dayOfMonth=32;}
setDS3231time(second, minute, hour, dayOfWeek, dayOfMonth-1, month, year);

}

void b14PopCallback(void *ptr)
{ byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
if (month == 1){month=13;}
setDS3231time(second, minute, hour, dayOfWeek, dayOfMonth, month-1, year);

}

void b15PopCallback(void *ptr)
{ byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
if (year == 0){year=100;}
setDS3231time(second, minute, hour, dayOfWeek, dayOfMonth, month, year-1);

}

void setup(void)
{ Wire.begin();
timed = millis();
rtc.begin();

/* Set the baudrate which is for debug and communicate with Nextion screen. */
nexInit();
/* Register the pop event callback function of the current button component. */
b1.attachPop(b1PopCallback, &b1);
b2.attachPop(b2PopCallback, &b2);
b3.attachPop(b3PopCallback, &b3);
b4.attachPop(b4PopCallback, &b4);
b5.attachPop(b5PopCallback, &b5);
b6.attachPop(b6PopCallback, &b6);
b10.attachPop(b10PopCallback, &b10);
b11.attachPop(b11PopCallback, &b11);
b12.attachPop(b12PopCallback, &b12);
b13.attachPop(b13PopCallback, &b13);
b14.attachPop(b14PopCallback, &b14);
b15.attachPop(b15PopCallback, &b15);



}
void loop(void)
{
/*
* When a pop or push event occured every time,
* the corresponding component[right page id and component id] in touch event list will be asked.
*/
nexLoop(nex_listen_list);
curtimed = millis();
CurrentTime=rtc.now();

if (abs(curtimed-timed) >= 500){
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
number = hour;
itoa(number, buffer_temp, 10);
if (number < 10)
{
strcpy(buffer, "0");
strcat(buffer, buffer_temp);
if (strcmp(buffer, buffer_second))
{
t0.setText(buffer);
strcpy(buffer_second, buffer);
}
}
else
{
if (strcmp(buffer_temp, buffer_second))
{
t0.setText(buffer_temp);
strcpy(buffer_second, buffer_temp);
}
}
number = minute;
itoa(number, buffer_temp, 10);
if (number < 10)
{
strcpy(buffer, "0");
strcat(buffer, buffer_temp);
if (strcmp(buffer, buffer_second))
{
t1.setText(buffer);
strcpy(buffer_second, buffer);
}
}
else
{
if (strcmp(buffer_temp, buffer_second))
{
t1.setText(buffer_temp);
strcpy(buffer_second, buffer_temp);
}
}
number = second;
itoa(number, buffer_temp, 10);
if (number < 10)
{
strcpy(buffer, "0");
strcat(buffer, buffer_temp);
if (strcmp(buffer, buffer_second))
{
t2.setText(buffer);
strcpy(buffer_second, buffer);
}
}
else
{
if (strcmp(buffer_temp, buffer_second))
{
t2.setText(buffer_temp);
strcpy(buffer_second, buffer_temp);
}
}

memset(buffer, 0, sizeof(buffer));
memset(buffer_temp, 0, sizeof(buffer_temp));

/*receive day's data*/
number = dayOfMonth;
itoa(number, buffer_temp, 10);
strcat(buffer, buffer_temp);
strcat(buffer, "-");

/*receive month's data*/
number = month;
itoa(number, buffer_temp, 10);
strcat(buffer, buffer_temp);
strcat(buffer, "-");

/*receive year's data*/
number = year;
strcat(buffer, "20");
if (year<10){ strcat(buffer, "0");}
itoa(number, buffer_temp, 10);
strcat(buffer, buffer_temp);



/*send to Nextion txt4*/
if (strcmp(buffer_year, buffer))
{
t4.setText(buffer);

}
timed = millis(); }
}

void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year) {
// sets time and date data to DS3231
Wire.beginTransmission(DS3231_ADDRESS);
Wire.write(0); // set next input to start at the seconds register
Wire.write(decToBcd(second)); // set seconds
Wire.write(decToBcd(minute)); // set minutes
Wire.write(decToBcd(hour)); // set hours
Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday)
Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31)
Wire.write(decToBcd(month)); // set month
Wire.write(decToBcd(year)); // set year (0 to 99)
Wire.endTransmission();
}

void readDS3231time(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year) {
Wire.beginTransmission(DS3231_ADDRESS);
Wire.write(0); // set DS3231 register pointer to 00h
Wire.endTransmission();
Wire.requestFrom(DS3231_ADDRESS, 7);
// request seven bytes of data from DS3231 starting from register 00h
*second = bcdToDec(Wire.read() & 0x7f);
*minute = bcdToDec(Wire.read());
*hour = bcdToDec(Wire.read() & 0x3f);
*dayOfWeek = bcdToDec(Wire.read());
*dayOfMonth = bcdToDec(Wire.read());
*month = bcdToDec(Wire.read());
*year = bcdToDec(Wire.read());
}


// Convert decimal numbers to binary coded decimal
byte decToBcd(byte val) {
return ( (val / 10 * 16) + (val % 10) );
}

// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val) {
return ( (val / 16 * 10) + (val % 16) );
}


Schets 2

cpp code
#include "Nextion.h"
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include "RTClib.h"
#include "ChannelManager.h"

#define DS3231_I2C_ADDRESS 0x68




// Data aansluiting is aangesloten op pin 7 on the Arduino.
#define ONE_WIRE_BUS 7

// Legt een oneWire aan om te communiceren met elk oneWire apparaat.
OneWire oneWire(ONE_WIRE_BUS);

// Verbind onze oneWire referentie aan Dallas Temperature.
DallasTemperature sensors(&oneWire);

//De seriële poort naar de Nextion is Serial 2
#define nexxSerial Serial 2

//Zet de meters in NexGauge pointer
NexGauge lichtrood = NexGauge(0,1,"z0");
NexGauge lichtblauw = NexGauge(0,2,"z1");
NexGauge lichtwit = NexGauge (0,3,"z2");
NexGauge ph = NexGauge(0,4,"z3");
NexGauge temp = NexGauge(0,4,"z4");


//Zet de plaatjes in NexPicture p0
NexPicture p0 = NexPicture(0,12,"p0");


// ----------------------- Constanten -----------------------

const int MaxChannels = 3; // Maximaal te gebruiken kanaalnummers, indien nodig te wijzigen naar meer of minder
const int MaxPoints = 25; // Maximaal te gebruiken en in te voeren licht intensiteits punten, indie nodig te wijzigen in meer of minder

const int ledPin=16; //Tx ledPin op 16
int setPic=LOW; //Low of High geeft de afdruk van alarmlicht plaatje 2 of 3
unsigned long previousMillis=0; //Houdt de voorgaande tijd vast
const long interval=1000; //intervaltijd van één seconde voor wisseling alarmplaatjes

// RTC
RTC_DS3231 rtc;

// Time
DateTime CurrentTime;

// ----------------------- Variabelen -----------------------

//Declaratie buttons (pagina,component ID en componentnaam)

NexButton b1 = NexButton(2, 17, "b1");
NexButton b2 = NexButton(2, 18, "b2");
NexButton b3 = NexButton(2, 19, "b3");
NexButton b4 = NexButton(2, 20, "b4");
NexButton b5 = NexButton(2, 21, "b5");
NexButton b6 = NexButton(2, 22, "b6");

NexButton b10 = NexButton(2, 23, "b10");
NexButton b11 = NexButton(2, 24, "b11");
NexButton b12 = NexButton(2, 25, "b12");
NexButton b13 = NexButton(2, 26, "b13");
NexButton b14 = NexButton(2, 27, "b14");
NexButton b15 = NexButton(2, 28, "b15");


NexText t0 = NexText(2, 1, "t0");
NexText t1 = NexText(2, 2, "t1");
NexText t2 = NexText(2, 3, "t2");
NexText t4 = NexText(2, 16, "t4");




unsigned long timed;
unsigned long curtimed;
unsigned long timep;
unsigned long curtimep;
char buffer[15] = {0};
char buffer_temp[10] = {0};
char buffer_hour[10] = {0};
char buffer_week[10] = {0};
char buffer_second[10] = {0};
char buffer_year[10] = {0};

uint8_t number = 0;

/*
* Registeer een button object in de touch event lijst.
*/
NexTouch *nex_listen_list[] =
{
&b1,
&b2,
&b3,
&b4,
&b5,
&b6,
&b10,
&b11,
&b12,
&b13,
&b14,
&b15,
&t0,
&t1,
&t2,
&t4,
NULL
};

// ----------------------- Licht -----------------------

// Invul wijze (Uur, Minuut, Intensiteit)
// De verschillen in intensiteit tussen de ingegeven punten zullen gradueel toenemen of afnemen.


Channel Channels[MaxChannels];
Point Points[MaxChannels][MaxPoints];


void InitializeChannels(int channels) {


// Channel 0:
int channelNo = 0; // Kanaal 0 wordt in gebruik genomen
int pin = 9; // Kanaal 0 gebruikt pin 9 voor de wit-rode balk
Channels[channelNo] = Channel(pin, MaxPoints, fademode_linear, Points[channelNo]); // Initialiseerd kanaal en kiest de FadeMode
Channels[channelNo].AddPoint(8, 30, 0); // Voeg punt toe (Kunt ook decimale waarden gebruiken van 0 tot 1 als dat de voorkeur heeft)
Channels[channelNo].AddPoint(9, 0, 76);
Channels[channelNo].AddPoint(9 , 30, 255);
Channels[channelNo].AddPoint(18, 30, 255);
Channels[channelNo].AddPoint(20, 0, 76);
Channels[channelNo].AddPoint(20, 30, 25);
Channels[channelNo].AddPoint(21, 0, 10);
Channels[channelNo].AddPoint(23, 0, 0);




// Channel 1:In te voeren
channelNo = 1; // Kanaal 1 wordt in gebruik genomen
pin = 10; // Kanaal 1 gebruikt pin 10 voor de wit-blauwe balk
Channels[channelNo] = Channel(pin, MaxPoints, fademode_linear, Points[channelNo]);
Channels[channelNo].AddPoint(9, 0, 0);
Channels[channelNo].AddPoint(9, 15, 76);
Channels[channelNo].AddPoint(9, 30, 255);
Channels[channelNo].AddPoint(18, 30, 255);
Channels[channelNo].AddPoint(19, 30, 127);
Channels[channelNo].AddPoint(20, 30, 51);
Channels[channelNo].AddPoint(22, 0, 25);
Channels[channelNo].AddPoint(23, 0, 0);



// Channel 2:
channelNo = 2; // Kanaal 2 wordt in gebruik genomen
pin = 11; // Kanaal 2 gebruikt pin 11 voor de witte balk
Channels[channelNo] = Channel(pin, MaxPoints, fademode_linear, Points[channelNo]);
Channels[channelNo].AddPoint(9, 0, 0);
Channels[channelNo].AddPoint(9, 15, 127);
Channels[channelNo].AddPoint(9, 30, 255);
Channels[channelNo].AddPoint(17, 30, 255);
Channels[channelNo].AddPoint(17, 45, 127);
Channels[channelNo].AddPoint(18, 00, 10);
Channels[channelNo].AddPoint(18, 15, 0);




}

// ----------------------- Functies -----------------------
long lastUpdateTime = 0;

// Update licht intensiteit waarden

void UpdateLights(DateTime CurrentTime)
{
long now = Seconds(CurrentTime.hour(), CurrentTime.minute(), CurrentTime.second()); // Zet de huidige tijd naar seconden sinds middernacht
if(now != lastUpdateTime) // Geeft alleen een update als er een duidelijk waarneembaar verschil in tijd.
{
for(int channel = 0; channel < MaxChannels; channel++) // Voor elk kanaal
{
analogWrite(Channels[channel].GetPin(), Channels[channel].GetLightIntensityInt(now)); // Krijgt de geupdate licht intensiteit en schrijft de waarde naar de desbetreffende pin
// update wordt uitgevoerd wanneer de waarde ingelezen wordt




//Bereken het percentage output gebasserd op de huidige licht intensiteit.

{

int channel=0;
float intensityNow=Channels[channel].GetLightIntensityInt(now);
float maxIntensity=255;
float a=intensityNow/maxIntensity;
float currentPercent=a*100;

//omrekening lichtwaarde naar naar graden voor lichtschaal
// licht in percentage is linear
//licht uit (0) angle=-45 degrees
//licht 100% aan angle=+225degrees
//range light % is 100
//range of angle is 270(225+45)
//float intensity
float angle = (currentPercent/100.0*270.0)-45.0;
int rood=int(angle);
lichtrood.setValue(rood);
}

{
int channel=1;
float intensityNow=Channels[channel].GetLightIntensityInt(now);
float maxIntensity=255;
float a=intensityNow/maxIntensity;
float currentPercent=a*100;


//omrekening lichtwaarde naar naar graden voor lichtschaal
// licht in percentage is linear
//licht uit (0) angle=-45 degrees
//licht 100% aan angle=+225degrees
//range light % is 100
//range of angle is 270(225+45)
//float intensity
float angle = (currentPercent/100.0*270.0)-45.0;
int blauw=int(angle);
lichtblauw.setValue(blauw);
}

{
int channel=2;
float intensityNow=Channels[channel].GetLightIntensityInt(now);
float maxIntensity=255;
float a=intensityNow/maxIntensity;
float currentPercent=a*100;

//omrekening lichtwaarde naar naar graden voor lichtschaal
// licht in percentage is linear
//licht uit (0) angle=-45 degrees
//licht 100% aan angle=+225degrees
//range light % is 100
//range of angle is 270(225+45)
//float intensity
float angle = (currentPercent/100.0*270.0)-45.0;
int wit=int(angle);
lichtwit.setValue(wit);
}
}
}
lastUpdateTime = now;
}


// Converteerd de uren:minuten naar seconden sinds middernacht

long Seconds(int hours, int minutes, int seconds) {
return ((long)hours * 60 * 60) + (minutes * 60) + seconds ;
}

/*
* Button component pop callback functie.
* In dit voorbeeld zal de button's tekst waarde met één vermeerderen na het loslaten van de button.
*/
void b1PopCallback(void *ptr)
{ byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
if (hour == 23){hour=-1;}
setDS3231time(second, minute, hour+1, dayOfWeek, dayOfMonth, month, year);
}

void b4PopCallback(void *ptr)
{ byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
if (hour == 0){hour=24;}
setDS3231time(second, minute, hour-1, dayOfWeek, dayOfMonth, month, year);
}

void b2PopCallback(void *ptr)
{ byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
if (minute == 59){minute=-1;}
setDS3231time(second, minute+1, hour, dayOfWeek, dayOfMonth, month, year);

}

void b5PopCallback(void *ptr)
{ byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
if (minute == 0){minute=60;}
setDS3231time(second, minute-1, hour, dayOfWeek, dayOfMonth, month, year);

}

void b3PopCallback(void *ptr)
{ byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
if (second == 59){second=-1;}
setDS3231time(second+1, minute, hour, dayOfWeek, dayOfMonth, month, year);

}

void b6PopCallback(void *ptr)
{ byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
if (second == 0){second=60;}
setDS3231time(second-1, minute, hour, dayOfWeek, dayOfMonth, month, year);

}

void b10PopCallback(void *ptr)
{ byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
if (dayOfMonth == 31){dayOfMonth=0;}
setDS3231time(second, minute, hour, dayOfWeek, dayOfMonth+1, month, year);

}

void b11PopCallback(void *ptr)
{ byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
if (month == 12){month=0;}
setDS3231time(second, minute, hour, dayOfWeek, dayOfMonth, month+1, year);

}

void b12PopCallback(void *ptr)
{ byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
if (year == 99){year=-1;}
setDS3231time(second, minute, hour, dayOfWeek, dayOfMonth, month, year+1);

}

void b13PopCallback(void *ptr)
{ byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
if (dayOfMonth == 1){dayOfMonth=32;}
setDS3231time(second, minute, hour, dayOfWeek, dayOfMonth-1, month, year);

}

void b14PopCallback(void *ptr)
{ byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
if (month == 1){month=13;}
setDS3231time(second, minute, hour, dayOfWeek, dayOfMonth, month-1, year);

}

void b15PopCallback(void *ptr)
{ byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
if (year == 0){year=100;}
setDS3231time(second, minute, hour, dayOfWeek, dayOfMonth, month, year-1);

}







// ----------------------- Setup -----------------------
void setup()
{
timed = millis();
//initialiseer de Nextion
nexInit();
/* Registreer de pop gebeurtenis callback functien van het huidige knop component. */
b1.attachPop(b1PopCallback, &b1);
b2.attachPop(b2PopCallback, &b2);
b3.attachPop(b3PopCallback, &b3);
b4.attachPop(b4PopCallback, &b4);
b5.attachPop(b5PopCallback, &b5);
b6.attachPop(b6PopCallback, &b6);
b10.attachPop(b10PopCallback, &b10);
b11.attachPop(b11PopCallback, &b11);
b12.attachPop(b12PopCallback, &b12);
b13.attachPop(b13PopCallback, &b13);
b14.attachPop(b14PopCallback, &b14);
b15.attachPop(b15PopCallback, &b15);

//Pin is uitgang
pinMode(ledPin,OUTPUT);
//Start de Temperatuurlibrary/sensor
sensors.begin();


Serial.begin(115200);
delay(1000); // wacht to de Serial monitor geopend wordt.

if (! rtc.begin()) {
Serial.println("Kan de RTC niet vinden");
while (1);
}

if (rtc.lostPower()) {
Serial.println("RTC zonder stroom geweest, nu op tijd zetten!");
// De volgende regel zet de RTC op de datum en tijd toen de sketch was gecompileerd.
// rtc.adjust(DateTime(2017,4,3, 13,19,0));
// Deze regel zet de RTC op een bepaalde datum en tijd, bijvoorbeeld:
// Januari 21e, 2014 op 3 uur na de middag zou je zo in moeten voeren:
// rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}



// Initialiseer de kanaal schema's
InitializeChannels(MaxChannels);

// Clock
Wire.begin();
rtc.begin();


rtc.adjust(DateTime(__DATE__, __TIME__)); // Stelt de RTC tijd in op de sketch samenstelling, wordt gebruikt voor één run. De tijd wordt gereset op het moment dat een apparaat wordt gereset!





}
// ----------------------- Loop -----------------------


void loop() {
// Stelt in op de huidige tijd

CurrentTime = rtc.now();


sensors.requestTemperatures(); // Zend het commando om de temperatuurmeting te halen.

float x=sensors.getTempCByIndex(0); //Zet de verkregen waarde in x

//Omrekening waarde naar graden voor de temperatuurschaal
// Temperature (linear)
// temperature = 0, angle = -45 degrees
// temperature = 50, angle = +225 degrees.
// range of temperature is 50
// range of angle is 270 (225 + 45)
//float temperature;
float angle = (x / 50.0 * 270.0) - 45.0;
int degrees = int(angle);
temp.setValue(degrees);
if(degrees>=360)
{
degrees=0;
}
if (x<22||x>29)
{
unsigned long currentMillis=millis();
if(currentMillis-previousMillis>=interval)
{
previousMillis=currentMillis;
}
if(setPic==HIGH)
{
setPic=LOW;
p0.setPic(2);
}
else
{
setPic=HIGH;
p0.setPic(3);
}


digitalWrite(ledPin,setPic);

}


// Update lights

UpdateLights(CurrentTime);


nexLoop(nex_listen_list);
curtimed = millis();

/*
* Wanneer, op enig moment, een knop ingedrukt of losgelaten wordt
* zal het corresponderende component (juiste pagina, ID en component ID) in de touch gebeurtenissen lijst opgevraagd worden.
*/


if (abs(curtimed-timed) >= 500){
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
number = hour;
itoa(number, buffer_temp, 10);
if (number < 10)
{
strcpy(buffer, "0");
strcat(buffer, buffer_temp);
if (strcmp(buffer, buffer_second))
{
t0.setText(buffer);
strcpy(buffer_second, buffer);
}
}
else
{
if (strcmp(buffer_temp, buffer_second))
{
t0.setText(buffer_temp);
strcpy(buffer_second, buffer_temp);
}
}
number = minute;
itoa(number, buffer_temp, 10);
if (number < 10)
{
strcpy(buffer, "0");
strcat(buffer, buffer_temp);
if (strcmp(buffer, buffer_second))
{
t1.setText(buffer);
strcpy(buffer_second, buffer);
}
}
else
{
if (strcmp(buffer_temp, buffer_second))
{
t1.setText(buffer_temp);
strcpy(buffer_second, buffer_temp);
}
}
number = second;
itoa(number, buffer_temp, 10);
if (number < 10)
{
strcpy(buffer, "0");
strcat(buffer, buffer_temp);
if (strcmp(buffer, buffer_second))
{
t2.setText(buffer);
strcpy(buffer_second, buffer);
}
}
else
{
if (strcmp(buffer_temp, buffer_second))
{
t2.setText(buffer_temp);
strcpy(buffer_second, buffer_temp);
}
}

memset(buffer, 0, sizeof(buffer));
memset(buffer_temp, 0, sizeof(buffer_temp));

/*receive day's data*/
number = dayOfMonth;
itoa(number, buffer_temp, 10);
strcat(buffer, buffer_temp);
strcat(buffer, "-");

/*receive month's data*/
number = month;
itoa(number, buffer_temp, 10);
strcat(buffer, buffer_temp);
strcat(buffer, "-");

/*receive year's data*/
number = year;
strcat(buffer, "20");
if (year<10){ strcat(buffer, "0");}
itoa(number, buffer_temp, 10);
strcat(buffer, buffer_temp);



/*send to Nextion txt4*/
if (strcmp(buffer_year, buffer))
{
t4.setText(buffer);

}
timed = millis(); }
}

void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year){
// sets time and date data to DS3231
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); // set next input to start at the seconds register
Wire.write(decToBcd(second)); // set seconds
Wire.write(decToBcd(minute)); // set minutes
Wire.write(decToBcd(hour)); // set hours
Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday)
Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31)
Wire.write(decToBcd(month)); // set month
Wire.write(decToBcd(year)); // set year (0 to 99)
Wire.endTransmission();
}

void readDS3231time(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year) {
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); // set DS3231 register pointer to 00h
Wire.endTransmission();
Wire.requestFrom(DS3231_ADDRESS, 7);
// request seven bytes of data from DS3231 starting from register 00h
*second = bcdToDec(Wire.read() & 0x7f);
*minute = bcdToDec(Wire.read());
*hour = bcdToDec(Wire.read() & 0x3f);
*dayOfWeek = bcdToDec(Wire.read());
*dayOfMonth = bcdToDec(Wire.read());
*month = bcdToDec(Wire.read());
*year = bcdToDec(Wire.read());
}

// Converteerd decimale nummers naar hexadecimale nummers
byte decToBcd(byte val) {
return ( (val / 10 * 16) + (val % 10) );
}

// Converteerd hexadecimale nummers naar decimale nummers
byte bcdToDec(byte val) {
return ( (val / 16 * 10) + (val % 16) );

}

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Wijzigen component ID in Nextion editor

Berichtdoor Koepel » 25 Apr 2017, 20:41

Dat is voldoende geheugen met een Arduino Mega 2560.
Op zich is zoveel code geen probleem, ook niet als het tien keer zo veel is. Zolang het maar goed van elkaar gescheiden wordt.

Je kunt geheugen vrij maken en problemen voorkomen, door in de map van ITEAD Nextion library de bestanden NexUpload.h en NexUpload.cpp te verwijderen.
Kun je eens proberen die te verwijderen ? Die includen de softwareSerial op pin 2 en 3 en de SD library die SPI gebruikt, en misschien is dat in conflict met de pinnen van de channelManager.
Ik heb dat gemeld, en ook uitgezocht wat er gebeurt en de oplossing aangereikt ( http://support.iteadstudio.com/support/discussions/topics/11000010589 ), maar het zit er nog steeds in.

Welke RTClib gebruik je ? Graag een link er naar toe.
Heeft die geen mogelijkheid om vooruit en achteruit in de tijd te springen ? Sommige RTC libraries hebben dat, meestal heet die functie "adjustTime()".

Heb je een link naar de channelManager library ?

Dit kan niet:
Code: Alles selecteren
#define nexxSerial Serial 2
Dat heb ik al eerder geschreven. In NexConfig.h worden de seriële poorten gezet. Dus het hoort niet in de sketch, en "Serial 2" kan niet.

Je "buffer" is maar 15 byte. Kun je daar 40 of 80 of 100 byte van maken ?

Ik voorbeelden zie ik vaak dat 'memset' wordt gebruikt om een string leeg te maken. Dat is nogal vreemd en onnodig. Dus je hebt niet de beste code als voorbeeld genomen.

Om het probleem te vinden kun je kijken wat er gebeurt als je op een knop drukt.
Ik neem aan dat de debug-serial nog aan staat ? Dan zie je in de seriele monitor als er een knop wordt ingedrukt. Is dat zo ?
Daarna kun je in je sketch in een callBack functie een bericht naar de seriele poort sturen om te kijken of dat door komt.

Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

Re: Wijzigen component ID in Nextion editor

Berichtdoor benvo » 26 Apr 2017, 18:55

Koepel schreef:Welke RTClib gebruik je ? **** https://github.com/adafruit/RTClib
Heeft die geen mogelijkheid om vooruit en achteruit in de tijd te springen ? Sommige RTC libraries hebben dat, meestal heet die functie "adjustTime()". **** Die heb ik niet kunnen vinden.

Heb je een link naar de channelManager library ? **** https://github.com/benjaf/LightControll ... Controller



Je "buffer" is maar 15 byte. Kun je daar 40 of 80 of 100 byte van maken ? ****Deze vraag begrijp ik niet, deze buffer staat niet in mijn sketch, bedoel je misschien char buffer[15]= {0}; ??

Ik voorbeelden zie ik vaak dat 'memset' wordt gebruikt om een string leeg te maken. Dat is nogal vreemd en onnodig. Dus je hebt niet de beste code als voorbeeld genomen.

Om het probleem te vinden kun je kijken wat er gebeurt als je op een knop drukt. **** Wanneer ik op mijn Nextion scherm button druk kan ik dit zien in de Nextion Editor
Ik neem aan dat de debug-serial nog aan staat ? Dan zie je in de seriele monitor als er een knop wordt ingedrukt. Is dat zo ? ****Via mijn serial monitor op mijn computer komt er niets door,
Daarna kun je in je sketch in een callBack functie een bericht naar de seriele poort sturen om te kijken of dat door komt.
****Dit werkt dus niet, er van uitgaande dat ik je vraag goed begrepen heb.

Fijn dat je zo wilt reageren!
Groet,
Ben.

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Wijzigen component ID in Nextion editor

Berichtdoor Koepel » 26 Apr 2017, 19:10

Helaas zie ik het niet zo maar.
Het kijken naar touch gebeurt met de NexLoop().
Daar zou je iets omheen kunnen maken:
Code: Alles selecteren
  Serial.println("voor nexLoop");
  nexLoop(nex_listen_list);
  Serial.println("na nexLoop");


Als de getallen en texten kloppen, dan zou je toch iets moeten zien als je op een knop drukt.
Dus als nexLoop() gewoon werkt, dan beter kijken naar de pagina en de knoppen en de nummers en naam van die knoppen.

Heb je geprobeerd om die twee bestanden (nexUpload.cpp en nexUpload.h) te verwijderen ?

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Wijzigen component ID in Nextion editor

Berichtdoor nicoverduin » 27 Apr 2017, 10:00

Die code kan overigens nog stukken ingekort worden. verder:
a) Ik zou eens naar de functie sprintf() kijken als je een datum veld wilt maken:
Dit
cpp code
memset(buffer, 0, sizeof(buffer));
memset(buffer_temp, 0, sizeof(buffer_temp));

/*receive day's data*/
number = dayOfMonth;
itoa(number, buffer_temp, 10);
strcat(buffer, buffer_temp);
strcat(buffer, "-");

/*receive month's data*/
number = month;
itoa(number, buffer_temp, 10);
strcat(buffer, buffer_temp);
strcat(buffer, "-");

/*receive year's data*/
number = year;
strcat(buffer, "20");
if (year<10){ strcat(buffer, "0");}
itoa(number, buffer_temp, 10);
strcat(buffer, buffer_temp);


vervangen voor:

cpp code
sprintf(buffer, "%2d-%02d-20%02d", dayOfMonth, month, year);


b) Daarnaast vraag ik mij af wat de zin van dit is:
cpp code
/*send to Nextion txt4*/
if (strcmp(buffer_year, buffer))
{
t4.setText(buffer);

}

buffer_year is een 10 byte array die je vergelijkt met een 15 byte array. Die is dus nooit gelijk. En buffer year wordt nooit gevuld.

Deze sketch kan gemakkelijk nog op een UNO draaien met enige zorgvuldigheid......
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

Re: Wijzigen component ID in Nextion editor

Berichtdoor benvo » 27 Apr 2017, 11:24

Hallo Nico,

Je hebt gelijk er is veel verbetering mogelijk in deze code. Echter, mijn kennis reikt (nog) niet zover. De code zoals ik hem heb neergezet was aanvankelijk nog veel groter, hij was uitgesmeerd over 4 pagina's waar ik hem al heb ingekort naar één pagina. Maar als gezegd, mijn kennis is niet toereikend om dit verder toe te passen. Maar ik ben al blij met je aanvullingen! Verder was ik al bezig om uit te vogelen waar het commando "strcat" voor staat en wat het zou moeten doen. Daarbij denk ik dat "strcmp" is voor een vergelijking van de buffers? (compare buffers?) en "strcpy" voor de inhoud van de buffers overzetten(copying buffers?). Maar op dit moment is mijn hoofdprobleem nog dat zodra het klokprogramma is ingevoegd dat het niet meer werkt, d.w.z. de klok werkt maar in/bijstellen is niet mogelijk terwijl het afzonderlijke programma wél werkt.

Misschien mag ik er aan toevoegen dat mijn vragen er mede op gericht zijn om een programma én de C taal te begrijpen! Dat maakt n.l. dat ik er toch in slaag om steeds een stapje verder kom in het "zelf doen".

Dank voor je welkome aanvullingen!

Groet,
Ben.

Volgende

Terug naar Overige Software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 7 gasten