Rólunk Cikkek Galéria Projektek Tagok Tudásbázis Tanfolyam Workshopok 3D Nyomtatás

LEGO Tanfolyam: Programozás 1

A környezetről

A tanfolyamalkalmak során a Bricx Command Centert használjuk az NXT programozására, ami céltudatosan különböző programozható LEGO termékekhez lett tervezve. A környezetről néhány fontos tudnivaló:

Alapesetben nem ismeri magyar billentyűzetkiosztással a ;-t, ami igazán kellemetlen. Ezen viszont egy makró beállításával könnyen lehet segíteni:

Felső menüpontokból View → Macro manager → Create, majd illeszük be a következő kódrészletet:

macro ;
    begin
    ecString ';'
end

Ezek után ha a makróhoz hozzárendeljük a pontosvesszőhöz tartozó billentyûkombinációt már tudunk is ;-t írni. Ahhoz, hogy a kódot le tudjuk fordítani, először egyszer el kell menteni, különben hibát dob a fordító. Szükséges szoftverek: NXT Phantom Driver, Bricx CC

Bevezetés

A programozáshoz az NXC (Not Exatly C) nyelvet használjuk ami hasonlít a C/C++-hoz:

Mivel a nyelv LEGO NXT termékek programozására lett létrehozva, ezért helyenként szükségszerûen különbözik is a C/C++-tól. Az első ilyen különbség amivel a tanfolyam során találkozhatunk az már a programunk vázában is látható. Az NXT maga taskokat futtat, emiatt a legegyszerûbb dologhoz is szükségünk van egyre. Alapértelmezésként ez a kiinduló task a “main” ami a kódban a következőképpen néz ki:

task main() {
  // futtatnivaló kód itt
}

Az NXT használatához fontos alapfüggvények

Szenzorok

Az NXT-nek 4 bemeneti portja van amire szenzorok köthetők, ezeket a programban a beépített IN_1, IN_2, IN_3 és IN_4 előre definiált konstansok segítségével lehet elérni.

Az egyes szenzorok használata előtt be kell állítanunk, hogy hol milyen szenzort szeretnénk használni, amihez a következő függvényeket lehet használni:

A szenzorok értékét a következő függvényekkel lehet visszakérni:

Mozgás

A motorok használatához az NXT 3 kimeneti portját használhatjuk amiket a programban a beépített OUT_A, OUT_B és OUT_C konstansok segítségével lehet kezelni. Sokszor lehetőség van egyszerre több kimeneti port használatára is, erre használható ezeknek a kombinációja. Ha például az A és C kimeneti portot szeretném használni, az OUT_AC segítségével ez megtehető.

A motorok kezelésére a következő függvények használhatók:

Egyéb függvények

Példák

Előremegy fél másodpercig, visszamegy fél másodpercig, és folyamatosan írja ki az ultrahang szenzor értékét (távolság).

task main() {
  // Ultrahang szenzor inicializálása
  SetSensorLowspeed(IN_1);
  // A és B portokon lévő motorokat előremenetbe kapcsolja
  OnFwd(OUT_AB, 60);
  // Fél másodpercet vár
  Wait(500);
  // Motorokat hátramenetbe kapcsolja
  OnRev(OUT_AB, 60);
  // Ismét vár
  Wait(500);
  // Kikapcsolja a motorokat
  Off(OUT_AB);
  // Végtelen ciklus
  while(1) {
    // Kiírja a távolságot
    NumOut(0, LCD_LINE1, SensorUS(IN_1), FALSE);
    // Kirja, hogy "Hello World"
    TextOut(0, LCD_LINE2, "Hello World", FALSE);
    // Vár 100ms-ot
    Wait(100);
    // Törli a kijelzőt
    ClearScreen();
  }
}

Megy, amíg meg nem nyomják a gombot, ha kék színt érzékel, akkor megfordul és megy tovább.

task main() {
  // Nyomógomb inicializálása
  SetSensorTouch(IN_3);
  // RGB szenzor inicializálása
  SetSensorColorFull(IN_2);
  // Amíg nincs benyomva a gomb, addig fut
  while(Sensor(IN_3) == 0) {
    // Megy előre
    OnFwd(OUT_AB, 60);
    // Ha kéket érzékel
    if(Sensor(IN_2) == 2) {
      // A porton lévő motor előre
      OnFwd(OUT_A, 50);
      // B hátra
      OnRev(OUT_B, 50);
      // Vár 2,9 másodpercet
      Wait(2900);
    }
  }
}