Vreemde blokjes op mijn LCD scherm

algemene C code
Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

Vreemde blokjes op mijn LCD scherm

Berichtdoor benvo » 01 Dec 2016, 21:06

[imgAfbeelding][/img]


Op mijn scherm komen deze blokjes tevoorschijn, waar komen die vandaan?

Dit gebeurd als ik deze sketch uitvoer:

cpp code
[code// Date and time functions using a DS3231 RTC connected via I2C and Wire lib
#include <Wire.h>
#include "RTClib.h"
#include <LCD.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F,2,1,0,4,5,6,7); //0x3F is het I2C bus adres voor een ongemodificeerde Backpack


RTC_DS3231 rtc;


void setup () {

//Activeer LCD module
lcd.begin (20,4); //voor een 20x4 LCD module
lcd.setBacklightPin(3,POSITIVE);
lcd.setBacklight(HIGH); //achtergrondverlichting LCD aan.

Serial.begin(9600);

delay(1000); // wait for console opening

if (! rtc.begin()) {
Serial.println("Kan de RTC niet vinden");
while (1);
}

if (rtc.lostPower()) {
Serial.println("RTC zonder stroom geweest, nu op tijd zetten!");
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
// rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}
}

void loop () {
DateTime now = rtc.now();

//Print dagdatum, maand en jaar.
lcd.home(); //zet de cursor op de eerste kolom, op de eerste rij.
if (now.day() <10)
{
lcd.print("0"); //zet een nul voor een enkel cijfer
}

lcd.print(now.day());
lcd.print('-');
if (now.month()<10)
{
lcd.print("0"); //zet een nul voor een enkel cijfer
}
lcd.print(now.month());
lcd.print('-');
lcd.print(now.year());
lcd.print(" ");

//Print de tijd in uren, minuten en seconden
if (now.hour()<10)
{
lcd.print("0"); //zet een nul voor een enkel cijfer
}
lcd.print(now.hour());
lcd.print(':');
if (now.minute()<10)
{
lcd.print("0"); //zet een nul voor een enkel cijfer
}
lcd.print(now.minute());
lcd.print(':');
if (now.second()<10)
{
lcd.print("0"); //zet een nul voor een enkel cijfer
}
lcd.print(now.second());
lcd.println();


} ][/code]

Advertisement

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

Re: Vreemde blokjes op mijn LCD scherm

Berichtdoor nicoverduin » 01 Dec 2016, 22:23

Dat komt omdat je onder aan in de sketch lcd.println() doet en dat is dus een CR en een LF. En die kan je dus zien als blokjes
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

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

Re: Vreemde blokjes op mijn LCD scherm

Berichtdoor benvo » 02 Dec 2016, 16:26

Dank je voor je reactie, Nico. Nu zou het heel gemakkelijk zijn om het laatste regeltje te schrappen maar dan weet ik nog niets. Ik heb al gegoogeld op wat voor jou, denkelijk, gesneden koek is. Maar ik wil je antwoordt graag begrijpen zodat ik weet wat en waarom ik iets doe. Anders leren we nooit wat... lcd.println brengt ons naar de volgende regel. Maar wat bedoel je met een CR en een LF?

Groet,
Ben.

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

Re: Vreemde blokjes op mijn LCD scherm

Berichtdoor nicoverduin » 02 Dec 2016, 17:18

CR = carriage return = naar begin regel =0x0D
LF = line feed = naar volgende regel = 0x0A
De CR en LF zijn niet printbare tekens omdat ze instructies geven aan de printer of serial. Dus worden het blokjes
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

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

Re: Vreemde blokjes op mijn LCD scherm

Berichtdoor benvo » 02 Dec 2016, 19:02

Helemaal duidelijk nu! Dank je wel.


Groet,
Ben.

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Vreemde blokjes op mijn LCD scherm

Berichtdoor shooter » 02 Dec 2016, 19:04

nico heeft ben de goede library?
paul deelen
shooter@home.nl

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

Re: Vreemde blokjes op mijn LCD scherm

Berichtdoor nicoverduin » 02 Dec 2016, 21:06

Yep. Println() zonder inhoud stuurt gewoon een 0x0D en een 0x0A naar het scherm en dat zijn gewoon non printables. Ze zouden vanuit Arduino meer functies gewoon moeten blokkeren die niet van toepassing zijn voor specifieke hardware. Of je gaat ze echt ondersteunen. In dit geval is dat wat lastig omdat je dan een scrolling lcd scherm zou kunnen maken. Maar dan moet die library in zichzelf een buffer opbouwen waarin de data staat die ook op het scherm staat om zo regels op te kunnen schuiven op het feitelijke scherm zelf. En als je grote hoeveelheden RAM zou hebben zou dat zelfs mooi zijn omdat we er genoeg zien die het moeilijk vinden om lcd schermen te programmeren. Een alternatieve oplossing zou kunnen als de lcd schermen ook gelezen kunnen worden (geen idee of dat al kan) dan zou je println() kunnen uitbreiden met een scrolling functie. Maar ik heb mij nooit verdiept in de registers van de LCD controller chips. Dus zou het niet weten.
En nee ik ga het ook niet uitzoeken. Geen tijd!! Veel te druk met LoRa, Raspberry en 32bits processors. En mijn oude 2012 RepRap moest ook maar eens aan nieuwe firmware... nou dat heb ik geweten.. Marlin is wat uitgebreid sinds 2012...
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

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

Re: Vreemde blokjes op mijn LCD scherm

Berichtdoor benvo » 03 Dec 2016, 21:09

@ Shooter. Deze library heb ik omdat na lang zoeken dit een van de weinigen is die werkt! In elke library staan, zo heb ik gezien, Keywords. In de door mij gebruikte library zitten ook scrollingsmogelijkheden, zo maak ik op uit de Keywords.

Lees maar eens mee:

Syntax Coloring Map For LiquidCrystal_I2C
###########################################

###########################################
# Datatypes (KEYWORD1)
###########################################

LiquidCrystal_SR KEYWORD1
LiquidCrystal_I2C KEYWORD1
LiquidCrystal_SR3W KEYWORD1
LiquidCrystal KEYWORD1
LCD KEYWORD1

###########################################
# Methods and Functions (KEYWORD2)
###########################################
begin KEYWORD2
clear KEYWORD2
home KEYWORD2
noDisplay KEYWORD2
display KEYWORD2
noBlink KEYWORD2
blink KEYWORD2
noCursor KEYWORD2
cursor KEYWORD2
scrollDisplayLeft KEYWORD2
scrollDisplayRight KEYWORD2
leftToRight KEYWORD2
rightToLeft KEYWORD2
moveCursorLeft KEYWORD2
moveCursorRight KEYWORD2
autoscroll KEYWORD2
noAutoscroll KEYWORD2
createChar KEYWORD2
setCursor KEYWORD2
print KEYWORD2
write KEYWORD2
println KEYWORD2
backlight KEYWORD2
noBacklight KEYWORD2
on KEYWORD2
off KEYWORD2
setBacklightPin KEYWORD2
setBacklight KEYWORD2
###########################################
# Constants (LITERAL1)
###########################################
POSITIVE LITERAL1
NEGATIVE LITERAL1
BACKLIGHT_ON LITERAL1
BACKLIGHT_OFF LITERAL1

Groet,
Ben.

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

Re: Vreemde blokjes op mijn LCD scherm

Berichtdoor nicoverduin » 03 Dec 2016, 21:55

Autoscroll is alleen links en rechts bewegen. Niet eern regel omhoog of omlaag
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 5 gasten