Wijzigen component ID in Nextion editor

Software die niet past in bovenstaande onderwerpen
Gebruikers-avatar
Berichten: 1738
Geregistreerd: 06 Aug 2016, 01:03

Re: Wijzigen component ID in Nextion editor

Berichtdoor Koepel » 13 Mei 2017, 19:50

Volgens mij wordt nog steeds de seriële poort naar het scherm overladen.

@benvo, bij veel schrijven naar een seriële poort kan de sketch opeens honderd keer trager worden. Wanneer er veel wordt geschreven naar een seriële poort, dan raakt de buffer (in de Serial library) vol. Op dat moment gaat een Serial.write() of Serial.println wachten totdat er een byte vrij is in de buffer, en plaats dan weer een karakter, en gaat dan weer wachten op de volgende vrije plek, enzovoorts.

Hieronder beschrijf ik wat mij opvalt wanneer ik zomaar een beetje door de code scroll. Dus je hebt nog wat te doen.

Dit is nodig:
1 ) fouten er uit
2 ) in de loop() alleen maar af en toe iets naar het scherm sturen, om de seriële communicatie en de sketch aan de gang te houden.
3 ) netjes maken

1a )
Hier:
Code: Alles selecteren
  Serial.begin(9600);
  delay(1000); // wacht to de Serial monitor geopend wordt.
graag de delay er uit. Is dat ergens voor nodig ?

1b )
Kijk in setup(). De rtc.begin() zit er twee keer in. Zit er een batterij in de RTC module ? Dan hoef je niet steeds de compiler tijd te gebruiken.
Probeer deze regels eens weg te halen:
Code: Alles selecteren
  // 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!


1c )
Kun je dit:
Code: Alles selecteren
void loop(void)

// Stelt in op de huidige tijd
{
  CurrentTime = rtc.now();

Wijzigen naar dit:
Code: Alles selecteren
void loop(void)
{


1d )
Het updaten van de tijd naar het scherm valt verkeerd binnen de haakjes. Je doet dat nu binnen de "if (x < 22 || x > 29)", dat is niet de bedoeling.

1e )
Wil je echt "t1" ... "t5" voor de tijd en de datum ? Kun je dat beperken tot twee text componenten zoals Nico schrijft.
In de "tijdString" kun je maar één ding bewaren. Je gebruikt het nu 6 keer door elkaar.
Wanneer je twee text componenten maakt, eentje voor de tijd en eentje voor de datum, dan heb je ook maar twee dingen nodig om het te onthouden. Bijvoorbeeld 'oudeTijd' en 'oudeDatum' of 'tijdStringOud' en 'datumStringOud'.

1f )
Wanneer je iets stuurt naar een pagina die op dat moment niet aktief is, dan wordt dat volgens mij niet gepakt. Dat weet ik niet zeker, maar ik dacht dat er dan niets mee gedaan wordt. Volgens mij is het nodig dat je alleen dingen stuurt naar de pagina die op dat moment aktief is. Dit weet ik niet zeker.

2a )
Je roept bij iedere keer de loop() doorlopen de "p0.setPic()" aan. In de ITEAD Nextion library wordt dat een commando dat naar het display wordt gestuurd. Dat overlaadt de seriële poort naar het display.
Kun je die met millis() beperken tot één of twee keer per seconde ? Ik weet niet hoe vaak het getal kan wijzigen, dus bij een wijziging van het getal updaten is misschien nog steeds te snel.

3 )
Het wordt een beetje veel. Daardoor wordt de code onduidelijk. Je kunt dingen uit de loop() halen en ze in een functie stoppen. Of je kunt in de Arduino IDE tabbladen toevoegen.

Advertisement

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

Re: Wijzigen component ID in Nextion editor

Berichtdoor benvo » 14 Mei 2017, 10:55

nicoverduin schreef:Je aanpak betekent nog steeds dat je 3x naar het scherm schrijt terwij het in 1x kan. En je vergelijking klopt niet meer


@Nico,

Even in mijn eigen woorden vertellen wat ik denk dat er gebeurd:
sprintf(tijdString, "%02d",, now.hour()); Drukt de uren af op mijn scherm (twee getallen met een nul voorloop ingeval het getal lager dan 10 is.)

if(strcmp(tijdString,vorigeTijd)!=0) Als de waarde die in de tijdString zit bij deze vergelijking met de vorigeTijd GEEN nul is...

...dan wordt
t0.setText(tijdstring); De waarde die in de tijdString zit wordt afgedrukt in mijn tekstvak t0

strcpy(vorigeTijd,tijdString); De tijdStringwaarde wordt gekopieëerd naar vorigeTijd.

Als dit juist is dan vertel ik even waarom ik de uren en minuten en seconden plus de data apart dacht te moeten houden.

In de instellingen zit de mogelijkheid om ook alle items, uren, minute, seconden, etc. apart met één te vermeerderen of te verminderen. Als ik één tijd tekstveld gebruik en één datum tekstveld dan kan dit niet meer?

Overigens ben ik erg dankbaar voor jullie lessen. Het maakt me meer en meer duidelijk wat en hoe iets gebeurd.

Groet,
Ben.

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

Re: Wijzigen component ID in Nextion editor

Berichtdoor benvo » 14 Mei 2017, 11:47

@Koepel,

Ik ga jouw rijtje even af onder dankzegging voor je leerzame inbreng!
1a=weggehaald

1b=/*aldus uitgeschakeld*/

1c, wanneer deze raad opvolg ontstaan er problemen, kennelijk mag ik, "CurrentTime=rtc.now() "niet uit de loop halen?

1d=De aanduiding if(x<22||x>29) is een temperatuur waarde. Het is een minimum en maximumwaarde die bij overschrijding naar boven of naar beneden een alarm "lampje" laat knipperen. In dit deel wordt overigens helemaal geen tijdaanduiding gebruikt maar een sensorwaarde gelezen en naar de Nextion afgedrukt.

1e= Hierover schreef ik ook iets aan Nico hierboven, misschien wil je dat even lezen? Het is dus niet dat ik beslist iets wil maar omdat je mij eerder al hielp met een klokinstelling mogelijkheid waar je uren, minuten, etc. apart kunt instellen. Ik vergelijk, althans dat denk ik (!), de uren bijvoorbeeld alleen in de uren tijdString. Zodra ik naar de minuten ga worden die ook weer ingelezen in de tijdString die daar staan. Of moet ik dan ook elke tijdstring voor elk gebruik apart benoemen? Dus bijvoorbeeld; urenString, minutenString, secondenString etc.?

1f=Volgens mij zie je dit juist! Zodra ik overschakel naar een pagina zie ik de gegevens naar de juiste waardes verspringen.

2a=De interval voor het alarmlichtje staat nu op 2 seconden. Dit gedeelte zal in de praktijk niet vaak gebruikt worden. Als het gebruikt wordt is er nl. is mis! Te hoge of te lage watertemperatuur. Het is dus de temperatuurbewaking.

3 = Je hebt vast wel begrepen wat de bedoeling is van deze code. Het is een aquariumcontroller die voor automatisering van licht, temperatuur en pH gehalte bedoelt is. De laatst genoemde komt er dus nog bij.

Ik ben al bezig geweest met pogingen om iets uit de loop te halen hetgeen tot nu toe resulteerde in problemen die ik (nog) niet kan overzien.

Ik zal even gaan Googelen op IDE tabbladen, het is een fenomeen dat ik nog niet ken.


Ik ben zeer erkentelijk voor de tijd en moeite die jullie nemen om te helpen. Ik merk zelf dat hierdoor mijn kennis toeneemt, soms begrijp ik nu de antwoorden die je in het verleden gaf.
Het wordt beter! Dank!

Groet,
Ben.

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

Re: Wijzigen component ID in Nextion editor

Berichtdoor Koepel » 14 Mei 2017, 12:22

1c )
O ja, ik zie je het nu. Je gebruikt 'CurrentTime' toch.
In de loop() vraag je twee keer de tijd op met rtc.now(), dat hoeft maar één keer. Kijk maar of je dat netter kunt maken.

1d )
Zoals de haakjes staan, ga je toch echt de tijd naar het scherm schrijven, binnen de if-statement van de temperatuur. Echt waar.

1e )
Het instellen van de tijd staat los van de huidige tijd op het scherm zetten. Helemaal los van elkaar. Je hebt de functies van de RTClib en daar kun je mee doen wat je wilt.

1f )
Hmmmm, ik weet nog niet wat het beste is om te doen bij waarden op een andere pagina.

2a )
Je gaat echt heel vaak het plaatje verversen. Het plaatje verversen staat namelijk buiten de interval van 1 seconde.

In de Arduino IDE zit rechtsboven een heel klein knopje voor een drop-down menu. Daar staat ook "Nieuw Tabblad" bij. Wanneer je het een naam geeft zonder extensie dan wordt het automatisch een *.ino bestand. Dan kun je bepaalde functies in dat andere tabblad zetten.

Kun je eens op Ctrl+T drukken ? Er zitten nu twee fouten in omdat je een rommeltje maakt van het inspringen en de haakjes. Ik zie het liefst code waarbij iedere inspringing, ieder haakje en iedere spatie op de juiste plek staat.

Voor het opvragen van de temperatuur en andere dingen, kun je even uitschakelen (door er '//' voor te zetten). Ik weet niet hoe lang die andere dingen duren, en misschien houden die boel op, waardoor in de loop() niet vaak genoeg naar drukken op knoppen wordt gekeken.

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

Re: Wijzigen component ID in Nextion editor

Berichtdoor benvo » 14 Mei 2017, 12:44

@Nico en @Koepel.

Jullie schreven allebei dat mijn vergelijkingen niet meer kloppen. Daarover nadenkend bedacht ik; De, dus gelijke, tijdString/vorigeTijd benaming, overal toegepast, wordt telkens door mij met iets anders, uren, seconden etc. gevuld en vergeleken. Dus dacht ik, wat als ik die benaming aanpas bij elk ander item. Even afgezien of die methode goed is maar puur gezien uit wat er gebeurd. Dus ik deed het onderstaande met het gevolg dat er iets heel vreemds gebeurd. De tijd en datum staan goed op de hoofdpagina maar klik ik naar de instelpagina verdwijnen de tijd en datum waarden, ga ik terug naar de hoofdpagina zijn ze ook daar weg?


cpp code
Code: Alles selecteren
//Zet de tijd op mijn Nextion scherm.

    DateTime now=rtc.now();
    char urenString[9];
    static char urenTijd[9];

    sprintf(urenString, "%02d", now.hour());

    if (strcmp(urenString, urenTijd) != 0)
    {
     t0.setText(urenString);                        // update het display met de tijd in uren
     strcpy(urenTijd, urenString);                // bewaar tijd string voor de volgende keer
    }


    char minutenString[9];
    static char minutenTijd[9];
    sprintf(minutenString, "%02d", now.minute());

    if (strcmp(minutenString, minutenTijd) != 0)
    {
     t1.setText(minutenString);                        // update het display met de tijd in minuten
     strcpy(minutenTijd, minutenString);                // bewaar tijd string voor de volgende keer
    }



    char secondenString[9];
    static char secondenTijd[9];
    sprintf(secondenString, "%02d", now.second());

    if (strcmp(secondenString, secondenTijd) != 0)
    {
     t2.setText(secondenString);                        // update het display met de tijd in seconden
     strcpy(secondenTijd, secondenString);                // bewaar tijd string voor de volgende keer
    }




    //Zet de datum op mijn Nextionscherm

    char dagString[9];
    static char dagTijd[9];
    sprintf(dagString, "%02d", now.day());

    if (strcmp(dagString, dagTijd) != 0)
    {
     t3.setText(dagString);                        // update het display met de tijd in dagen
     strcpy(dagTijd, dagString);                // bewaar tijd string voor de volgende keer
    }

    char maandString[9];
    static char maandTijd[9];
    sprintf(maandString, "%02d", now.month());

    if (strcmp(maandString, maandTijd) != 0)
    {
     t4.setText(maandString);                        // update het display met de tijd in maanden
     strcpy(maandTijd, maandString);                // bewaar tijd string voor de volgende keer
    }


    char jaarString[9];
    static char jaarTijd[9];
    sprintf(jaarString, "%02d", now.year());

    if (strcmp(jaarString, jaarTijd) != 0)
    {
     t5.setText(jaarString);                        // update het display met de tijd in jaren
     strcpy(jaarTijd, jaarString);                // bewaar tijd string voor de volgende keer
    }

    }


groet,
Ben

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

Re: Wijzigen component ID in Nextion editor

Berichtdoor benvo » 14 Mei 2017, 13:06

Koepel schreef:1c )
O ja, ik zie je het nu. Je gebruikt 'CurrentTime' toch.
In de loop() vraag je twee keer de tijd op met rtc.now(), dat hoeft maar één keer. Kijk maar of je dat netter kunt maken.

1d )
Zoals de haakjes staan, ga je toch echt de tijd naar het scherm schrijven, binnen de if-statement van de temperatuur. Echt waar.

1e )
Het instellen van de tijd staat los van de huidige tijd op het scherm zetten. Helemaal los van elkaar. Je hebt de functies van de RTClib en daar kun je mee doen wat je wilt.

1f )
Hmmmm, ik weet nog niet wat het beste is om te doen bij waarden op een andere pagina.

2a )
Je gaat echt heel vaak het plaatje verversen. Het plaatje verversen staat namelijk buiten de interval van 1 seconde.



In de Arduino IDE zit rechtsboven een heel klein knopje voor een drop-down menu. Daar staat ook "Nieuw Tabblad" bij. Wanneer je het een naam geeft zonder extensie dan wordt het automatisch een *.ino bestand. Dan kun je bepaalde functies in dat andere tabblad zetten.

Kun je eens op Ctrl+T drukken ? Er zitten nu twee fouten in omdat je een rommeltje maakt van het inspringen en de haakjes. Ik zie het liefst code waarbij iedere inspringing, ieder haakje en iedere spatie op de juiste plek staat.

Voor het opvragen van de temperatuur en andere dingen, kun je even uitschakelen (door er '//' voor te zetten). Ik weet niet hoe lang die andere dingen duren, en misschien houden die boel op, waardoor in de loop() niet vaak genoeg naar drukken op knoppen wordt gekeken.


1c= 1x CurrentTime=rtc.now() en 1x DateTime=rtc.now() beide keren blijkt dit noodzakelijk?
1d=Deze begrijp ik echt niet! De bedoeling is hoe dan ook dat dit een min. max. waarde geven waar beslist niet onder of boven gegaan mag worden. M'n arme visjes zouden het niet overleven. En het werkt ook zo. Als ik de sensor even in mijn hand hou en de, bijvoorbeeld, te lage temp. loopt op dan verdwijnt het lampje keurig. Evenzo als ik de sensor koel bij een hogere temp. als de max. aangegeven waarde. Het zal dom zijn maar ik zie daar dus geen tijd?
1e= Deze is belangrijk want dat betekend dus dat ik gerust éen datumblok en één tijd blok kan hanteren?
1f= Zie mijn sketch hierboven waar iets raars gebeurd?
2a= Kennelijk moet ik nog heel goed gaan nadenken over hetgeen hier nu eigenlijk gebeurd. Dat zal ik dus ook doen. Als eerder opgemerkt zal het probleem niet al te groot zijn omdat dit bijna nooit voorkomt. Het mag eigenlijk niet voorkomen omdat dit vergaande gevolgen zou hebben. Daarom zit er dit alarm op.

Elk Tabblad binnen een programma wordt dus wel als deel van datzelfde programma gezien. Waarom dan die aparte bladen. Is dit gedaan om duidelijkheid te krijgen?
Zo zou ik me kunnen voorstellen dat, in mijn geval, er een afzonderlijk tabblad is voor het licht, een voor de temperatuur en een voor het pH gehalte? Of heeft het een soort, "gosub" functie?

Groet,
Ben.

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

Re: Wijzigen component ID in Nextion editor

Berichtdoor Koepel » 14 Mei 2017, 15:46

Heb je al op Ctrl+T gedrukt ?

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

Re: Wijzigen component ID in Nextion editor

Berichtdoor benvo » 14 Mei 2017, 15:58

@Koepel.
Ja, heb ik gedaan. (Ctrl+T)

Wanneer ik verminder tot twee tekstvakken met sprintf gebruik zoals geadviseerd én ik schakel de temp. uit in de loop werkt er nog niets. Alle andere adviezen blijken ook niets te doen. Ga ik echter terug naar de aanvankelijk klok instelling zoals hieronder en laat verder alles aan dan werkt het, na wat vaker op de knoppen drukken, wel! Kennelijk, onze redenering volgend, legt deze sketch juist minder druk op de Serial? Tot nu toe is dit dus, gek genoeg de enige manier waarop het wél werkt en dat zou dus allemaal andersom moeten zijn.

cpp code
Code: Alles selecteren

//Zet de tijd op mijn Nextion scherm.


    Serial2.print("t0.txt=\"");  //t0 is mijn uren teksttbox
    if (CurrentTime.hour() < 10)
    {
      Serial2.print("0");
    }
    Serial2.print(CurrentTime.hour());
    Serial2.print("\"\xFF\xFF\xFF");


    Serial2.print("t1.txt=\"");  //t1 is mijn minuten tekstbox
    if (CurrentTime.minute() < 10)
    {
      Serial2.print("0");
    }
    Serial2.print(CurrentTime.minute());
    Serial2.print("\"\xFF\xFF\xFF");



    Serial2.print("t2.txt=\"");  //t2 is mijn seconden tekstbox
    if (CurrentTime.second() < 10)
    {
      Serial2.print("0");
    }
    Serial2.print(CurrentTime.second());
    Serial2.print("\"\xFF\xFF\xFF");


    //Zet de datum op mijn Nextionscherm

    Serial2.print("t3.txt=\"");  //t32 is mijn dag tekstbox
    if (CurrentTime.day() < 10)
    {
      Serial2.print("0");
    }
    Serial2.print(CurrentTime.day());
    Serial2.print("\"\xFF\xFF\xFF");



    Serial2.print("t4.txt=\"");  //t4 is mijn maand tekstbox
    if (CurrentTime.month() < 10)
    {
      Serial2.print("0");
    }
    Serial2.print(CurrentTime.month());
    Serial2.print("\"\xFF\xFF\xFF");



    Serial2.print("t5.txt=\"");  //t5 is mijn jaar tekstbox
    if (CurrentTime.year() < 10)
    {
      Serial2.print("0");
    }
    Serial2.print(CurrentTime.year());
    Serial2.print("\"\xFF\xFF\xFF");

  }


Groet,
Ben.

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

Re: Wijzigen component ID in Nextion editor

Berichtdoor nicoverduin » 14 Mei 2017, 16:03

Ik geef het op..... nig nooit iemand meegemaakt die zo stront eigenwijs is.... suc6
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

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

Re: Wijzigen component ID in Nextion editor

Berichtdoor Koepel » 14 Mei 2017, 16:55

nicoverduin schreef:... nig nooit iemand meegemaakt die zo stront eigenwijs is...
Nico, dan moet jij een gelukkig mens zijn :P
Ik ken tientallen mensen die daar duizendvoud overheen gaan.

VorigeVolgende

Terug naar Overige Software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 1 gast