de tijd van rtc op juiste plaats op lcd plaatsen
9 berichten
• Pagina 1 van 1
de tijd van rtc op juiste plaats op lcd plaatsen
Ik ben sind een week aan het programmeren op een arduino
ik krijg de minuten/sec niet goed op scherm
nu komt er 23:1:4 te staan in plaats van 23:01:04
gr Ad
ik heb inmiddels een oplossing gevonden
ik hoopte dat er een kortere manier was
onder proton picbasic deed je print dec2 seconde
ik heb dit weekend dit forum pas gevonden en ik vind het zeer leerzaam
Groeten uit Eindhoven
ik krijg de minuten/sec niet goed op scherm
- Code: Alles selecteren
lcd.setCursor(0, 0);
lcd.print(uur,DEC);
lcd.print(':');
lcd.print(minuut,DEC);
lcd.print(':');
lcd.print(seconde,DEC);
nu komt er 23:1:4 te staan in plaats van 23:01:04
gr Ad
ik heb inmiddels een oplossing gevonden
- Code: Alles selecteren
lcd.setCursor(0, 0);
if (uur <10)
{
lcd.print('0');
}
lcd.print(uur,DEC);
lcd.print(':');
if (minuut <10)
{
lcd.print('0');
}
lcd.print(minuut,DEC);
lcd.print(':');
if (seconde <10)
{
lcd.print('0');
}
lcd.print(seconde,DEC);
ik hoopte dat er een kortere manier was
onder proton picbasic deed je print dec2 seconde
ik heb dit weekend dit forum pas gevonden en ik vind het zeer leerzaam
Groeten uit Eindhoven
Advertisement
Re: de tijd van rtc op juiste plaats op lcd plaatsen
Dat is een goede oplossing. Ik doe het vaak op die manier.
Een andere manier is met sprintf. Dan is er wel een extra buffer nodig.
Ik doe dit uit mijn hoofd, dus ik weet niet zeker of het klopt
Een andere manier is met sprintf. Dan is er wel een extra buffer nodig.
Ik doe dit uit mijn hoofd, dus ik weet niet zeker of het klopt
- Code: Alles selecteren
char buffer[20];
sprintf( buffer, "%02d:%02d:%02d", uur, minuut, seconde);
lcd.setCursor( 0, 0);
lcd.print( buffer);
Re: de tijd van rtc op juiste plaats op lcd plaatsen
Het resultaat na 2 avondjes oefenen en veel lezen/zoeken .
- Code: Alles selecteren
#include <DS3231.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address
DS3231 Clock;
bool Century=false;
bool h12;
bool PM;
byte ADay, AHour, AMinute, ASecond, ABits;
bool ADy, A12h, Apm;
byte jaar, maand, dag, dagnr, uur, minuut, seconde,temperatuur;
String dagnaam;
String maandnaam;
void setup() {
// Start the I2C interface
Wire.begin();
lcd.begin(20, 4);
lcd.clear();
// Clock.setSecond(0); //Set the second
// Clock.setMinute(42); //Set the minute
// Clock.setHour(19); //Set the hour
// Clock.setDoW(3); //Set the day of the week
// Clock.setDate(30); //Set the date of the month
// Clock.setMonth(8); //Set the month of the year
// Clock.setYear(16); //Set the year (Last two digits of the year)
// Start the serial interface
Serial.begin(115200);
}
void ReadDS3231()
{
seconde=Clock.getSecond();
minuut=Clock.getMinute();
uur=Clock.getHour(h12, PM);
dag=Clock.getDate();
maand=Clock.getMonth(Century);
jaar=Clock.getYear();
dagnr=Clock.getDoW();
temperatuur=Clock.getTemperature();
if (dagnr == 1) {
dagnaam ="Maandag";
}
if (dagnr == 2) {
dagnaam ="Dinsdag";
}
if (dagnr == 3) {
dagnaam ="Woensdag";
}
if (dagnr == 4) {
dagnaam ="Donderdag";
}
if (dagnr == 5) {
dagnaam ="Vrijdag";
}
if (dagnr == 6) {
dagnaam ="Zaterdag";
}
if (dagnr == 7) {
dagnaam ="Zondag";
}
if (maand == 1) {
maandnaam ="Januari";
}
if (maand == 2) {
maandnaam ="Februari";
}
if (maand == 3) {
maandnaam ="Maart";
}
if (maand == 4) {
maandnaam ="April";
}
if (maand == 5) {
maandnaam ="Mei";
}
if (maand == 6) {
maandnaam ="Juni";
}
if (maand == 7) {
maandnaam ="Juli";
}
if (maand == 8) {
maandnaam ="Augustus";
}
if (maand == 9) {
maandnaam ="September";
}
if (maand == 10) {
maandnaam ="Oktober";
}
if (maand == 11) {
maandnaam ="November";
}
if (maand == 12) {
maandnaam ="December";
}
}
void loop() {ReadDS3231();delay(1000);
lcd.setCursor(0,0);
lcd.print(dagnaam);
lcd.setCursor(0,1);
if (dag <10) {
lcd.print('0');
}
lcd.print(dag,DEC);
lcd.print(' ');
lcd.print(maandnaam);
lcd.print(' ');
if (jaar <10) {
lcd.print('0');
}
lcd.print("20");
lcd.print(jaar,DEC);
lcd.setCursor(12,0);
if (uur <10) {
lcd.print('0');
}
lcd.print(uur,DEC);
lcd.print(':');
if (minuut <10) {
lcd.print('0');
}
lcd.print(minuut,DEC);
lcd.print(':');
if (seconde <10) {
lcd.print('0');
}
lcd.print(seconde,DEC);
lcd.setCursor(0,3);
lcd.print("Temperatuur = ");
lcd.print(temperatuur);
// lcd.print((char)224);
lcd.print(" C ");
}
Re: de tijd van rtc op juiste plaats op lcd plaatsen
Een mooi resultaat
Ik weet niet welke library je gebruikt voor DS3231, dus ik weet ook niet of de temperatuur als een byte altijd goed gaat.
Deze zou het kunnen zijn : https://github.com/NorthernWidget/DS3231
Mijn eerste indruk is dat het goede code is. Als ik het vluchtig lees, dan springt er niets uit. Misschien kan er wat geoptimaliseerd worden voor de I2C. In die code is de temperatuur trouwens een 'float'.
In de taal 'c' en 'c++' worden reeksen van tekst vaak in een array gezet. In de Arduino kun je dat array ook als PROGMEM zetten, maar dat is iets voor later
Weet je zeker dat de dag-van-de-week bij maandag begint met getal '1' ? Ik zou verwachten dat het begint bij getal '0'.
In de taal 'c' en 'c++' begint een array met index '0'. Dus de index wordt dan "dagnr - 1".
De variabele 'dagnaam' zou kunnen vervallen. Je kunt meteen een tekst uit het array pakken met de index, zoals hieronder staat.
Een array van tekst kan dit zijn:
Als dit allemaal logisch klink, dan kun je het op die manier proberen. Anders laat het je gewoon zo.
Ik weet niet welke library je gebruikt voor DS3231, dus ik weet ook niet of de temperatuur als een byte altijd goed gaat.
Deze zou het kunnen zijn : https://github.com/NorthernWidget/DS3231
Mijn eerste indruk is dat het goede code is. Als ik het vluchtig lees, dan springt er niets uit. Misschien kan er wat geoptimaliseerd worden voor de I2C. In die code is de temperatuur trouwens een 'float'.
In de taal 'c' en 'c++' worden reeksen van tekst vaak in een array gezet. In de Arduino kun je dat array ook als PROGMEM zetten, maar dat is iets voor later
Weet je zeker dat de dag-van-de-week bij maandag begint met getal '1' ? Ik zou verwachten dat het begint bij getal '0'.
In de taal 'c' en 'c++' begint een array met index '0'. Dus de index wordt dan "dagnr - 1".
De variabele 'dagnaam' zou kunnen vervallen. Je kunt meteen een tekst uit het array pakken met de index, zoals hieronder staat.
Een array van tekst kan dit zijn:
- Code: Alles selecteren
char daysofweek[] = { "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag", "Zondag" };
char months[] = { "Januari", "Februari", "Maart" ... (zelf invullen)
// maandag is '1', en de index begint bij nul.
lcd.print(daysofweek[dagnr-1]);
Als dit allemaal logisch klink, dan kun je het op die manier proberen. Anders laat het je gewoon zo.
Re: de tijd van rtc op juiste plaats op lcd plaatsen
- Code: Alles selecteren
#include <DS3231.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address
char daysofweek[] = { 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrijdag', 'Zaterdag', 'Zondag' };
ik heb de dagen met single Quote moeten doen anders kreeg ik een foutmelding
- Code: Alles selecteren
lcd.setCursor(0,0);
// lcd.print(dagnr);
lcd.print(daysofweek[dagnr]);
hier krijg ik een g op het scherm
dagnr = 3 (Woensdag)
Ad
Re: de tijd van rtc op juiste plaats op lcd plaatsen
Oeps mijn fout. Sorry.
Het is een array van pointers, elke pointer wijst naar een tekst.
Dit heb ik wel getest Er wordt een willekeurige dag van de week afgedrukt.
Het is een array van pointers, elke pointer wijst naar een tekst.
Dit heb ik wel getest Er wordt een willekeurige dag van de week afgedrukt.
- Code: Alles selecteren
char *daysofweek[] = { "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag", "Zondag" };
void setup()
{
Serial.begin(9600);
Serial.println( "\nStarted");
}
void loop()
{
int i = random( 7); // return a random number from 0 up to 6.
Serial.println( daysofweek[i]);
delay(1000);
}
Re: de tijd van rtc op juiste plaats op lcd plaatsen
het werkt nu
ik pas het nu even aan en zal uiteindelijke sketch hier plaatsen
bedankt voor de hulp
ik pas het nu even aan en zal uiteindelijke sketch hier plaatsen
bedankt voor de hulp
Re: de tijd van rtc op juiste plaats op lcd plaatsen
- Code: Alles selecteren
#include <DS3231.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address
char *daysofweek[] = {"Maandag","Dinsdag","Woensdag","Donderdag","Vrijdag","Zaterdag","Zondag"};
char *months[] = "Januari","Februari","Maart","April","Mei","Juni","Juli","Augustus","September","Oktober","November","December"};
DS3231 Clock;
bool Century=false;
bool h12;
bool PM;
byte ADay, AHour, AMinute, ASecond, ABits;
bool ADy, A12h, Apm;
byte jaar, maand, dag, dagnr, uur, minuut, seconde ;
float temperatuur ;
void setup() {
// Start the I2C interface
Wire.begin();
lcd.begin(20, 4);
lcd.clear();
// Clock.setSecond(0); //Set the second
// Clock.setMinute(42); //Set the minute
// Clock.setHour(19); //Set the hour
// Clock.setDoW(3); //Set the day of the week
// Clock.setDate(30); //Set the date of the month
// Clock.setMonth(8); //Set the month of the year
// Clock.setYear(16); //Set the year (Last two digits of the year)
}
void ReadDS3231()
{
seconde=Clock.getSecond();
minuut=Clock.getMinute();
uur=Clock.getHour(h12, PM);
dag=Clock.getDate();
maand=Clock.getMonth(Century);
jaar=Clock.getYear();
dagnr=Clock.getDoW();
temperatuur=Clock.getTemperature();
}
void loop() {ReadDS3231();delay(1000);
lcd.setCursor(0,0);
lcd.print(daysofweek[dagnr-1]);
lcd.setCursor(0,1);
if (dag <10)
{
lcd.print('0');
}
lcd.print(dag,DEC);
lcd.print(' ');
lcd.print(months[maand-1]);
lcd.print(' ');
lcd.print("20");
if (jaar <10)
{
lcd.print('0');
}
lcd.print(jaar,DEC);
lcd.setCursor(12,0);
if (uur <10) {
lcd.print('0');
}
lcd.print(uur,DEC);
lcd.print(':');
if (minuut <10)
{
lcd.print('0');
}
lcd.print(minuut,DEC);
lcd.print(':');
if (seconde <10)
{
lcd.print('0');
}
lcd.print(seconde,DEC);
lcd.setCursor(0,3);
lcd.print("Temperatuur ");
lcd.print(temperatuur);
// lcd.print((char)223);
lcd.print(" C ");
}
de file is een stuk korter geworden ook de temperature is omgezet in float
het graden teken char(223) werkt op mijn lcd scherm 2004 niet.
verkeerde characterset denk ik daarom staat die uncomment
Re: de tijd van rtc op juiste plaats op lcd plaatsen
Kun je zelf een karakter maken voor het display ?
Ik bekeek nog even de datasheet van de DS3231, en alles begin bij nul, alleen de maand en de dag-van-de-week beginnen bij '1'. Dus dat klopt.
Ik bekeek nog even de datasheet van de DS3231, en alles begin bij nul, alleen de maand en de dag-van-de-week beginnen bij '1'. Dus dat klopt.
9 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: ikocapeqitak en 97 gasten