c taal programma LCD


Dankjewel, @hennep, een fraaie bevestiging van wat ik ook al aandroeg. Maar iets zegt me dat de topicstarter sterker is in knippen/plakken dan in doorgronden :(

hoe beter de vraag geschreven, zoveel te meer kans op goed antwoord
High met Henk

Special Member

oef wat neigt dit naar een schoolvraag....

E = MC^2, dus de magnetische compatibiliteit doet kwadratisch mee???

Misschien ook leuk om naar te kijken

c code:


#include <stdio.h>

byte i = 0;
char text[4];
void main(){
  sprintf(text, "%03u", i++);
  lcd.print(text);
  delay(1500);
  Serial.println(text);
}
hennep

Golden Member

Ik vind die lcd_print_tekst wel heel krakkemikkig in elkaar zitten. Als je daar serieus mee verder wilt gaan dan zou ik in ieder geval deze code:

code:

while( zin[i] != 0x0d )

Aanpassen zodat ook bij het einde van de tekenreeks wordt gestopt met printen, zo dus:

code:

while( zin[i] && zin[i] != 0x0d )
reading can seriously damage your ignorance

Het einde van een tekenreeks wordt toch aangegeven door 0x0 en door nix anders? Het hangt inderdaad allemaal met haken en ogen aanelkaar.

0x0d is trouwens een 'carriage return', in Unix en gelijkaardige omgevingen wordt deze vaak weggelaten, enkel een 0x0a oftewel 'linefeed' volstaat. Om aan een nieuwe regel te beginnen, welteverstaan, niet als eindindicator van de tekst.

[Bericht gewijzigd door big_fat_mama op 6 december 2021 19:43:58 (47%)]

hoe beter de vraag geschreven, zoveel te meer kans op goed antwoord
hennep

Golden Member

Op 6 december 2021 19:37:33 schreef big_fat_mama:
Het einde van een tekenreeks wordt toch aangegeven door 0x0 en door nix anders?

Klopt, maar heb je gezien dat in de lcd_print_tekst functie van de TS niet wordt gecontroleerd of 0x00 is bereikt. Dus bij een tekst zonder 0x0D gaat het printen oneindig door en hangt de uC zich op.
Ik denk dat het de bedoeling van de TS was om teller steeds aan het begin van de regel te printen. Maar de \r wordt helemaal niet geprint, zodra dat teken wordt gezien stopt het printen. De volgende tellerstand wordt dan toch gewoon er achter geprint en de \r genegeerd.

TS kan maar beter een andere lcd library zoeken.

reading can seriously damage your ignorance

TS kan maar beter een andere lcd library zoeken.

Helemaal akkoord - wat nu voorligt is amateuristisch geklieder.

hoe beter de vraag geschreven, zoveel te meer kans op goed antwoord
Sine

Moderator

Op 6 december 2021 17:58:47 schreef High met Henk:
oef wat neigt dit naar een schoolvraag....

De TS is blijkbaar nog met zijn eindwerk bezig ...

ow srry hoor dat jullie het allemaal weten en dat het niet proper of goed genoeg is
daarom dat ik dus de vraag stel aan mensen die het misschien wel weten
btw het is geen eindwerk want ik zit in het 4e middelbaar
en voor de duidelijkheid ik zoek da omdat ik erna een berekening moet zoeken op een of andere manier zodat die het aantal pulsen per seconde kan uitrekenen naar km per uur

btw het is geen eindwerk want ik zit in het 4e middelbaar
en voor de duidelijkheid ik zoek da omdat ik erna een berekening moet zoeken op een of andere manier zodat die het aantal pulsen per seconde kan uitrekenen naar km per uur

Zo, Jammer hé dit. Ik moest vroeger op school de berekeningen bedenken. Dat had je geleerd bij wiskunde en natuurkunmde. Ik hoefde ze nooit te zoeken. Dat kon ook niet.

In het geval van programmeren zocht je dingen als de syntax op. Of natuurconstanten zocht je op.

Tegenwoordig heb je hé google die zoekt voor je. Of een forum........

Tsja, hoe het vroeger was dat zal onze topicstarter worst wezen, wellicht - misschien wel een beetje terecht. Maar als zij/hij niet beleefder leert te schrijven, dan begint de carrière onder een slecht gesternte.

Meer ter zake: werd er al iets gedaan met de (zeer terechte!) suggestie

TS kan maar beter een andere lcd library zoeken.

??

[Bericht gewijzigd door big_fat_mama op 4 januari 2022 17:50:18 (25%)]

hoe beter de vraag geschreven, zoveel te meer kans op goed antwoord

hoooi ik ben terug
en ik heb een nieuw probleempje
wrs een simpele aanpassing in het programma (denk ik )
ik heb de variabele voor op een lcd en mijn reedcontact met 5v schakeling er aan gehangen die dus elke keer +1 doet als de magneet voorbij de sensor gaat
maar nu is mijn probleem dat de lcd hem zelf moet refreshen elke keer dat de magneet er voorbij gaat maar ik weet niet hoe dat moet. weet hier iemand een oplossing voor?

Zolang je niet antwoordt op eerdere vragen moet je geen nieuwe aandragen.

hoe beter de vraag geschreven, zoveel te meer kans op goed antwoord

Op 28 januari 2022 14:27:44 schreef big_fat_mama:
Zolang je niet antwoordt op eerdere vragen moet je geen nieuwe aandragen.

als je kan lezen dan weet je dat ik het antwoord er al op gevonden heb.
en ik heb ook al het antwoord gevonden van mijn vraag die ik net gesteld had. maar toch bedankt dat je zo vriendelijk bent

buckfast_beekeeper

Golden Member

Zoek eens in de datsheet hoe je een display kan leeg maken of hoe je gegevens op dezelfde locatie kan schrijven. Helemaal leeg maken is meestal niet nodig. Als bijvoorbeeld de tekst 'puls:' er staat, hoef je dat niet telkens weer te schrijven.

Er werd al de raad gegeven de LCD librarie op te zoeken. Daar zitten alle zaken die je nodig hebt netjes in.

Van Lambiek wordt goede geuze gemaakt.

Op 28 januari 2022 14:04:50 schreef Teun9140:
maar nu is mijn probleem dat de lcd hem zelf moet refreshen elke keer dat de magneet er voorbij gaat maar ik weet niet hoe dat moet. weet hier iemand een oplossing voor?

Jep.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

die library/datasheets heb ik gevonden ik heb daar ook nuttige dingen gevonden. (voor diegene die vragen, ik heb het antwoord op mijn eerdere vraag gevonden)
ik heb een nieuwe vraag, ik ben met de pulsenteller en alles wat ik nu heb een programma aan het maken voor het aantal km per uur te berekenen. heeft er iemand hier een website voor waar ze het al eens gemaakt hebben?

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com

weet er iemand welk je moet gebruiken zodat mijn waarden worden afgerond op 1 cijfer na de komma ?
ik gebruik nu '%d' in mijn sprintf functie
kan iemand mij helpen hierin ?
ik had ook al eens %2.2f gebruikt dat iemand aanrade maar zou niet weten hoe het werkt

je moet .1 gebruiken om 1 cijfer achter de komma te krijgen.

code:

char buf[32];
sprintf (buf, "%5.1f", 3.1415926);
// buf = "  3.1" 

De 5 is de totale ruimte, de .1 geeft aan dat er 1 cijfer achter de komma komt.

[Bericht gewijzigd door rew op 27 april 2022 11:28:28 (22%)]

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

ik had ook al eens %2.2f gebruikt dat iemand aanrade maar zou niet weten hoe het werkt

Niemand belet u het eens uit te proberen.
Er kan zelfs wat geschoven worden met de parameters, bv. %5.1f, %6.2f, enzovoort.

%2.2f is wat gek want dan worden er twee cijfers weergegeven, waarvan twee na de komma... Misschien niet zo nuttig, en ook niet echt de bedoeling.

Verder heb ik nul komma niks toe te voegen aan het antwoord van @rew hierboven, dat is compleet en helemaal correct.

hoe beter de vraag geschreven, zoveel te meer kans op goed antwoord

Ik vind zelf deze 2 websites best goed.
Het zijn ook websites die ongeveer elke keer bovenaan staan als je gaat zoeken naar info.

https://www.cprogramming.com/tutorial/c/lesson1.html

https://www.cplusplus.com/doc/tutorial/

Een website zoals:
https://isocpp.org/

is grondiger, en wat meer theoretisch en meer "correct", maar is ook een stuk "droger" en minder geschikt als leerstof voor beginners. Het is meer een website voor de exacte definities en de verschillen tussen de (best wel veel) verschillende C en C++ standaarden.

de float functie werkt niet met het gratis programma dat ik werk. zij geven dan een foutmelding. ik heb daar een alternatief voor gevonden en dat werkt maar ik zit nu met iets maar ik weet niet waar mijn fout ligt.
void main()
{
//bereken je snelheid in m/h als je km/h wil afdrukken, wil je m/s afdrukken zet dan vb in cm/s...
//gebruik zo weinig mogelijk variabelen, wat doordat we de gratis versie van Sourceboost gebruiken is de RAM beperkt bij compileren

unsigned int speed;

char buf[10],buffloat[2];//1 cijfer na komma, maak 3 voor 2 cijfers na komma

while(1)
{
sprintf(buf,"%d",speed/1000);//km klaar zetten
strcat(buf,".");//voeg komma toe
if(speed<100) strcat(buf,"0");
//if(speed<10) strcat(buf,"0");//nodig voor 2 cijfers na komma
if(speed>100)sprintf(buffloat,"%d",(speed%1000)/100);//1 cijfers na komma, maak 100 -> 10 voor 2 cijfers na komma

strcat(buf,buffloat);//cijfer na komma toevoegen aan buf

}

}

ik heb dit geschreven en ook deels van het internet overgenomen, en dat vervangt de float functie.
maar het probleem is dat mijn lcd niet meer zijn scherm refreshed.

oke hij refreshed heel de tij dus dat is niet het probleem maar de waarden veranderen niet terwijl er wel word bij getelt

buckfast_beekeeper

Golden Member

Waar schrijf je het resultaat naar het display?

Van Lambiek wordt goede geuze gemaakt.