Projects4edu

Tutorial : KA06 LCD shield

Eerst en vooral bekijken we de mogelijkheden van het LCD shield in combinatie met het KAEDU shield. Aangezien je voor het LCD shield niet kan kiezen welke signalen het display aansturen kan je hier niets kiezen.
Je kan wel kiezen of de drukknoppen op het shield via een digitale pin of via analoge pin A3 moeten werken. We kiezen voor de A3 pin dus moeten jumper JP1,JP2,JP3 en JP7 voorzien op het LCD shield. Omdat pin A3 overeenkomt met rood1 kan je deze jumper op het KAEDU shield beter verwijderen.

Wat betreft het LCD scherm zijn de 4 least significante bits verbonden met pin4 , pin5, pin6 en pin7. dit betekend dat je geen gebruik kan maken van oranje2, groen2, servo en IRled.
RS is verbonden met pin8 en enable is verbonden met pin9 dus switch en button1 kunnen ook niet gebruikt worden.
Je kan het best de jumpers van deze inputs en outputs op het KAEDU scherm verwijderen.

Nu je deze zaken niet meer kan gebruiken kunnen we kijken naar wat we wel nog kunnen gebruiken.
Je kan nog oranje1, groen1, rood2 gebruiken ook al zit het LCD scherm boven het KAEDU shield toch zal je deze leds zien oplichten.
Je kan nog NTC en trimmer en fototransistor gebruiken als analoge ingang.
Je kan nog de buzzer gebruiken.
Je kan de 3 drukknoppen gebruiken via A3 op het LCD schield zelf en button2 tot en met button4 op het KAEDU shield.

Eerste TEST

Om te testen of het LCD scherm werkt een eenvoudig programma. Eerst en vooral moet je de bibliotheek toevoegen voor LCD en moet je laten weten aan welke pinnen de data verbonden zijn en aan welke pinnen RS en enable. Dit doe je door de volgende 2 lijnen code voor setup


#include < LiquidCrystal.h >
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

In setup moet je laten weten welk LCD scherm je hebt aangesloten, het aantal lijnen en karakters onder andere. Best is ook om je cursur voor de zekerheid op de eerste lijn het eerste karakter te plaatsen. Dit doe je met volgende code.

lcd.begin(20, 4);
lcd.setCursor(0,0);

Bij het LCD shield zit een scherm dat 20 karakters per lijn kan weergeven en dat totaal 4 lijnen heeft. Voor de cursor op de eerste lijn te plaatsen moet je er wel rekening mee houden dat de lijnen genummerd worden te starten bij lijn 0, ook voor karakters start men de nummering bij 0. Daarom dat er bij de functie setCursor 0,0 staat. Dit zal het eerste karakter zijn van de eerste lijn.

Willen we iets eenmalig printen dan zetten we nog steeds in setup de code om een stuk tekst te printen. Dit stuk tekst zetten we tussen “”

lcd.print("projects4edu.be");

Op de tweede lijn willen we bijvoorbeeld de tijd zetten vanaf het opstarten of resetten. Dit kunnen we oproepen via de functie millis(), om die tijd in seconden te zetten moeten we het getal delen door 1000. Een getal of variabele printen doen we eenvoudig door geen “” te gebruiken bij lcd.print. Omdat deze code constant moet vernieuwen plaatsen we deze laatste 2 lijnen code in loop. Eerst setCursor om de tweede lijn te kiezen en dan print om de tijd te printen. Hier terug hetzelfde bij setCursor staat 0 voor de eerste positie en 1 voor de tweede lijn.


lcd.setCursor(0,1);
lcd.print(millis()/1000);

Klok basisprogramma

Stel dat we op de derde lijn de verstreken tijd in uren, minuten en seconden willen weergeven in plaats van in seconden. We gaan hiervoor geen gebruik maken van millis() maar van delay.
Het eerste wat we zullen doen is VOOR setup volgende code bijplaatsen

int uren = 0;
int minuten = 0;
int seconden = 0;

Hierdoor hebben we een variabele om de tijd bij te kunnen houden. in de loop moeten we hier dan berekeningen mee doen. Te beginnen met eentje op te tellen bij seconden. Maar als we eentje bijtellen bij seconde kan het zijn dat er meer dan 59 seconden zijn. Is dat het geval moet minuten eentje bij krijgen en seconde terug op 0 komen. Als de minuten meer dan 59 zijn moet er een bij uur komen en minuten op 0 komen en als uren meer dan 23 zijn moet uren terug op 0 komen. Dit word een hele reeks van if condities die op elkaar volgen.

seconden++;
if (seconden>59){
minuten++;
seconden=0;
if (minuten>59){
uren++;
minuten=0;
if(uren>23){
uren=0;
}
}
}

De tijd staat nog niet op het LCD scherm dus nu moeten we de uren,minuten en seconden nog printen met een : ertussen. De : is tekst dus met “” de variabelen zijn getallen dus zonder “”

lcd.setCursor(0,2);
lcd.print(uren);
lcd.print(":");
lcd.print(minuten);
lcd.print(":");
lcd.print(seconden);

Als je dit zou testen dan zie je dat de uren en minuten en seconden voorbij vliegen, dat komt doordat de code in loop bijna geen tijd kost, je moet dus nog 1 ding toevoegen na het printen van de tekst namelijk wachten alvorens de tekst te updaten. Dit is mogelijk door een delay van 999ms.

delay(1000);

Deze basiscode kan je gebruiken voor de alarmklok.

Weerstation

Op de laatste lijn kan je er nog de temperatuur bijzetten.

Eerst en vooral zet je dan voor SETUP
int temperatuur = 0;
int NTC = A1;

in setup moet er geen lijn bijkomen want het is niet verplicht voor analoge ingangen om pinMode te gebruiken.

in loop komt dan het volgende.
lcd.setCursor(0,3);
lcd.print("t:");
temperatuur = analogRead(NTC);
lcd.print(temperatuur);

Nu staat er wel de sensorwaarde op het scherm, om effectief de werkelijke temperatuur op het LCD scherm te kunnen plaatsen moet er nog een berekening gemaakt worden.

lichtkrant

in vorige voorbeelden gebruikten we de setCursor functie om een volgende lijn te gebruiken, je kan echter deze functie ook gebruiken om de kolom te selecteren. Als je telkens je boodschap opnieuw schrijft en de kolom telkens eentje opschuift kan je zelfs een eenvoudige lichtkrant maken. Hier als voorbeeld gebruiken we een for lus om de kolom telkens met 1 te doen toenemen en daarna een andere for lus om terug te keren. Deze methode zorgt ervoor dat de tekst eerst van links naar rechts zal schuiven en dan terug zal keren.

#include < LiquidCrystal.h >
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void setup() {
Serial.begin(9600);
lcd.begin(20, 4);
}
void loop() {
for(int i=0; i<16; i++){
lcd.setCursor(i,0);
lcd.print(“welkom “);
delay(1000);
lcd.clear();
}
for(int i=16; i>0; i–){
lcd.setCursor(i,0);
lcd.print(“welkom “);
delay(1000);
lcd.clear();
}
}

Mobiele versie afsluiten