Met een LCD-scherm kan je eenvoudig informatie van je Arduino weergeven.
Er bestaan erg verschillende schermen maar het type hierboven wordt erg vaak gebruikt en is ook het type dat je in je Arduino-box vindt.
Het zwarte blokje op de achterzijde 'de backpack' zorgt ervoor dat je via I2C met je scherm kan communiceren. Zo heb je maar vier draden nodig in plaats van 16.
In het blauwe blauwe blokje in het backpack zie je een kleine schroef. Hiermee kan je het contrast op je scherm aanpassen. Bij het eerste gebruik van je scherm zal je dit misschien moeten doen om leesbare tekst te krijgen.
De schakeling: Op een Arduino Uno kan je bij I2C kiezen. SCL Verbind je met de SCL-pin of pin A5, SDA met de SDA-pin of pin A4.
SCL en SDA zijn niet steeds aangegeven op een Arduino Uno. Het zijn de eerste pins naast de reset-knop.
Getallen achter de komma beperken:
Soms heb je door een omzetting teveel getallen na de komma om die op een scherm te krijgen.
Bij de functie lcd.print() mag je na de waarde die je wil weergeven aangeven hoeveel cijfers na de komma je nog wil vermelden. In het voorbeeld hieronder is dat dus één cijfer na de komma.
lcd.print(bme.readTemperature(),1);
De LCD-schermen die we in de klas gebruiken communiceren met de Arduino via I2C. Dit is een systeem om via twee draden eenvoudig te communiceren.
Meer informatie hierover vind je op de pagina Communicatie. SDA staat voor serial data (de informatie), SCL staat voor serial clock (die regelt de snelheid). Om functies voor het I2C-systeem en het display te kunnen gebruiken moet je wel libraries gebruiken.
De code: De Wire.h library kan je gewoon in het menu vinden. Schets > Bibliotheek gebruiken > Wire. Je zal ook een library moeten intalleren om te communiceren met je LCD. Hier gebruiken we LiquidCrystal_I2C.h.
Met deze library kan je dezelfde functies gebruiken zoals bij de LiquidCrystal functie, maar nu via I2C.
De belangrijkste functies vind je uitgelegd in de reference over deze library.
Een library importeren: Het importeren van zo'n library doe je via ‘schets’ > ‘bibliotheek gebruiken’ > ‘bibliotheek beheren’ , hier kan je dan je library opzoeken en installeren. Vanaf nu vind je deze library ook in het menu.
Eens je de libraries geïnstalleerd hebt kan je ze aan je code toevoegen met de regel:
#include <LiquidCrystal_I2C.h>
#include<Wire.h>
In de code hierboven zie je dat het LCD-scherm een 'adres' krijgt voor de communicatie met I2C. Vaak is dat 0x27 of 0x3F. Als je het adres niet kent dan kan je hiervoor een I2C-scanner gebruiken.
De tekst correct plaatsen: Om de tekst te plaatsen maak je gebruik van de functie: lcd.setCursor( , );
Hier geef je altijd eerst de kolom en dan de rij in. Let wel op, je begint te tellen van 0.
Het vakje helemaal linksboven is dus het vak (0,0);
Zoals hierboven al vermeld heeft niet elk LCD-scherm hetzelfde I2C-adres. Ook voor andere onderdelen zal je soms op zoek moeten gaan naar dit adres. Zo'n adres ziet eruit als 0x3F of 0x27 of 0x76.
Je vindt verschillende van die scanners op het internet, hiernaast vindt je de code van zo'n scanner.
Je sluit het onderdeel waarvan je het adres wil weten aan op je Arduino en stuurt de code naar je Arduino. Het I2C-adres van je LCD-scherm (of een ander aangesloten onderdeel) verschijnt dan in de Serial Monitor.
Je zal merken dat niet alle symbolen van je toetsenbord ook goed omgezet worden naar je LCD-scherm. Of misschien wil je voor je project graag zelf een symbool maken. Bijvoorbeeld een sneeuw-kristal bij vriestemperaturen, of een druppel om de vochtigheid aan te geven.
Dat is minder moeilijk dan je zou denken en iemand heeft er zelfs een pagina voor gemaakt om het nog eenvoudiger te maken: LCD-character-generator
Je kan meteen je symbool beginnen tekenen, en onderaan zie je dan de code die je in je Arduino-sketch kan gebruiken. We werken met I2C, dus vergeet dat bolletje niet aan te duiden in het menu.
Als je de code bekijkt, dan zie je ook meteen hoe de ééntjes in de bytes overeen komen met de gekleurde punten. Je kan de code voor je eigen symbool (=customChar) dan gewoon kopiëren en boven void setup plaatsen.
Let op, de code hierboven zal je nog een klein beetje moeten aanpassen:
lcd.begin(); vervang je door lcd.init();
meteen daaronder noteer je nog:
lcd.backlight();
Je plaatst een letter in je lcd met de regel
lcd.setCursor(0,0); //(rij, kolom)
Je schrijft je symbool met de regel:
lcd.write (0);
Wanneer je meerdere symbolen wil gebruiken, dan zal je die een naam en een nummer moeten geven. Dat wordt dan bijvoorbeeld:
byte customChar1[] = {
//hier de tekening van symbool 1
};
byte customChar2[] = {
//hier de tekening van symbool 2
};
void setup() {
lcd.createChar(0, customChar1); // 0 = nummer, customChar1 = naam lcd.createChar(1, customChar2);
delay (1000); // even wachten
}
void loop() {
// hier de gebruikelijke code van je LCD + andere code
lcd.setCursor(0,0); // cursor op juiste plaats zetten
lcd.write (0); // symbool 0 tonen (= customChar1)
lcd.setCursor(1,0);
lcd.write (1); // symbool 1 tonen (= customChar2)
}
Deze kleine OLED schermpjes zijn net als de schermen hierboven aan te sluiten met I2C. Deze schermpjes werken op 5V of 3,3V. Sommige versies zijn volledig wit, andere, blauw of blauw met geel (bovenaan).
Je kan voor de schakeling dus het I2C schema hierboven gebruiken.
Er zijn verschillende libraries die je kan gebruiken om met deze schermpjes te werken.
U8G2 biedt wel wat mogelijkheden, maar hieronder werken we met de
Adafruit_SSD1306 library.
Je kan best eerst je scherm testen met de voorbeeldcode van die library met het voorbeeld ssd1306_128x32_i2c.
Het is een goed idee om de voorbeeldcode even goed door te nemen, dan heb je meteen ook een idee van de mogelijkheden en beperkingen van het OLED-scherm.
De schakeling: De communicatie van onze Arduino naar het scherm verloopt via I2C, dus SDL naar A5 en SDA naar A4.
De code: De eerste stap is dat we het I2C-adres van dit scherm vinden. Omdat onze Nano 33 BLE Sense wel wat sensoren heeft die al verbonden zijn kan het handig zijn om dit even op een Arduino zonder interne sensoren te testen, zoals een UNO. Ons scherm (128x32)had 0x3C als I2C-adres, een 128x64 scherm heeft doorgaans 0x3D als adres.
We installeren nog een library die het werken met ons scherm wat makkelijker maakt. Je kan die gewoon zoeken in het zoekvenster via: Hulpmiddelen > Bibliotheken beheren:
- Adafruit_SSD1306
Het kan zijn dat je gevraagd wordt om bijkomende libraries te installeren om met de vorige twee te kunnen werken.
Het OLED scherm testen: uit de Adafruit SSD1306 library, nemen we het voorbeeld ssd1306_128x32_i2c en kijken even of het I2C-adres klopt.
Indien je scherm niet werkt, kijk dan eerst even de schakeling en het I2C adres in je code na. Kijk ook even of het aantal pixels in de code overeenkomt met jouw scherm.
De sensoren die in dit voorbeeld gelezen worden zitten al op de Arduino zelf, bij een Uno of Brainbox zal je dus moeten vertrekken vanuit de code die je bij de sensoren gebruikt.
Dit scherm biedt al meteen wat meer mogelijkheden omdat je met kleur kan werken, maar daardoor wordt het ook iets complexer om te programmeren.
Toch kan je na wat zoeken in de voorbeelden van de gebruikte libraries al snel gebruik maken van de basismogelijkheden.
Voor een eerste test kan je gebruik maken van de TFT-library die standaard geïnstalleerd is in Arduino. Bestand > voorbeelden > TFT > Arduino > TFTDisplayText
Vaak kan je al vertrekken vanuit deze voorbeelden om een idee in je project te realiseren.
Voor complexere ideeën ga je eerst even moeten experimenteren.
Meer uitleg over de functies in deze library vind je in de Arduino reference.
Arduino heeft hier alvast geprobeerd om de opbouw en werking van de functies te baseren op Processing, dus veel zaken zal je wel herkennen.
Een library die wat meer mogelijkheden biedt dan de TFT-library is de Adafruit_ST7735 library.
Die moet je wel apart installeren via Schets > Bibliotheek gebruiken > Bibliotheken beheren. Je kan dan de naam van de library ingeven in het zoekvenster en de library installeren. In het venster verschijnt dan een melding dat je nog een extra library meteen kan installeren, dat vink je ook even aan.
Daarna kan je een test doen met de voorbeelden bij deze library. Bijvoorbeeld: Bestand > Voorbeelden > Adafruit ST7735 > graphictest