Mivel a RobotC nyelv a C-re alapul, így a legtöbb tulajdonságuk megegyezik.
Az alaptípusok láttán egyértelmű a rokonság a C nyelvvel. A következő táblázat tartalmazza a lényeges különbségeket.
Típus kulcsszava | Leírás | Megjegyzés |
int | Egész szám, -32768 és 32768 közötti értékek. | C-vel szemben (ahol implementációfüggő) itt kötötten 16 bites ábrázolás |
long | Egész szám, -2147483648 és 2147483648 közötti értékek | 32 bites ábrázolás |
float | Lebegőpontos valós szám | Azok a proramozási nyelvek illetve környezetek melyek a RobotC célhardvereihez íródnak nem tartalmaznak
lebegőpontos ábrázolású valós szám típust, így ezzel a RobotC egyedülálló. Ennek oka egyébként, hogy ezen robotok vezérlőegysége nem tartalmazza beépítve a lebegőpontos műveleteket, mint a ma használatos számítógépek processzorai, így a nyelv feladata a valós számok használatának megvalósítása. |
bool | Logikai típus, értéke true vagy false. | A C++-os bool típushoz hasonlóan használhatjuk ezt a típust. 1 bájton tárolódik, értéke true esetén 1, false esetén 0. Mivel megvalósítása int alapú, C-hez hasonlóan minden nem 0 érték true-nak felel meg. |
char | Karakter típus | |
string | Karakterlánc | A C nem tartalmazza ezt a típust beépítve, de a RobotC igen. |
Az unsigned típusok a char típus kivételével nem támogatottak. Az unsigned kulcsszó használata egyéb típusoknál warning-ot generál és jelentése figyelmen kívül hagyásával folytatódik a fordítás
RobotC-ben nincsenek mutatótípusok és a referencia típus is csak korlátozottan jelenik meg, mivel a nyelvben nincs dinamikus memóriafoglalás, mert nincsen heap
Ennek okai:
Referenciatípus van, de a készítők csak azért tették bele a nyelvbe, hogy lehessen alprogramoknak cím szerint paramétert átadni. Bár a legtöbb nem primitív adatszerkezet illetve algoritmus megvalósításához szükséges mutatók jelenléte egy programozás nyelvben, robotikában rengeteg feladat megoldható nélkülük. Így bár első hallásra ijesztő a pointer típusok hiánya, a nyelv kis robotok programozására jól használható.
Vektor típuskonstrukciónak RobotC-ben (C-hez hasonlóan) a tömb típus felel meg. Használata a pointerek hiánya miatt azonban módosul oly módon, hogy a
tömb méretét a tömb típusú változó deklarálásakor meg kell adni.
2 dimenziós vektorok támogatva vanak nyelvi eszközökkel, például
2-nél több dimenziós tömbök rekord adatszerkezettel, vagy címfüggvények használatával képezhetők, de a nyelv nem ad más eszközt a kezünkbe.
Megegyezik az ANSI C struct típuskonstrukciós eszközével.
A C-ben kevesebbek által használt unió típus határozottan jól alkalmazható, ha esetleg alacsonyabb szintű feladatok megvalósításához optimalizált kódot szeretnénk írni.
Robotok programozásánál speciális input és output eszközökkel dolgozunk. Input eszközök a robotra szerelt különböző szenzorok, "output" eszközök a robot motorjai, melyekkel mozgatjuk (motorok felhasználása természetesen nem csak a robot mozgatásában merül ki). A roboton található mikrovezérlő alacsonyszintű hozzáférést biztosít ezekhez az eszközökhöz, de egy magasszintű robot-programozási nyelvtől azt várjuk el, hogy ezen egységek egyszerű kezelhetőségét biztosítsa.
Objektumelvű leírásban a Motorok és a Szenzorok is megfeleltethetők egy-egy osztálynak. A Motor osztály példányszintű művelete lehet például, hogy forogjon előre irányba, forogjon hátra irányba, a Szenzor osztálynak példányszintű függvénye lekérheti a szenzor által éppen mért értéket. Ebben a megközelítésben az aktuális robot felépítésnek megfelelően létrehozunk motor és Szenzor példányokat, melyek műveleteit használva érjük el a hardvereket.
A RobotC nem ilyen objektumelvű megközelítést használ egyszerűen azért mert a szűkös erőforrásoknál luxus lenne egy ilyen szintű ábárzolás. Például RobotC-ben nincsen szükség példányok létrehozására, mert kötött hardverek a céleszközök, például a LEGO NXT-nek 3 db motorja lehet (A,B,C) és 4 db szenzort köthetünk rá (S1, S2, S3, S4). Ezért RobotC-ben ezek a példányok statikusan minden programnál létrejönnek.
A motorokhoz és beálíltásaikhoz különböző tömbökön keresztül férhetünk hozzá. Legfontosabb ilyen tömb a motor tömb. A motor tömb indexei a különböző motorok azonosítói, az egyes indexekhez tartozó érték a megfelelő motor aktuális sebességét jelenti.
RobotC-ben elérhető a motorok pozíciója, vagyis hogy mennyit fordult azóta, hogy legutóbb inicializálták. A fordulás fokban értendő, egész szám reprezentálja.
Ezt a nMotorEncoder tömb megfelelő indexű elemei tartalmazzák. Az nMotorEncoderTarget tömbbel pedig megadhatjuk, hogyha elér a motor egy bizonyos fordulatot
(a tömb megfelelő indexű elemének beállított érték) akkor a motor leáll. Ezzel a két tömbbel precíz mozgások programozhatók le.
Például a következő alprogrammal 2 fordulatot tesz meg mindkét motor, ami tekintve hogy tudjuk mekkora a kerék átmérője azt jelenti
meg tudjuk mondani mennyit menjen előre pontosan:
RobotC-ben egy X motorhoz hozzáköthetjük Y motort, és így ha X-et elindítjuk Y automatikusan vele együtt mozog. Ilyen konstrukciók robotoknál sokszor hardveresen vannak megvalósítva mikrovezérlők segítségével. RobotC-ben ezt szoftveresen tehetjük meg, ami egy sokkal rugalmasabb megoldás, a programkód olvashatósága javul, valamint a hibalehetőségek száma csökken.
A szinkronizáció beállítása az nSyncedMotors változó értékenék megadásával történik.
A lehetséges értékek:
Még be kell állítanunk az nSyncedTurnRatio változó értékét is, mely 0 és 100 között lehet és azt állítja be, hogy hány százalékát fordulja az Y motor az X-nek.
Látható, hogy egyszerre csak két motort tudunk szinkronba kötni RobotC-ben, ami az esetek 99%-ban elég, mert a szinkronizált motorokat többnyire arra használjuk, hogy a bal és jobb motorokat összehangoljuk.
A következő példa ugyanazt csinálja mint az előző szekcióban: előremegy precízen 2 kerékfordulatnyit. Itt már szinkronizált motorokat használunk
az egyenes mozgás programozására, ezért például a program végén biztosak lehetünk benne, hogy ha a bal motor leáll, akkor a jobb is.
A robothoz kötött szenzorokat hasonló módon, tömbön keresztül tudjuk elérni RobotC-vel. Szenzorokra az S1, S2, S3, S4 konstansokkal tudunk hivatkozni,
de a motorokhoz hasonlóan a fejlesztői környezetben beállíthatunk nekik saját neveket. Ekkor a következő fodítói utasítás adódik a programnkhoz:
A különböző típusű érzékelők és tulajdonságaik a következő táblázatban láthatóak:
Érzékelő típusa | Leírás | Értéke |
sensorTouch | Nyomásérzékelő | 0 vagy 1 |
sensorLightActive | fényérzékelő LED-del | 0-tól 100-ig, százalék |
sensorLightInactive | fényérzékelő LED nélkül | 0-tól 100-ig, százalék |
sensorSoundDB | hangérzékelő | 0-tól 100-ig, százalék |
sensorSONAR | ultrahangos távolságmérő | 0-tól 255-ig, centiméterben |
A futtató környezet állandóan puffereli az összes szenzorból bejövő adatokat, és amikor azokra szükség van, már csak a pufferből kell a mérési adatot visszaadni a futó programnak. Ez nagyságrenddel gyorsabb futást eredményez, mint más robotokra írt progamozás nyelv által generált program.