Wijzigen component ID in Nextion editor

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

Re: Wijzigen component ID in Nextion editor

Berichtdoor benvo » 06 Mei 2017, 19:24

@Koepel.
Ik heb naar je testsketch gekeken. Allereerst bij mij werkt alles wel goed op de seconden na. Dus tel ik er bij, bijvoorbeeld, de minuten er één bij op, of eraf, dan werkt dit bij de minuten de uren lopen dus niet mee. Bij de uren enz. gaat dit ook allemaal goed. Met uitzondering, als gezegd, bij de seconden. Bij gebruik van de kleine letter s gaan de minuten mee omhoog. Echter bij de grote letter S, en die staat niet in de sketch(!), werkt het wel goed, alleen de seconden verlagen.
Is dat misschien het probleem, ik bedoel dat niet alles in de sketch staat v.w.b. de seconden?

Dit brengt mij trouwens op een gedachte. Zou het mogelijk zijn om met jouw sketch, als ik die mag gebruiken, een instelbare klok te maken? Immers de letters hebben allemaal een ascii waarde. Als ik die waarde onder een Nextion + of - knop kan zetten en aldus die waarde naar de Arduino sketch stuur zou ik toch de klok vooruit of achteruit kunnen zetten? Onder voorbehoud dat het seconden probleem oplosbaar is. Of zeg ik nu iets heel doms? Ik ben benieuwd naar je reactie.

Groet,
Ben.

Advertisement

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

Re: Wijzigen component ID in Nextion editor

Berichtdoor Koepel » 06 Mei 2017, 19:55

Mijn eigen instelscherm laat een lopende klok met datum en tijd zien (de maand als een getal), en ik kan op de bovenste helft of op de onderste helft klikken om omhoog of omlaag te gaan. Daarvoor heb ik 'HotSpots' (touch velden) ruim over de datums en tijd gelegd.
Dat bedoel je ?

Mijn bedoeling van die sketch was om de stukjes om het te wijzigen in de Nextion OnPush...() functies te zetten. Daar geef ik ook bij iedere OnPush...() functie een 'piep' met een speakertje.

Ik heb een normaal Nextion scherm zonder RTC klok, dus ik doe alles in de Arduino sketch.
Als ik een 'touch' binnen krijg, dan wijzig ik de tijd en dan doe ik meteen een update naar het scherm.
Daarnaast doe ik toch al iedere seconde een update naar het scherm om de klok te laten lopen (dus een lopende klok op het instelscherm).

Voor de seconden zou er naar een hele minuut gesprongen kunnen worden.
Dus bij 12:20:15 terug naar 12:20
En bij 12:20:35 vooruit naar 12:21

Maar ja, ik denk dat de Adafruit library een foutje heeft. Ik heb er al naar gekeken, maar kon nog niet vinden in welke functie het zou kunnen zitten. Ik weet ook niet of het komt doordat mijn test sketch (nog) geen RTC chip gebruikt. Ik zal nog eens kijken :geek:

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

Re: Wijzigen component ID in Nextion editor

Berichtdoor Koepel » 06 Mei 2017, 20:36

Oeps, ik was de "break;" vergeten bij mijn test-sketch bij de 's'. Dus als ik 's' intypte dan rolde de code door naar de 'm' om de minuten te verhogen :oops: :oops:
De Adafruit RTClib is dus correct 8-)

Om de seconden naar de dichtstbijzijnde minuut te laten springen heb ik nu dit:

cpp code
// werkende 's' springt naar dichtstbijzijnde minuut
case 's':
{ // create local scope in switch-case for variables
// Jump to nearest minute
DateTime now = rtc.now();
int s = now.second();
if( s >= 30)
s -= 60;
TimeSpan verschil( 0, 0, 0, s); // days, hours, minutes, seconds
rtc.adjust( rtc.now() - verschil); // set new time with difference
}
break; // de "break;" die ik was vergeten

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

Re: Wijzigen component ID in Nextion editor

Berichtdoor benvo » 07 Mei 2017, 15:46

@Koepel.

Ook ik heb een lopende klok op mijn instelscherm. Misschien wordt mijn bedoeling duidelijk als ik je mijn Menu (in aanbouw) laat zien.
https://www.youtube.com/watch?v=ir-Dcf0 ... e=youtu.be

Maar ook jouw manier kan afdoende zijn.

Zelf gebruik ik ook het liefst de Arduino klok. Mijn sketch, licht , temperatuur, is daarop (op-)gebouwd. Als ik nu zou gaan werken met de ingebouwde klok moeten alle sketches aangepast worden en dat wil ik niet.

De wijziging in je sketch werkt. Maar ik zie dat de seconden op nul springen? Dit is anders dan de minuten, uren waar je met één vooruit of achteruit kan. Je gebruikt ook alleen de kleine letter s om de seconden te verlagen, de hoofdletter S, om te verhogen, gebruik je niet? Heeft dat te maken met dat Adafruit foutje? Of heeft het hier mee te maken:

There are some RTC libraries that instead have you call something like RTC.year() and RTC.hour() to get the current year and hour. However, there's one problem where if you happen to ask for the minute right at3:14:59 just before the next minute rolls over, and then the second right after the minute rolls over (so at3:15:00) you'll see the time as 3:14:00 which is a minute off. If you did it the other way around you could get 3:15:59 - so one minute off in the other direction.

Because this is not an especially unlikely occurrence - particularly if you're querying the time pretty often - we take a 'snapshot' of the time from the RTC all at once and then we can pull it apart into day() or second()as seen above. Its a tiny bit more effort but we think its worth it to avoid mistakes!

Groet,
Ben.

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

Re: Wijzigen component ID in Nextion editor

Berichtdoor Koepel » 07 Mei 2017, 16:20

Leuk om te zien. Ik heb die plusjes en minnetjes dus boven en onder de datum en tijd als een soort pijltjes.
Dat is wat compacter. Jij gebruikt nu linksonder driekwart van het scherm om met tekst aan te geven wat het is.

Ik laat het 's' commando naar de dichtstbijzijnde minuut springen. Dus tot 30 seconden terugspringen en na 30 seconden vooruitspringen. Dat vind ik namelijk veel prettiger.

En ja, precies op het verkeerde moment iets wijzigen, dat kan gebeuren. Nou ja, dat zie ik dan meteen, dus dat kan ik alsnog goed zetten. Bij de seconden, minuten, uren en dagen kun je kiezen: ofwel vooruit of achteruit in de tijd springen waarbij alles meegaat, ofwel alleen dat deel verhogen of verlagen zonder de rest te wijzigen.

Het is maar een instelscherm. Als de tijd maar in te stellen is ;)

Nu nog een screendump commando in de Nextion firmware om het Nextion scherm op te slaan :lol:
Bijlagen
tijd_instellen.jpg
tijd_instellen.jpg (28.93 KiB) 6808 keer bekeken

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

Re: Wijzigen component ID in Nextion editor

Berichtdoor benvo » 08 Mei 2017, 20:24

Eigenlijk vond ik dat ik een mooi instelscherm had.

Maar ja, jou scherm is beter!

Daarom deze verbetering aan mijn kant waarna er een programma poging moet volgen.

http://imgur.com/a/VZPIw

Groet,
Ben.

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

Re: Wijzigen component ID in Nextion editor

Berichtdoor benvo » 09 Mei 2017, 17:13

@koepel,
Dank zij jouw test sketch heb ik een werkende én instelbare klok!
Tot zit er nog iets vreemds in. Om "een" instelling te wijzigen moet ik heel vaak op mijn scherm drukken alvorens er iets gebeurd.
Laat ik eerste even laten zien wat ik deed met jouw sketch:

cpp code
//Button Callback functie
//Bij het loslaten van de knop zal de tekstwaarde met plus of min één wijzigen

void b2PopCallback(void*ptr)
{
TimeSpan verschil(0, +1, 0, 0); //dagen, uren, minuten, seconden
rtc.adjust(rtc.now() +verschil); //geeft de uren +1
}

void b5PopCallback(void*ptr)
{
TimeSpan verschil(0, -1, 0, 0); //dagen, uren, minuten, seconden
rtc.adjust(rtc.now() +verschil); //geeft de uren -1
}


void b3PopCallback(void*ptr)
{
TimeSpan verschil(0, 0, +1, 0); //dagen, uren, minuten, seconden
rtc.adjust(rtc.now() +verschil); //geeft de minuten +1
}

void b6PopCallback(void*ptr)
{
TimeSpan verschil(0, 0, -1, 0); //dagen, uren, minuten, seconden
rtc.adjust(rtc.now() +verschil); //geeft de minuten -1
}

void b4PopCallback(void*ptr)
{
TimeSpan verschil(0, 0, 0, +1); //dagen, uren, minuten, seconden
rtc.adjust(rtc.now() +verschil); //geeft de seconden +1
}

void b7PopCallback(void*ptr)
{
TimeSpan verschil(0, 0, 0, -1); //dagen, uren, minuten, seconden
rtc.adjust(rtc.now() +verschil); //geeft de seconden -1
}

void b8PopCallback(void*ptr)
{
TimeSpan verschil(+1, 0, 0, 0); //dagen, uren, minuten, seconden
rtc.adjust(rtc.now() +verschil); //geeft de dag +1
}

void b11PopCallback(void*ptr)
{
TimeSpan verschil(-1, 0, 0, 0); //dagen, uren, minuten, seconden
rtc.adjust(rtc.now() +verschil); //geeft de dag -1
}

void b9PopCallback(void*ptr)
{
// geeft de maand plus 1
DateTime now=rtc.now();
int maand = now.month();
if(maand < 12)
{
maand++;
}
else
{
maand = 0;
}
DateTime nieuweTijd(now.year(), maand, now.day(), now.hour(), now.minute(), now.second());
rtc.adjust(nieuweTijd);
}

void b12PopCallback(void*ptr)
{
//geeft de maand -1
DateTime now=rtc.now();
int maand = now.month();
if(maand >1)
{
maand--;
}
else
{
maand = 12;
}
DateTime nieuweTijd(now.year(), maand, now.day(), now.hour(), now.minute(), now.second());
rtc.adjust(nieuweTijd);
}

void b10PopCallback(void*ptr)
{
//geeft het jaar +1
DateTime now=rtc.now();
int jaar = now.year();
jaar++;
DateTime nieuweTijd(jaar, now.month(), now.day(), now.hour(), now.minute(), now.second());
rtc.adjust(nieuweTijd);
}

void b13PopCallback(void*ptr)
{
//geeft het jaar -1
DateTime now=rtc.now();
int jaar = now.year();
if(jaar > 2000)
{
jaar--;
}
DateTime nieuweTijd(jaar, now.month(), now.day(), now.hour(), now.minute(), now.second());
rtc.adjust(nieuweTijd);
}


Is hier al iets op uit te maken? Doe ik iets fout?
Groet,
Ben.

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

Re: Wijzigen component ID in Nextion editor

Berichtdoor Koepel » 09 Mei 2017, 17:50

Uhm, nee, zo iets heb ik ook (ik gebruik de pjrc.com TimeLib library).
Wel doe ik binnen die functie meteen een update van de tijd. Dan hoef ik niet te wachten totdat de seconde voorbij is voor een update.
Als ik heel snel vaak druk, dan loopt het iets achter, maar elke tik op het knopje wordt gepakt.

Misschien is er nog meer aan de hand in jouw sketch, en is een geluks-treffer nodig om net even tussendoor de tijd te kunnen wijzigen.

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

Re: Wijzigen component ID in Nextion editor

Berichtdoor benvo » 09 Mei 2017, 19:04

@koepel,
In de void loop() heb ik staan: CurrentTime = rtc.now
Daar wordt de huidige tijd gezet.
Het sketch deel dat ik hierboven liet zien staat boven de void setup()
Dan wordt dit deel dus maar één keer doorlopen? Of althans zo vaak ik op een knop druk.
Of zou ik dus, CurrentTime = rtc.now, ook in dit sketch gedeelte moeten zetten? Bovenin bijvoorbeeld?
Wellicht moet het nog anders?

Zoals altijd(!) weer dank voor je reactie!

Groet,
Ben.

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

Re: Wijzigen component ID in Nextion editor

Berichtdoor Koepel » 09 Mei 2017, 22:19

Die callback functies worden iedere keer aangeroepen, als je op het scherm op een knop drukt. Dus als je 10 keer op een knop druk, dan wordt de bijbehorende callback functie ook 10 keer aangeroepen.

De CurrentTime = rtc.now is normaal bij het gebruik van de Adafruit functies om de tijd op te halen.

In de callback functies wordt "rtc.adjust()" gebruikt, die zet de nieuwe tijd in de DS3231 RTC chip.

Wanneer je in je sketch nog steeds de setDS3231time() aanroept, dan gaat alles natuurlijk de mist in.

VorigeVolgende

Terug naar Overige Software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 5 gasten