A15. Näytöt - matpi/EmbeddedSystemsUTU GitHub Wiki

LCD-näyttö I2C rajapinnalla

LCD näyttöön voidaan kytkeä I/O-expander moduuli, jolloin sen käyttö on yksinkertaisempaa ja vie vähemmän pinnejä mikrokontrollerista. Lisäksi moduuliin on integroitu taustavalon virransyöttö ja kontrastinsäätö. Moduuli tottelee I2C-protokollaa. I2C-väylässä on kaksi johdinta( kello ja datalinja) ja laitteet viestivät vetämällä vuorotellen jännitteen alas datalinjassa kellopulssin tahdissa. I2C-väylään voidaan liittää useita laitteita koska jokaista laitetta kutsutaan omalla osoitteella.

i2C_expander

Eri valmistajilla on erilaisia ja eri kokoisia näyttöjä. Yllä olevassa kuvassa on YwRobot merkkinen I/O-expander moduulilla varustettu näyttö kuvattuna näytön kääntöpuolelta. Alla olevassa kuvassa on sama sinisellä taustavalolla varustettu 16 merkin 2 rivinen näyttö edestä kuvattuna.

lcd-screen-blue

I2C-väylissä pitää olla AINA ylösvetovastukset, eli ne kytketään esim 4,7k vastuksilla käyttöjänniteeseen. Alasvetovastukset on joillain elektroniikkavalmistajilla integroitu suoraan näytön tai I/O-expanderin piirilevyyn, jolloin niitä ei tarvitse lisätä kytkentään.

Näytön kytkeminen Arduinoon:

1.Kytke GND ja 5v jännite.

2.Kytke moduulien datapinnit (SDA) ja kellopinnit (SCL) yhteen kuvan mukaisesti.

3.Kytke kummastakin linjasta 4,7k vastukset 5v jännitteeseen. (Koululta löytyvissä näytöissä ei tarvita)

LCDi2c

Kun kytkennät on tehty, on aika kokeilla näytön käyttöä. LCD näytön protokolla olisi työläs koodata itse, mutta arduinolle on olemassa valmiita kirjastoja (library), jotka tekevät vaikeasta helppoa. Arduino ohjelman mukana tulee monia kirjastoja, mutta I2C moduulin kautta LCD-näytön ohjaaminen vaatii ulkopuolisen kirjaston asentamista. Eri elektroniikkavalmistajilla I/O-expander moduuli on saatettu kytkeä eri tavoin LCD moduuliin. Sen vuoksi on tärkeää, että laitteelle löytyy sopiva kirjasto. Valmistajan nimellä voi Googlettaa laitteeseen sopivaa kirjastoa. Koulun näyttöihin kirjasto löytyy täältä: https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library

Kirjasto asennetaan seuraavasti:

  1. Valitse vaihtoehto Download ZIP, ja pura pakattu kansio.

  2. Muuta puretun kansion nimi Arduino-LiquidCrystal-I2C-library-master ---> ArduinoLiquidCrystal_I2C

  3. Vie kansio joka sisältää kirjaston arduinon ohjelmakansiossa olevaan "libraries"- kansioon.

  4. Kun nyt käynnistät arduino-ohjelman uudestaan, kirjasto on asennettuna.

  5. Kokeile näytön toimintaa seuraavan esimerkkikoodin avulla:


#include <Wire.h> // Tämä tuo I2C-kirjaston käyttöön.

#include <LiquidCrystal_I2C.h> // Ja tämä LCD-kirjaston.

LiquidCrystal_I2C lcd(0x27, 16, 2); // Asetetaan LCD näytön osoite  

void setup()

{  

// Käynnistetään näyttö ja asetetaan ja taustavalo päälle
lcd.begin();   
lcd.backlight();

}

void loop()

{

lcd.setCursor(2,0); // määritellään tekstin aloituskohta

lcd.print("Hello, world!"); // Kirjoitetaan näytölle Hello, world!

delay(2000);

lcd.clear();        // tyhjennetään näyttö

lcd.setCursor(2,1); // määritellään tekstin aloituskohta

lcd.print("Hello, Rauma!");  // Kirjoitetaan näytölle Hello, Rauma!

delay(1000);

lcd.clear();       // tyhjennetään näyttö

}

Jokaiseen kirjastoon on liitetty vähintään yksi esimerkki ohjelma. Ne löytyvät polusta "File->Examples->kirjaston nimi". Lataa "Hello World" esimerkki arduinoon. Kokeile muuttaa teksti mieleiseksi.

#include <Wire.h> // Tuodaan I2C-kirjasto

#include <LiquidCrystal_I2C.h> // TuodaanLCD-kirjasto

LiquidCrystal_I2C lcd(0x27, 16, 2); // Asetetaan LCD näytön osoite 

int echoPin = 11; // Määritellään, mihin Arduino pinniin echoPin yhdistetään

int trigPin = 12; // Määritellään, mihin Arduino pinniin trigPin yhdistetään

long kesto = 0; // Määritellään long-tyyppinen muuttuja nimeltä kesto

long matka = 0; // Määritellään long-tyyppinen muuttuja nimeltä matka

void setup()

{  

// Käynnistetään näyttö ja asetetaan ja taustavalo päälle
lcd.begin();   
lcd.backlight();

Serial.begin (9600); // Avataan sarjaliikenne tietokoneelle nopeudella 9600 bps

pinMode(trigPin, OUTPUT); // Määritellään trigPin outputiksi

pinMode(echoPin, INPUT); // Määritellään echoPin inputiksi

}

void loop()

{

ultra(); // Määritellään ultra -niminen fuktio

if (matka <30)

{

stop(); // Määritellään stop muuttuja

}

else 

lcd.print("matka=");

lcd.setCursor(0,1);         // vaihtaa riviä

lcd.print(matka);

delay(2000);

lcd.clear();    // tyhjentää näytön

}

void ultra()  // Kutsutaan ultra 

{

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);

kesto = pulseIn(echoPin, HIGH);

// Muuttujan matka arvo muutetaan senttimetreiksi kaavalla
matka = kesto/58.2; 

return;

}

void stop()

{

lcd.clear();    // tyhjentää näytön

lcd.print("seis");

delay(1000);

lcd.clear();    // tyhjentää näytön

return;

}

KEHITTYNYT KOODIVERSIO

#include <Wire.h> // Tämä tuo I2C-kirjaston käyttöön.

#include <LiquidCrystal_I2C.h> // Ja tämä LCD-kirjaston.


#define SUMMERI_PIN 8  // Määritellään summerille pinni

LiquidCrystal_I2C lcd(0x27, 16, 2); // Asetetaan LCD näytön osoite 

int echoPin = 11; // Määritellään, mihin Arduino pinniin echoPin yhdistetään

int trigPin = 12; // Määritellään, mihin Arduino pinniin trigPin yhdistetään

long kesto = 0; // Määritellään long-tyyppinen muuttuja nimeltä kesto

long matka = 0; // Määritellään long-tyyppinen muuttuja nimeltä matka

void setup()

{  

// Käynnistetään näyttö ja asetetaan ja taustavalo päälle
lcd.begin();   
lcd.backlight();

Serial.begin (9600); // Avataan sarjaliikenne tietokoneelle nopeudella 9600 bps

pinMode(trigPin, OUTPUT); // Määritellään trigPin outputiksi

pinMode(echoPin, INPUT); // Määritellään echoPin inputiksi

pinMode(13, OUTPUT); // Määrittää LEDin outputiksi

pinMode(SUMMERI_PIN, OUTPUT); 

}

void loop()

{

if (matka < 30) // Jos matka alle 30 cm...

{

digitalWrite(SUMMERI_PIN, HIGH);   // LED syttyy

lcd.print("STOP"); // LCD Näytöllä lukee STOP

delay(1000); // Sekunnin viive

lcd.clear(); // Näyttö nollautuu

}

else // Muuten...

{

digitalWrite(SUMMERI_PIN, LOW);    // LED ei ole päällä

lcd.print("MATKA (CM)"); // Näytöllä lukee MATKA (CM)

lcd.setCursor(0,1);     // Vaihtaa riviä

lcd.print(matka); // Toisella rivillä lukee etäisyys

delay(1000); // Sekunnin viive

lcd.clear(); // Näyttö nollautuu

}

ultra(); //Määritellään ultra -niminen fuktio

delay(50);

}

void ultra()  // Kutsutaan ultra funktio

{

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);

kesto = pulseIn(echoPin, HIGH);

// Muuttujan matka arvo muutetaan senttimetreiksi kaavalla
matka = kesto/58.2; 

return;

}

NOKIA 3310/5110 näyttö, SPI-väylällä

Nokia

Nokian eräs yleinen näyttömalli on erittäin suosittu harrastajien parissa. Se maksaa halvimmillaan pari euroa ja siihen on olemassa hyvät teksti ja grafiikkakirjastot. Kytke alla olevan kuvan mukaisesti. Muista liittää Nokia näytön VCC Arduinon 3,3 V jännitteeseen. Valitse kytkimellä Arduino Nanolle 3,3 V jännitealue, tai käytä esim. Unossa jännitteen tason muunninta (Voltage level converter):

Nokia LCD

Kun kytkennät on tehty, on aika kokeilla näytön käyttöä. Tämänkin LCD näytön protokolla olisi työläs koodata itse, mutta arduinolle on olemassa valmiita kirjastoja (library), jotka tekevät vaikeasta helppoa. Arduino ohjelman mukana tulee monia kirjastoja, mutta Nokian näytön ohjaaminen vaatii kahden eri ulkopuolisen kirjaston asentamista.

Kirjasto asennetaan seuraavasti:

  1. Pura kansiot jotka sisältävät kirjastot arduinon ohjelmakansiossa olevaan "libraries"- kansioon.

  2. Leikaa ja siirrä "robot control" kirjasto pois "libraries"-kansiosta koska se sisältää uusien kirjastojen kanssa ristiriitaisia tiedostoja.

  3. Kun nyt käynnistät arduino-ohjelman uudestaan, kirjastot ovat asennettuna.

  4. Kokeile kirjastoa. Jokaiseen kirjastoon on liitetty vähintään yksi esimerkki ohjelma. Ne löytyvät polusta "File->Examples->kirjaston nimi". Lataa esimerkki arduinoon. Alla oleva kommentoitu koodi selittää miten kirjastoa käytetään. Siinä tulostetaan pelkkää tekstiä:


#include <Adafruit_GFX.h> //näillä komennoilla lisätään kirjastot.

#include <Adafruit_PCD8544.h>

Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);  // määritellään pinnit joita käytetään.

void setup() 

{

display.begin();  // aloittaa kirjaston käytön.

display.setContrast(50); // tällä arvolla voi säätää kontrastia.

display.display(); // päivittää näytön.

delay(2000);

display.clearDisplay();  // tyhjentää näytön.

display.setTextSize(1); // fontin koko.

display.setTextColor(BLACK); //tekstin väri.

display.setCursor(0,0);  // mistä kirjoitus alkaa

display.println("Hello, world!"); // tähän tulee jokin muuttuja tai teksti mikä tulostetaan.

display.display();  //päivittää näytön.

delay(2000);

display.clearDisplay();

}

void loop() 

{

//Tässä kirjoitetaan vuorotellen kaksi ystävyyden tekstiä...

display.clearDisplay();

display.setCursor(0,0);

display.println("Hello, Rauma!");

display.display();

delay(1000);

display.clearDisplay();

display.setCursor(0,0);

display.println("Hello, Pori!");

display.display();

delay(1000);

}
⚠️ **GitHub.com Fallback** ⚠️