A port angolul azt jelenti, kikötő. A kikötőbe hajók futnak be, vagy hajók indulnak. Egy mikrokontroller lábait is portnak nevezik, mert oda jelek futnak be, vagy jelek indulnak ki.
Az A-star panelen az alábbi kivezetéseket használjuk:
Ezek közül a 0-12 közötti port - mert innen jelek indulhatnak el, vagy jelek futhatnak be. De akkor mi a többi? A többi nem port, a többi fix villany bemenet, vagy kimenet. A VIN és a GND közé elemet tehetünk, így az A-Star önállóan is működtethető. A jobb oldalon az 5V kivezetés és a GND között 5V villany van, ezt akkor fogjuk használni, ha olyan érzékelőket építünk be, amiknek szükségük van folyamatos energiaellátásra.
Lehet kimenet, vagy bemenet, ezt gondolom már kitaláltad. De ezen kívül is vannak variációk:
pinMode( port, OUTPUT); és digitalWrite(port, 0 vagy 1) - ez digitális kimenet
pinMode( port, OUTPUT); és analogWrite(port, 0..255) - ez analóg kimenet
pinMode( port, INPUT); és digitalRead(port) - ez digitális bemenet
pinMode( port, INPUT_PULLUP); és digitalRead(port) - ez egy okosított digitális bemenet
pinMode( port, INPUT); és analogRead(port) - ez analóg bemenet, 0..1023 közötti értéket ad
Van egy kis rendetlenség azonban az analogRead esetén! Először is, nem minden port tud analóg bemenetként működni, csak azok amik mellett a panelen kis háromszög van. Ezek mellé A0, A1, stb. betűket is tettem a rajzon. Ráadásul ezek furán vannak számozva: ha a 4-es porton lévő villany értékét akarjuk megkapni, akkor az analogRead(6)-ot kell írni. Ez apró kis kényelmetlenség, de vagy megszokjuk, vagy később megtanuljuk, hogy hogyan lehet elrejteni.
Az analogWrite azokon a portokon működik, amik mellé kis hullámvonalat rajzoltak. Ilyen a 3,5,6,9,10 és 11-es port. Ezért néha lehet, hogy variálni kell, hogy melyik be és kimenetet melyik portra tesszük: ha szeretnénk analóg kimenetet, akkor csak ezeket használhatjuk.
Ezt most mind meg kell tanulni? Dehogy kell! Csak annyit kérek, hogy ne feledd, az A-star analóg és digitális dolgokhoz is jó!
A számítógépeknél a 0 a "legelső" egész szám, ezért sokszor nullával kezdenek minden sorszámozást. Ez egy egyszerű szokás, amin nem kell meglepődni.
Upsz, van egy kis gond. A ledek igaziból 1.8-2V körüli villanyt kedvelnek, az A-starból pedig 5V jön ki. Ezt a különbséget úgy lehet megszüntetni, hogy a leddel sorba be kell tenni egy pici ellenállást. Az ellenállás - ez a kis hernyószerű alkatrész - arra jó, hogy nehezebben megy benne a villany. Egy ledhez 220-470 ohm értékű ellenállás kell, és azzal már 5V-ról is jól megy, valahogy így:
Mi történik itt? Az A-star 0-ás kimenetére csatlakozik az ellenállás. Az ellenállásra a led. A led másik oldala pedig a GND pontra megy. (A GND pont olyan, mint az elemek (-) kivezetése: minden villanyt ehhez képest létezik, így amikor az A-star 5V-ot tesz ki az 1-es porton, az ehhez képest 5V.)
Ez az ellenállás dolog azért elég macera. Ezért készítenek olyan ledet is, amibe ez be van építve, így a ledet csak simán rá kell kötni az A-starra, és készen vagyunk.
A rajzon a bekarikázott pici fekete mákszem az ellenállás! Alig látszik, és innentől nekünk sem kell törődni vele! Ezért használunk ilyen ledeket mostantól fogva! Ekkor ilyen egyszerű lesz minden:
Lehet, hogy kicsit fura, hogy mit is kötöttünk össze mivel az előbb. De valójában ez még mindig csak olyan, mint a legelső elemlámpa kapcsolásunk:
Éppen csak annyi a különbség, hogy a gombot a programunk nyomogatja! Amikor bekapcsoljuk a kimenetet, az pont olyan, mintha megnyomnánk a gombot. A lámpa helyett most egy ledet tettünk be.
Elviekben, ha az 9-es portot analóg formában írjuk, akkor 0..255 közötti értéket tehetünk rá. A 07-es részből tudjuk, hogy ez azt jelenti, hogy 0 esetén kikapcsolt, 255 esetén bekapcsolt lesz a led, a közte lévő értékeknél meg - halványabb!
Próbáld csak meg:
void setup() {
pinMode(9, OUTPUT);
}
void loop() {
analogWrite(9, 0);
delay(100);
analogWrite(9, 50);
delay(100);
analogWrite(9, 100);
delay(100);
analogWrite(9, 150);
delay(100);
analogWrite(9, 250);
delay(100);
}