Változók
Változó A változó egy olyan memórialokáció amelyhez szimbolikus nevet rendeltünk. Ezt a lokációt fel lehet tölteni vagy akár üresen is lehet hagyni. Különféle típusú értékek őrzésére szolgál. A változók azért fontosak mert a program futása közben változtathatjuk a tartalmukat (értéküket). Ezért is viselik a „változó” nevet. Az állandókat (konstansokat) nem lehet változtatni.
A változó típusa A változó típusa határozza meg a benne elhelyezendő adat természetét. Úgyszin- tén, a típus határozza meg hogy mennyi memória lesz rezerválva az adott változónak. A C programozási nyelv körülbelül 10 különféle típusú változót ismer.
Változótípusok boolean (false or true) – 1 byte char (az ‘a’-t számként őrzi – ASCII) – 1 byte, signed (-128 : +127), unsigned (0 : 255) byte (8-bit unsigned data, 0 : 255) int (2-bytes, signed -32768 : 32767 unsigned 0 : 65535) word ugyanaz mint az unsigned int
Változótípusok float (4-bytes signed -3.4028235 E+38 : 3.4028246E+38) long (4 bytes signed -2147483648 : 2147483647 unsigned 0 : 4294967295) float (4-bytes signed -3.4028235 E+38 : 3.4028246E+38) double (ugyanaz mint a float, de dupla pontossággal) array – ugyanolyan típusú elemek sorozata melyekhez indekszen keresztül lehet hozzáférni. méret: (elemek száma) x (típus mérete)
Változótípusok string – karakterek sorozata, az utolsó a null (ASCII 0). Az első betű kicsi „s”. méret: (elemek száma) x (1 byte) String – adatstruktúra (osztály) amely alkalmas a karakterláncok kezelésére. Az első betű a nagy „S”.
Roll-over Ha a változó értékét az adott típusra előrelátott felső határ fölé növeljük, akkor az intervallum elejére fog ugrani. int myInt = 32767; // az int típus // makszimális // értéke myInt = myInt + 1; // ezután a myInt // értéke -32768 Ugyanez történik kivonáskor is.
Deklaráció és definíció A deklaráció és a definíció NEM UGYANAZ! A változó deklarációja egy kijelentés amellyel egy azonosítót hozunk létre, és megjelöljük a változó típusát és (néha) dimenzióját. Az azonosító a változó neve, a típust az előző oldalakon ismertettük. A dimenzió a sorozatoknál és a String-eknél fontos.
Deklaráció és definíció A C programozási nyelvben a változót használat előtt muszáj deklarálni. Ha ezt nem tesszük meg, a fordítóprogram mindenképpen hibát fog jelezni.
Deklaráció és definíció - példák bool myVariable; // deklaráció myVariable = true; // definíció értékadással char myChar = ‘U’ // deklaráció és definíció // (az ‘U’=85 ASCII értéke) int ledPin = 8; byte myByte = B10111; // 23 bináris alakban
Deklaráció és definíció - példák long myLong = -123; float myFloat = -123456.1; A változó definiálása értékadást jelent egy korábban lefoglalt memórialokációnak az adott változó számára.
S.O.S. projekt Hardver: LED az Arduino 12-es lábacskájára kötve 220Ω-os ellenálláson keresztül. Szoftver: program amelyik a LED-et az S. O. S. Morze szimbólumoktól függően villogtatja. S: “. . .”, O: “- - -”, S: “. . .”
S.O.S. projekt int ledPin = 12; void setup () { pinMode(ledPin, OUTPUT); } void loop () { digitalWrite (ledPin, HIGH); delay(200); // dot digitalWrite (ledPin, LOW); delay(200); delay(500); digitalWrite (ledPin, HIGH); delay(500); // dash digitalWrite (ledPin, LOW); delay(500); . }
S. O. S. projekt 4 sor állandóan ismétlődik: HIGH, delay, LOW, delay, … A delay vagy 200ms (dot), vagy 500ms (dash) A kód rövidebb és hatékonyabb lesz ha az állandóan ismétlődő műveletekre függvényt írunk. A függvényt flash-nek fogjuk nevezni, és a duration-nal (időtartam) fogjuk hívni. Az időtartam 200 vagy 500 (milliszekundum).
Flash függvény void flash (int duration) { digitalWrite (ledPin, HIGH); delay (duration); digitalWrite (ledPin, LOW); }
Az új loop függvény void loop () { flash (200); flash (200); flash (200); // S delay (300); flash (500); flash (500); flash (500); // O delay (1000); }
A program a flash függvénnyel int ledPin = 12; void setup () { pinMode (ledPin, OUTPUT); } void loop () { // S flash (200); flash (200); flash (200); delay (300); // O flash (500); flash (500); flash (500); delay (1000); void flash (int duration) { digitalWrite (ledPin, HIGH); delay (duration); digitalWrite (ledPin, LOW); }
Ciklusok Utasítások csoportját ismétlik meghatározott számú alkalommal amíg valamilyen feltétel nem teljesül. Az S. O. S. projekt az “S” betű megjelenítéséhez a LED-et csak 3-szor villantotta fel, ezért a programot gyalog is meg lehetett írni. Mit csinálnánk ha a LED-et több 100-szor kellene felvillantani? A program írása eltartana, a program pedig sok memóriát foglalna el. Ilyenkor használjuk a for ciklust.
“for” ciklus Akkor használjuk ha előre ismerjük a végrehajtások számát. Szintakszis: for (int i = 0; i < 100; i ++) { flash(200); } Mit kell tenni minden alkalommal miután áthaladunk a cikluson. Ebben az esetben az “i”-t növeljük eggyel. Ciklusban maradás feltétele, “i” kisebb mint 100. Számláló változó deklarációja és a kezdőérték definíciója – 0.
“while” ciklus Az előző feladatot while ciklussal is meg lehetett volna valósítani. int i = 0; while (i < 100) { flash(200); i ++; } Ahhoz, hogy a ciklusban maradjunk, a zárójelben lévő kifejezés muszáj hogy igaz (true) legyen, ellenkező esetben a program a kapcsos zárójel utáni utasítással folytatja a végrehajtást. A kapcsos zárójelek közötti utasításokat “blokk”-nak nevezzük.
Sorozatok (arrays) A sorozatok több érték őrzésére szolgálnak. Eddig a változók csak egy értéket tartalmaztak (általában int-et). A sorozat olyan változó amelyik több értéket tartalmaz, és ahol mindegyik elemhez hozzáférhetünk a sorszáma alapján. Az elemek számozása (indekszelése) 0-tól kezdődik.
Sorozatok Elkészítjük a Morze szimbólumok hosszának listáját (200ms és 500ms). int durations [] = {200, 200, 200, 500, 500, 500, 200, 200, 200}; Ha azonnal definiáljuk a sorozat tartalmát, nem szükséges megadni a sorozat elemeinek számát. Ha nem definiáljuk a tartalmat, akkor int durations [10];
Az új loop() void loop () { for (int i = 0; i < 9; i ++) flash (durations [i]); } delay(1000);
Morze átalakító Hardver: ugyanaz mint az előző projektekben. Szoftver: a Serial Monitor-ba írt szöveget Morze kóddá alakítani, és az Arduino-ra csatlakoztatott LED-en kiírni.
Morze átalakító dash (-) = 3 * dot (.) (- és .) közötti szünet = betűk közötti szünet = = 1 * dash(-) szavak közötti szünet = = 7 * dot(.)
Program
Program
Program