Leírás
Az array (tömb) olyan változók gyűjteménye, amelyekhez indexszámmal lehet hozzáférni. Az Arduino vázlatokban a C++ programozási nyelvű tömbök bonyolultak lehetnek, de az egyszerű tömbök használata viszonylag könnyű.
Tömb létrehozása (deklarálása)
Az alábbi módszerek mindegyike érvényes módja egy tömb létrehozásának (deklarációjának).
int myInts[6];
int myPins[] = {2, 4, 8, 3, 6};
int mySensVals[5] = {2, 4, -8, 3, 2};
char message[6] = "hello";
Egy tömböt deklarálhat inicializálás nélkül, mint a myInt-ben.
A myPins-ben deklarálunk egy tömböt anélkül, hogy kifejezetten megválasztanánk a méretet. A fordító megszámolja az elemeket, és létrehoz egy megfelelő méretű tömböt.
Végül inicializálhatja és méretezheti a tömböt, mint a mySensVals-ban. Vegye figyelembe, hogy egy char típusú tömb deklarálásakor az inicializálásnál eggyel több elem szükséges a kötelező nulladik karakter megtartásához.
Hozzáférés egy tömbhöz
A tömbök nulla indexeltek, vagyis a fenti tömb inicializálásra hivatkozva a tömb első eleme 0 indexű, tehát
mySensVals[0] == 2, mySensVals[1] == 4,
és így tovább.
Ez azt is jelenti, hogy egy tíz elemű tömbben a kilences index az utolsó elem. Ennélfogva:
int myArray[10]={9, 3, 2, 4, 3, 2, 7, 8, 9, 11};
// myArray[9] 11-et tartalmaz
// myArray[10] érvénytelen és véletlenszerű információt tartalmaz (más memóriacím)
Emiatt óvatosnak kell lennie a tömbök elérésekor. Egy tömb végén túli elérése (amely a deklarált tömb mérete -1-nél nagyobb indexszámot használ) olyan memóriából olvas, amelyet más célokra használnak. Az ezekről a helyekről való olvasás valószínűleg nem sok mindenhez vezet, kivéve, hogy érvénytelen adatokat eredményez. A véletlenszerű memóriahelyekre való írás határozottan rossz ötlet, és gyakran szerencsétlen eredményekhez, például összeomláshoz vagy programhibákhoz vezethet. Ez is egy nehezen felderíthető hiba lehet.
A BASIC-kel vagy JAVA-val ellentétben a C++ fordító nem ellenőrzi, hogy a tömbhozzáférés a megadott tömbméret törvényes határain belül történt-e.
Érték hozzárendelése egy tömbhöz:
mySensVals[0] = 10;
Érték lekérése tömbből:
x = mySensVals[4];
Tömbök és FOR ciklusok
A tömböket gyakran a ciklusok belsejében kezelik, ahol a ciklusszámlálót használják indexként minden tömbelemhez. Ha például egy tömb elemeit a soros porton keresztül szeretné kinyomtatni, akkor valami ilyesmit tehet:
for (byte i = 0; i < 5; i = i + 1) {
Serial.println(myPins[i]);
}