Lektorált tananyag, ami a BKF Digitális és Kollaboratív Művészet (DIKOM) pályázatnak keretén belül valósult meg.
Szerző: Harsányi Réka, Társszerző: Juhász Márton András, Lektor: Fernezelyi Márton
EEPROM könyvtár
Az Arduino három különböző típusú memóriával rendelkezik, az egyes típusok kapacitása a mikrokontroller fajtájától függ:
- Flash: Többszörösen újraírható memória, tartalma az eszköz kikapcsolását követően is megmarad. A fejlesztőkörnyezet által lefordított kódunk itt tárolódik gépi utasítások formájában.
- RAM: Gyors hozzáférésű memória s programunk futtatása közben ideiglenesen tárolt adatok számára. Tartalma kikapcsoláskor elvész.
- EEPROM: Flashnél régebbi technológia a kikapcsolást követően is megőrzendő adatok, konfigurációs beállítások, kezdeti állapotok, hosszabb szövegek eltárolásához. Nagyságrendileg 100.000 törlés az életideje.
Az EEPROM könyvtár azokat a funkciókat fogja össze, amikkel bájtonként tudjuk írni és olvasni a beépített memória ezen típusát. Az Arduino Mega kontrollerének (ATmega1280 és ATmega2560) 4096, az UNO és Duemilanove (ATmega328) 1024, a Diecimila, NG (ATmega168) és Digital (ATmega8) 512 bájt a kapacitása.
A könyvtár függvényei:
- read()
- write()
EEPROM.read()
Visszaadja az EEPROM adott címén található bájt értékét.
Szintaxisa:
EEPROM.read(address).
Paraméterei:
address: a memóriacím, ahonnan az olvasás kezdődik (0-tól számozva).
Arduino kód: 69eepromread
EEPROM.write()
Beállítja az EEPROM adott címén a megadott bájt értékét. Egy bájt kiírása 3,3 ms-ot vesz igénybe, ami a többi memóriatípus sebességét tekintve igen lassú folyamatnak számít, használata kihathat a teljes kódunk futására. Ne felejtsük el, hogy az EEPROM 100.000 írás után használhatatlanná válik!
Szintaxisa:
EEPROM.write(address, value).
Paraméterei:
address: a memóriacím, ahonnan az olvasás kezdődik (0-tól számozva),
value: a bájt értéke, amit szeretnénk beírni.
Arduino kód: 70eepromwrite
LiquidCrystal könyvtár
A Hitachi HD44780 folyadékkristályos kijelző meghajtó IC hosszú időn keresztül uralta a piacot, mint a rendkívül populáris, kizárólag monokróm szöveg megjelenítésére alkalmas faxok, telefonok, lézernyomtatók, fénymásoló gépek kijelzőjének vezérlője. Mostanra hobbisták és gyors prototipizálók közkedvelt megoldásává vált a mikrokontrollerek alfanumerikus üzeneteinek megjelenítésére. Az IC által meghajtott kijelzők pár általános szabálynak felelnek meg. Egy karakter mindig 5 vízszintes és 8 függőleges pixelből áll. A leggyakoribb típus egy sorban 8 karakter megjelenítésére alkalmas (8 x 1), de létezik 16 x 2, 20 x 2 és 20 x 4-es is. A kijelzők készülhetnek LED-es, fluoreszcens, elektrolumineszcens háttérvilágítással, vagy anélkül. Az IC maga is egy mikrokontroller, ROM-jában 208 karakter térképét tárolja – japán verziója a kana, európai verziója nyugati és cirill ABC betűiből áll. A LiquidCrystal könyvtár a vezérlő IC instrukciós kódjait és kommunikációs protokollját implementálta pár könnyen használható függvény formájában.
6 x 2-es alfanumerikus LCD HD44780-as vezérlővel
A kijelző csatolófelülete (interface), amihez kapcsolódhatunk, egy párhuzamos interfész – a 8 bitnyi adatot minden órajelre egyszerre kell megadni (D0-D7 lábak). Szerencsére szöveges üzenetekhez 4 bites üzemmódot is választhatunk, ami szabadon hagy 4 Arduino csatornát más célokra. Az RS (Register Select) láb logikai alacsonyra vagy magasra állításával választhatjuk meg, hogy az adatvonalak a kijelző mely memóriaterületére írjanak. Az írást az EN (Enable) lábbal engedélyezhetjük. Az adatregiszter tárolja az ASCII kódolású bájtokat, amik karakterként kerülnek megjelenítésre, az instrukciós regiszterben pedig utasítások tárolódnak a meghajtó számára. Ezek az utasítások a kijelző törlésére, a kurzor mozgatására és egyéb funkciókra vonatkoznak. A regiszterek állapotát vissza is olvashatjuk – az RW láb állapotának változtatásával megfordítható a D0-D7 adatvonalak iránya. A kijelző kontrasztját analóg módon a tápfeszültség leosztásával Vo lábon tudjuk beállítani (vagy digitális potméterrel). A háttérvilágítást annak típusától függően a kontraszthoz hasonló módon kezelhetjük. Megfelelő illesztéssel LED-es háttérvilágítást az Arduino egy PWM képes kimenetére is köthetjük, így programozhatóvá válik a fényerő állítása is.
Amire szükség lesz:
- Arduino,
- LCD kijelző HD44780-as meghajtóval,
- 10 kiloohmos potméter,
- próbapanel,
- vezetékek.
Kapcsolás:
Kössük az LCD RS lábát az Arduino digitális 12-es csatornájára, az EN lábát pedig a digitális 11-re. Az LCD 4-es, 5-ös, 6-os, 7-es adatvonalait pedig rendre a digitális 5, 4, 3, 2 csatornákra. A 10 kiloohmos potméterrel készítsünk feszültségosztót az 5 V-os tápvezetékről és kössük be a potméter közepét az LCD kontrasztját szabályozó Vo lábra. Az LCD 5 V-os tápfeszültségről működik (GND, Vcc). RW-t kössük a földre!
LCD kijelző Arduinohoz kapcsolása
Arduino kód: 71LCD
LiquidCrystal()
Létrehozza a kijelző egy példányát, ami 4 vagy 8 bites módban fog működni, attól függően, hogy a híváskor hány adatvonalat adunk meg.
Szintaxisa:
LiquidCrystal(RS, EN, D4, D5, D6, D7),
LiquidCrystal(RS, RW, EN, D4, D5, D6, D7),
LiquidCrystal(RS, EN, D0, D1, D2, D3, D4, D5, D6, D7),
LiquidCrystal(RS, RW, EN, D0, D1, D2, D3, D4, D5, D6, D7).
Paraméterei:
RS: Annak a digitális csatornának a száma, amihez a REGISTER SELECT van kötve.
EN: Annak a digitális csatornának a száma, amihez az ENABLE van kötve.
RW: Annak a digitális csatornának a száma, amihez a READ/WRITE van kötve.
D0-D7: Azok a digitális csatornák, amikhez az adatvonalak kapcsolódnak.
begin()
A kijelző méreteit, sorok és oszlopok számát határozza meg a könyvtár számára.
Szintaxisa:
lcd.begin(cols, rows).
Paraméterei:
lcd: a LiquidCrystal példány neve,
cols: a kijelző oszlopainak száma,
rows: a kijelző sorainak száma.
clear()
Üresre törli az megjelenítendő karaktereket tartalmazó adatregisztert és a kijelzőt.
Szintaxisa:
lcd.clear().
Paramétere:
lcd: a LiquidCrystal példány neve.
home()
A kurzort az első sor első karakterére – kijelző bal felső sarkába – mozgatja.
Szintaxisa:
lcd.home().
Paramétere:
lcd: a LiquidCrystal példány neve.
setCursor()
A kurzort a megadott helyre mozgatja.
Szintaxisa:
lcd.setCursor(cols,rows).
Paraméterei:
lcd: a LiquidCrystal példány neve,
cols: az oszlop, ahová a kurzort mozgatjuk,
rows: a sor, ahová a kurzort mozgatjuk.
write()
Egy bájtot, vagyis karaktert ír ki a kijelzőre.
Szintaxisa:
lcd.write(data).
Paraméterei:
lcd: a LiquidCrystal példány neve,
data: a megjelenítendő karakter ASCII-kódja.
Példakód:
void loop() {
if (Serial.available()) {
lcd.write(Serial.read());
}
}
print()
Szöveget jelenít meg a kijelzőn.
Szintaxisa:
lcd.print(data),
lcd.print(data, BASE).
Paraméterei:
lcd: a LiquidCrystal példány neve,
data: char, byte, long, int, string – amit megjelenítünk,
BASE: számrendszer alapja (opcionális) BIN, HEX, OCT, DEC.
cursor()
Hívását követően egy alulvonásként megjeleníti a kurzort.
noCursor()
Hívását követően kikapcsolja a kurzor megjelenítését.
blink()
Ha a kurzor látható, akkor bekapcsolja a villogtatását.
noBlink()
Ha a kurzor látható, akkor kikapcsolja a villogtatását.
noDisplay()
Kikapcsolja a kijelzőt.
display()
Visszakapcsolja a kijelzőt, ha előtte a noDisplay() hívással ki volt kapcsolva, és újra megjeleníti a szöveget, ami a kikapcsolás pillanatában volt látható.
scrollDisplayLeft()
Hívásakor egy karakterrel eltolja a kijelző teljes tartalmát balra.
scrollDisplayRight()
Hívásakor egy karakterrel eltolja a kijelző teljes tartalmát jobbra.
Arduino kód: 72LCDscroll
autoScroll()
Bekapcsolja a karakterek automatikus eltolását. Amikor egy új karaktert jelenítünk meg, a beállított iránynak megfelelően a már meglévő szöveget egy pozícióval elmozgatja.
Arduino kód: 73LCDauto
noAutoscroll()
Kikapcsolja a karakterek automatikus eltolását.
leftToRight()
Az automatikus karaktereltolás irányának beállítása balról jobbra.
rightToLeft()
Az automatikus karaktereltolás irányának beállítása jobbról balra.
createChar()
Segítségével létrehozhatunk olyan karaktereket, amit nem tartalmaz a ROM. Ezeket az 5 x 8 pontból álló jeleket glyph-nek is szokás nevezni. A vezérlő 8 különféle glyph-et tud eltárolni a létrehozása után.
Szintaxisa:
lcd.createChar(num, data).
Paraméterei:
lcd: a LiquidCrystal példány neve,
num: 0–7 a glyph száma, amelyik pozíción tárolni szeretnénk,
data: a karakter pixeleit tartalmazó tömb.
Arduino kód: 74create
Smiley glyph
- - - - - - - - -
forrás: http://arduino.cc/en/Tutorial/HomePage, http://arduino.cc/en/Tutorial/LiquidCrystal, http://arduino.cc/en/Reference/EEPROM