Wanneer je dat doet, ga je dus telkens de gehele zone wissen, en krijg je mogelijk weer een knipperende weergave.
Maar ook doe je dan meer dure handelingen naar je scherm dan noodzakelijk.
Kun je hier wat mee ?
Jouw antwoorden zijn stukken code.
Ik vroeg om het eens te bekijken zonder er meteen code van te maken, en er dan over te vertellen wat je bedacht hebt.
Wat ik daarmee wil bereiken, is dat je langer (hopelijk beter) nadenkt voor je werkelijk iets gaat bouwen of coderen.
Wist je dat je ook codes kunt maken met behulp van flowcharts zoals die in mijn vorige post ?
De flowchart die daar staat is daarom ook al bijna de code die je zou kunnen maken, en dat is iets heel anders als wat je in jouw laatste 2 antwoorden hebt gemaakt.
Ik heb wel bewust niet alles uitgeschreven, weer om jou aan het denken te zetten.
In jouw laatst geplaatste antwoord, gaat volgens mij nog iets fout met negatieve getallen.
Verder sla je wel stappen over waardoor je geen rekening houdt met nog grotere getallen en/of te grote getallen, maar ik weet ook niet in welke orde van grootte die getallen kunnen zitten.
Ik zie ook dat je er een eigen functie van gemaakt hebt, maar ik vraag me af of dat noodzakelijk is.
Mijn persoonlijke voorkeur zou dat niet hebben.
ik heb de flowchart die jij gemaakt hebt ook als voorbeeld gebruikt , alleen de getallen verandert omdat sommige gevallen niet voorkomen.
IK heb er ook een aparte functie van gemaakt omdat ik zie dat de getallen voor de temperatuur en voor de luchtvochtigheid eigenlijk hetzelfde aantal spaties nodig hebben om weer te verdwijnen.
En om het flikkeren weg te halen, lijkt me een idee om wat overschreven gaat worden, niet te overschrijven met spaties en wel het gebied dat overblijft.
Wil je dan graag een flowchart van wat ik bedacht hebt.
Voor ik het vergeet,
De temperaturen van deze sensor gaan van -40 tot 80 graden en de luchtvochtigheid gaat van 0 tot 100.
Vindt het heel lastig om steeds te "gokken" wat jij of sterretje precies van me willen.
Ik denk dat dat niet helemaal waar is. Ik heb dit topic slechts losjes gevolgd; als ik het goed begrijp wil je alleen de actuele data verversen en zat je vast met het feit dat er af een toe wat achterblijft. Dit probeer je op te lossen door het aantal benodigde spaties te tellen.
De tabel in bericht 26 geeft aan dat je 0, 1 of 2 spaties nodig hebt. Echter de code in bericht 27 geeft nooit het getal 2 terug.
Het onderstaande programma is een gemodificeerde versie van jouw programma om te demonstreren wat er fout gaat.
float temp = -50.3;
float oldTemp = NAN;
void setup()
{
Serial.begin(115200);
displayData();
for (uint8_t cnt = 0; cnt < 10; cnt++)
{
temp += 10;
displayData();
}
}
void loop()
{
}
int numberOfSpaces(float number)
{
if (number < 0)
{
if (number < -10)
return 0;
}
else
{
return 1;
}
if (number >= 10)
{
return 1;
}
if (number < 10 && number > 0)
{
return 1;
}
return 0;
}
void displayData()
{
int spaces;
// ---- Temperature ----
if (temp != oldTemp)
{
//LCD.setCursor(10, 0); // numbers aligned
Serial.print("'");
// print getal
Serial.print(temp, 1);
spaces = numberOfSpaces(temp);
Serial.print(" ");
Serial.print("C");
// display spaces to fill the rest in
for (uint8_t cnt = 0; cnt <= spaces; cnt++)
{
Serial.print(" ");
}
Serial.println("'");
oldTemp = temp;
}
}
Het gebruikt de seriële monitor in plaats van een LCD en de temperatuur die geprint wordt staat tussen enkele aanhalingstekens zodat de spaties gezien kunnen worden. Verder is het graden symbool verwijderd omdat de seriële monitor dat niet aan kan (ik heb er een spatie voor in de plaats gezet).
Het resultaat is
'-50.3 C '
'-40.3 C '
'-30.3 C '
'-20.3 C '
'-10.3 C '
'-0.3 C '
'9.7 C '
'19.7 C '
'29.7 C '
'39.7 C '
'49.7 C '
Zoals je kunt zien zijn -0.3 en 9.7 iets minder wijd dan de andere getallen; ze missen een spatie.
Maar als ik word uitgedaagd om dit ook op te lossen , moet ik er even over nadenken hoe ik als het getal kleiner is dan -10 of 10 bij een positief getal er een spatie voor moet.
eerste idee is om dit te doen :
void displayData() {
int spaces;
// ---- Temperature ----
if (temp != oldTemp) {
LCD.setCursor(10, 0); // numbers aligned
// print getal
for (uint8_t cnt= 0; cnt <=spaces; cnt++) {
print(" ");
}
LCD.print(temp);
spaces = numberOfSpaces(temp);
LCD.write(223);
LCD.print("C");
// display spaces to fill the rest in
for (uint8_t cnt = 0; cnt <= spaces; cnt++) {
LCD.print(" ");
}
oldTemp = temp;
}
}
Als dit werkt, zou ik hier ook weer een aparte functie van kunnen maken, omdat die twee keer gebruikt wordt.
Het idee werkt helaas niet.
Dus terug naar de tekentafel
Ik zie dus nu dit :
23
2627
{ { if (number < -10)
$
false false
GND SIG VCC
' -50.3 C '
' -40.3 C '
' -30.3 C '
' -20.3 C '
' -10.3 C '
' -0.3 C '
' 9.7 C '
' 19.7 C '
' 29.7 C '
' 39.7 C '
' 49.7 C '
De C van de eerste regel wordt overschreven door de spatie van de tweede regel als het getal minder decimalen heeft en de C van de tweede regel door de eerste spatie op de derde regel.
Zoals gezegd heb ik dit onderwerp niet echt gevolgd.
Je kunt een keer kijken hoe je dtostrf() kunt gebruiken om je float variabelen om te zetten naar een geformatteerde tekst; op die manier hoef je geen spaties te tellen.