tijdschakelaar
Re: tijdschakelaar
het 16x 2 display was ik ook op terug gevallen, ik dacht op display:
A:W xxDay 00:00
B:L xxDay 00:00
Op een 16x4 (heb ik hier ook liggen) zou het meer uitgebreid kunnen
info is:
welke accu : laden (L) of wachten (W) aantal dagen uren en minuten.
ik heb namen en seconden weggelaten ivm de ruimte op display
ga vandaag naar mijn andere hobby Techniek en stoomdag wijchen met de kleinkinderen , worden deze misschien ook door techniek virus aangestoken
Groet Wim
A:W xxDay 00:00
B:L xxDay 00:00
Op een 16x4 (heb ik hier ook liggen) zou het meer uitgebreid kunnen
info is:
welke accu : laden (L) of wachten (W) aantal dagen uren en minuten.
ik heb namen en seconden weggelaten ivm de ruimte op display
ga vandaag naar mijn andere hobby Techniek en stoomdag wijchen met de kleinkinderen , worden deze misschien ook door techniek virus aangestoken
Groet Wim
Advertisement
Re: tijdschakelaar
Er zijn twee manieren:
1 ) Zet het scherm op in setup() en schrijf alleen de getallen.
2 ) Bij iedere update het hele scherm opnieuw schrijven.
Bij optie 2 is de code vele malen korter als ik ook nog sprintf() gebruik.
Ik kies nu voor optie 1.
Op dit moment heb ik geen normale LCD met een Arduino verbonden, dus het is voor mij droogzwemmen.
In setup() :
En de functie "ShowEverything()" zou bijvoorbeeld "StatusToSerial()" kunnen gaan heten. Daar wil ik een tweede functie naast, bijvoorbeeld "StatusToLCD()" of "UpdateLCD()".
Dat geeft de mogelijkheid om het LCD iedere seconde te wijzigen, en de serial monitor maar eens in de 5 seconden.
Op dit moment kopieer ik de code die het aantal seconden opbreekt in dagen, uren, minuten en seconden.
Met sprintf() zou een hele regel gemaakt kunnen worden.
Als je de "Day" afkort tot "D", dan kunnen de seconden er wel bij.
1 ) Zet het scherm op in setup() en schrijf alleen de getallen.
2 ) Bij iedere update het hele scherm opnieuw schrijven.
Bij optie 2 is de code vele malen korter als ik ook nog sprintf() gebruik.
Ik kies nu voor optie 1.
Op dit moment heb ik geen normale LCD met een Arduino verbonden, dus het is voor mij droogzwemmen.
In setup() :
- Code: Alles selecteren
// -------------------------------------
// Initialize the LCD and setup the text
// -------------------------------------
// Setup the LCD according this:
//
// 0123456789012345
// +----------------
// 0 |A:W xxDay hh:mm
// 1 |B:L xxDay hh:mm
//
lcd.begin( 16, 2);
lcd.print(F( "Opladen accus"));
delay( 1500);
lcd.clear();
lcd.setCursor( 0,0);
lcd.print(F( "A:- --Day --:-- "));
lcd.setCursor( 0,1);
lcd.print(F( "B:- --Day --:-- "));
En de functie "ShowEverything()" zou bijvoorbeeld "StatusToSerial()" kunnen gaan heten. Daar wil ik een tweede functie naast, bijvoorbeeld "StatusToLCD()" of "UpdateLCD()".
Dat geeft de mogelijkheid om het LCD iedere seconde te wijzigen, en de serial monitor maar eens in de 5 seconden.
Op dit moment kopieer ik de code die het aantal seconden opbreekt in dagen, uren, minuten en seconden.
- Code: Alles selecteren
void UpdateLCD()
{
for( i=0; i<2; i++)
{
// When 'i' is zero, it will be the first battery "A".
// When 'i' is one, it will be the second battery "B".
// print battery status. L = laden, W = wachten
lcd.setCursor( 2, i); // row, column
if( battery_state[i] == WAIT)
lcd.print(F( "W"));
else if( battery_state[i] == CHARGE)
lcd.print(F( "L"));
else
lcd.print(F( "E")); // E = Error.
// Show the counter in days,hh:mm:ss
int days = (int) (battery_count[i] / (24UL * 60UL * 60UL));
int hours = (int) ((battery_count[i] / (60UL * 60UL)) % 24UL);
int minutes = (int) ((battery_count[i] / (60UL)) % 60UL);
int seconds = (int) (battery_count[i] % 60UL);
// print days
lcd.setCursor( 4, i);
if( days < 10)
lcd.print(F( " "));
lcd.print( days);
// print hours
lcd.setCursor( 10, i);
if( hours < 10)
lcd.print(F( "0"));
lcd.print( hours);
// print minutes
lcd.setCursor( 13, i);
if( minutes < 10);
lcd.print(F( "0"));
lcd.print( minutes);
}
}
Met sprintf() zou een hele regel gemaakt kunnen worden.
- Code: Alles selecteren
char *pBattery = (i == 0 ? "A" : "B");
char *pStatus = (battery_state[i] == WAIT ? "W" : "L");
sprintf( buffer, "%1s:%1s %2dDay %02d:%02d, pBattery, pStatus, days, hours, minutes, seconds);
Als je de "Day" afkort tot "D", dan kunnen de seconden er wel bij.
Re: tijdschakelaar
Hallo Koepel,
eea geprobeerd,
de code
Code: Alles selecteren
cpp code
werkt, Maar ik vraag me wel af waarom : if( minutes < 10) en lcd.print(F( "0")); erin zit??
Maar met hier en daar wat aanpassingen van mijn kan ; en evt sec toevoegen krijg ik deze wel goed.
maar de
cpp code
werkt niet, ik weet ook niet precies wat ik ervoor moet zetten voor de setup.
nogmaals bedankt ik kan hier weer mee verder, hopelijk tot een goed resultaat, in ieder geval veeel hoopvoller dan de Oled en hetgeen ik geprobeerd had.
Ik zal nog heel veel moeten leren... maar met hulp zoals van jou kom ik er ooit wel? (hoop ik)
eea geprobeerd,
de code
Code: Alles selecteren
cpp code
void UpdateLCD()
{
for( i=0; i<2; i++)
{
// When 'i' is zero, it will be the first battery "A".
// When 'i' is one, it will be the second battery "B".
// print battery status. L = laden, W = wachten
lcd.setCursor( 2, i); // row, column
if( battery_state[i] == WAIT)
lcd.print(F( "W"));
else if( battery_state[i] == CHARGE)
lcd.print(F( "L"));
else
lcd.print(F( "E")); // E = Error.
// Show the counter in days,hh:mm:ss
int days = (int) (battery_count[i] / (24UL * 60UL * 60UL));
int hours = (int) ((battery_count[i] / (60UL * 60UL)) % 24UL);
int minutes = (int) ((battery_count[i] / (60UL)) % 60UL);
int seconds = (int) (battery_count[i] % 60UL);
// print days
lcd.setCursor( 4, i);
if( days < 10)
lcd.print(F( " "));
lcd.print( days);
// print hours
lcd.setCursor( 10, i);
if( hours < 10)
lcd.print(F( "0"));
lcd.print( hours);
// print minutes
lcd.setCursor( 13, i);
if( minutes < 10);
lcd.print(F( "0"));
lcd.print( minutes);
}
}
werkt, Maar ik vraag me wel af waarom : if( minutes < 10) en lcd.print(F( "0")); erin zit??
Maar met hier en daar wat aanpassingen van mijn kan ; en evt sec toevoegen krijg ik deze wel goed.
maar de
cpp code
char *pBattery = (i == 0 ? "A" : "B");
char *pStatus = (battery_state[i] == WAIT ? "W" : "L");
sprintf( buffer, "%1s:%1s %2dDay %02d:%02d, pBattery, pStatus, days, hours, minutes, seconds);
werkt niet, ik weet ook niet precies wat ik ervoor moet zetten voor de setup.
nogmaals bedankt ik kan hier weer mee verder, hopelijk tot een goed resultaat, in ieder geval veeel hoopvoller dan de Oled en hetgeen ik geprobeerd had.
Ik zal nog heel veel moeten leren... maar met hulp zoals van jou kom ik er ooit wel? (hoop ik)
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: tijdschakelaar
Als je minuten kleiner zijn dan 10 en je print het af, hoe komt het er dan uit te zien?
En "werkt niet" is wel heel erg vaag.....
En "werkt niet" is wel heel erg vaag.....
Re: tijdschakelaar
ik heb inmiddels door waarom: if( hours < 10) nl van 0 tot 9 =01, 02 enz na 10 zou het 10 , 11 moeten worden. maar na 10 krijg ik 10,11 enz te zien als 01.
code:
if ( days < 10) // functie onbekend
lcd.print(F( " "));
lcd.print( days);
// print hours
lcd.setCursor( 8, i);
if ( hours < 10) // functie onbekend
lcd.print(F( "0"));
lcd.print( hours);
// print minutes
lcd.setCursor( 11, i);
if ( minutes < 10); // functie onbekend
lcd.print(F( "0"));
lcd.print( minutes);
// print seconds
lcd.setCursor( 14, i);
if ( seconds < 10); // functie onbekend
lcd.print(F( "0"));
lcd.print( seconds);
verder mijn opmerking "werkt niet" (met toevoeging ïk weet ook niet wat er in de setup moet)
van:
char *pBattery = (i == 0 ? "A" : "B");
char *pStatus = (battery_state[i] == WAIT ? "W" : "L");
sprintf( buffer, "%1s:%1s %2dDay %02d:%02d, pBattery, pStatus, days, hours, minutes, seconds);
bedoel ik "ik zie niets op display!"
ik zal nog proberen eea aan te passen,
volgens mij moet ik (in voorbeeld 1) voor 10 de positie op bv 14 hebben en NA 10 op positie 13 ?
groet Wim
code:
if ( days < 10) // functie onbekend
lcd.print(F( " "));
lcd.print( days);
// print hours
lcd.setCursor( 8, i);
if ( hours < 10) // functie onbekend
lcd.print(F( "0"));
lcd.print( hours);
// print minutes
lcd.setCursor( 11, i);
if ( minutes < 10); // functie onbekend
lcd.print(F( "0"));
lcd.print( minutes);
// print seconds
lcd.setCursor( 14, i);
if ( seconds < 10); // functie onbekend
lcd.print(F( "0"));
lcd.print( seconds);
verder mijn opmerking "werkt niet" (met toevoeging ïk weet ook niet wat er in de setup moet)
van:
char *pBattery = (i == 0 ? "A" : "B");
char *pStatus = (battery_state[i] == WAIT ? "W" : "L");
sprintf( buffer, "%1s:%1s %2dDay %02d:%02d, pBattery, pStatus, days, hours, minutes, seconds);
bedoel ik "ik zie niets op display!"
ik zal nog proberen eea aan te passen,
volgens mij moet ik (in voorbeeld 1) voor 10 de positie op bv 14 hebben en NA 10 op positie 13 ?
groet Wim
Re: tijdschakelaar
probleem voor voorbeeld 1 opgelost .... ik had een paar ; te veel staan
laatste stuk nu:
if ( days < 10)
lcd.print(F( " "));
lcd.print( days);
// print hours
lcd.setCursor( 8, i);
if ( hours < 10)
lcd.print(F( "0"));
lcd.print( hours);
// print minutes
lcd.setCursor( 11, i);
if ( minutes < 10)
lcd.print(F( "0"));
lcd.print( minutes);
// print seconds
lcd.setCursor( 14, i);
if ( seconds < 10)
lcd.print(F( "0"));
lcd.print( seconds);
dit lijkt ok nu.
de
char *pBattery = (i == 0 ? "A" : "B");
char *pStatus = (battery_state[i] == WAIT ? "W" : "L");
sprintf( buffer, "%1s:%1s %2dDay %02d:%02d, pBattery, pStatus, days, hours, minutes, seconds);
snap ik nog niet.
bedankt
laatste stuk nu:
if ( days < 10)
lcd.print(F( " "));
lcd.print( days);
// print hours
lcd.setCursor( 8, i);
if ( hours < 10)
lcd.print(F( "0"));
lcd.print( hours);
// print minutes
lcd.setCursor( 11, i);
if ( minutes < 10)
lcd.print(F( "0"));
lcd.print( minutes);
// print seconds
lcd.setCursor( 14, i);
if ( seconds < 10)
lcd.print(F( "0"));
lcd.print( seconds);
dit lijkt ok nu.
de
char *pBattery = (i == 0 ? "A" : "B");
char *pStatus = (battery_state[i] == WAIT ? "W" : "L");
sprintf( buffer, "%1s:%1s %2dDay %02d:%02d, pBattery, pStatus, days, hours, minutes, seconds);
snap ik nog niet.
bedankt
Re: tijdschakelaar
Bijvoorbeeld als de uren '3' zijn, dan maak ik er '03' van. Dat staat netter. En laat nu net de sprintf() daarvoor gemaakt zijn, om zulke dingen te kunnen definiëren met de format string. Maar dat kun je vergeten hoor, je hoeft het niet te gebruiken.
Re: tijdschakelaar
Koepel,
de 3 en/of 03 had ik inmiddels ( door try and error ) uitgevonden, de sprintf() lukt nog niet (krijg niets op scherm misschien fout in setup?) , maar dat ga ik nog verder proberen , het gaat er ook om dat ik ( en misschien meelezers) iets leer, en niet alleen om het project.
jij nog bedankt, zonder jou had ik er veel langer over gedaan en was het nooit zo'n duidelijke code geworden, ooit leer ik het misschien.
de schakeling draait nu test (op werkelijke tijden) , heb komende periode ook minder tijd (dienstreis en familie) , maar zal eea zeker af maken.
misschien pak ik (als alles werkt) ook de Oled nog uit de kast, met jouw voorbeeld, zou dat ook moeten werken.
groet Wim
de 3 en/of 03 had ik inmiddels ( door try and error ) uitgevonden, de sprintf() lukt nog niet (krijg niets op scherm misschien fout in setup?) , maar dat ga ik nog verder proberen , het gaat er ook om dat ik ( en misschien meelezers) iets leer, en niet alleen om het project.
jij nog bedankt, zonder jou had ik er veel langer over gedaan en was het nooit zo'n duidelijke code geworden, ooit leer ik het misschien.
de schakeling draait nu test (op werkelijke tijden) , heb komende periode ook minder tijd (dienstreis en familie) , maar zal eea zeker af maken.
misschien pak ik (als alles werkt) ook de Oled nog uit de kast, met jouw voorbeeld, zou dat ook moeten werken.
groet Wim
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: tijdschakelaar
Ik denk dat je de tekst van koepel niet helemaal hebt begrepen. Het is een alternatieve manier om die regel op te bouwen. sprintf() zet het resultaat in een 'buffer'. Die moet dus groot genoeg zijn voor je LCD regel (16 + 1 bytes). Je moet natuurlijk nog wel de cursor zetten naar het begin van de regel die je wilt tonen en uiteraard de LCD.print(buffer) uitvoeren. Anders zie je inderdaad niets. Koepel; gaf je een richting aan. De bedoeling is dat je er dan een verdere invulling aan geeft.
Je had kunnen googelen wat sprintf() doet als ook de LCD functies.....
Zo leer je vissen en niet vis eten...
Je had kunnen googelen wat sprintf() doet als ook de LCD functies.....
Zo leer je vissen en niet vis eten...
Re: tijdschakelaar
@Nico,
ik had er LCD Print (buffer) onder gezet.
maar zoals gezegd ga ik eea nog eens rustig lezen en uitwerken.
ik vindt dat je nogal negatief reageert, Waarom?, of is mijn gevoel onjuist? , vergeet niet dat jij het ook ooit moest leren, ik probeer te programmeren, maar het blijkt zonder opleiding daarin, niet echt eenvoudig, (ook mijn tijd is beperkt werk, familie andere hobby, enz).
Het volgen en bouwen van de "voorbeelden" is niet zo moeilijk, maar waar we het nu over hebben komt niet in de voorbeelden.
Hoop dat je ook geduld hebt met beginnende "programmeurs" , gelukkig is de elektronica geen probleem voor mij, anders werd het helemaal moeilijk.
@Koepel,
Bedankt voor alle geduld, uitleg en voorbeeld code's , het heeft mij heel goed geholpen met dit project, maar gezien het grote aantal lezers ook vele andere.
het voor jou normale gebruik van C++ blijkt voor leken als ik erg lastig, ik hoop ooit jou niveau te bereiken........
Groet Wim
ik had er LCD Print (buffer) onder gezet.
maar zoals gezegd ga ik eea nog eens rustig lezen en uitwerken.
ik vindt dat je nogal negatief reageert, Waarom?, of is mijn gevoel onjuist? , vergeet niet dat jij het ook ooit moest leren, ik probeer te programmeren, maar het blijkt zonder opleiding daarin, niet echt eenvoudig, (ook mijn tijd is beperkt werk, familie andere hobby, enz).
Het volgen en bouwen van de "voorbeelden" is niet zo moeilijk, maar waar we het nu over hebben komt niet in de voorbeelden.
Hoop dat je ook geduld hebt met beginnende "programmeurs" , gelukkig is de elektronica geen probleem voor mij, anders werd het helemaal moeilijk.
@Koepel,
Bedankt voor alle geduld, uitleg en voorbeeld code's , het heeft mij heel goed geholpen met dit project, maar gezien het grote aantal lezers ook vele andere.
het voor jou normale gebruik van C++ blijkt voor leken als ik erg lastig, ik hoop ooit jou niveau te bereiken........
Groet Wim
Wie is er online?
Gebruikers in dit forum: JeremysWelO en 21 gasten