Reaali Robootika.COM

NXT robotimaailm ja programmeerimine C-keeles

7. 9 klass 1 õppetund Bluetooth ühenduse abifail

Tiigrihype_logoSee materjal on loodud Tiigrihüppe Sihtasutuse programmi ProgeTiiger raames.

Nii master kui ka slave Bluetooth programmide juures tuleb faili algusesse lisada järgmine rida.

#include "BluetoothCheck.nxc"

Master seadme programmis tuleb lisada programmi algusesse globaalsed muutujad ja task maini sees peab esmalt käivitama Bluetooth ühenduse algatamise.

Näide. Master NXT kasutamine

//MASTER

#include "BluetoothCheck.nxc"

 

const byte BTconn=1;

const string SlaveNXTName = "NXT5";

 

task main()

{

  //käivitatakse BT ühenduse kontroll ja/või loomine

  //kui ühendamine ei õnnestunud siis väljutakse programmist

  if(!BluetoothConnect(BTconn, SlaveNXTName)==NO_ERR)

       Stop(TRUE);

 

  //kuvame kasutajale ühe sekundi jooksul teate

  Wait(SEC_1);

 

  //siit järgneb programmikood mida soovitakse pärast

  //Bluetooth ühnduse loomist käivitada

}

Slave NXT programmis pole vaja globaalseid muutujaid, kuid task maini sees asub Bluetooth-ühenduse kontroll. Fail BluetoothCheck.nxc on tehtud universaalne, st. seda saab kasutadanii masteri kui ka slave’i juures.

 

 

Näide. Slave NXT kasutamine

//SLAVE

 

#include "BluetoothCheck.nxc"

task main ()

{

//käivitatakse BT ühenduse kontroll

//kui ühendamine ei õnnestunud siis väljutakse programmist

if(!BluetoothCheck()==NO_ERR)

       Stop(TRUE);

 

  //siit järgneb programmikood mida soovitakse pärast

  //Bluetooth ühnduse loomist käivitada

}

 

Näide. Bluetooth ühenduse abifail BluetoothCheck.NXC

//See on abifail BluetoothCheck.NXC, mida kasutatakse

//NXT-de vahelise ühenduse loomiseks ja kontrollimiseks

const int YhenduseOotamine = 7;

 

//alamprogramm NXTtootab kuvab kasutajale ootamise lõpuni jäävaid

//sekundeid ning üle ekraani liigub joon vasakult paremale,

//väljendades kasutajale seda, et NXT ikka töötab

task NXTtootab()

{

  long Start=CurrentTick();

  long Finish;

  int i, j, k;

  //muutuja speed määrab joone liikumise kiiruse

  int speed=20;

  while(TRUE)

  {

    j++;

    //k määrab joone lõpppunkti koordinaadi, joone pikkus 20px

    k=j-20;

    //i määrab joone alguspunkti koordinaadi

    i=j%100;

    k%=100;

    //joone alguspunktid

    PointOut(i, 25);

    PointOut(i, 27);

    PointOut(i, 29);

    //joone lõpp-punktid

    PointOut(k, 25, DRAW_OPT_CLEAR);

    PointOut(k, 27, DRAW_OPT_CLEAR);

    PointOut(k, 29, DRAW_OPT_CLEAR);

    //ekraanil kuvatakse yhenduse loomise lõpuni jäävad sekundid

    NumOut(50, LCD_LINE4, YhenduseOotamine-j/(1000/speed));

    //oodatakse ajahetk speed, mis on joone liikumise kiirus

    Wait(speed);

    //arvutatakse välja seni kulunud alamprogrammi aeg

    Finish = (CurrentTick()-Start)/1000;

    //kui alamprogramm on käinud kauem kui programmi

    //ootamine ette näeb, siis katkestatakse alamprogrammi töö

    if(Finish>YhenduseOotamine)

    {

      ClearScreen();

      break;

    }

  }

}

//Funktsioon Bluetooth paaristab master ja slave NXT-d

//seda funktsiooni kasutatakse MASTER NXT korral

int BluetoothConnect(int conn, string name)

{

  //ühenduse loomiseks vajalik struct-muutuja

  CommBTConnectionType args;

  //Slave NXT nimi millega paaristatakse

  args.Name = name;

  //Bluetooth ühenduse pordi number

  args.ConnectionSlot = conn;

  //kas ühendame (TRUE) või mitte (FALSE)

  args.Action = TRUE;

 

  //kontrollitakse kas NXT on paaristatud, kui ei ole,

  //siis käivitatakse alljärgneva if-lause esimene pool

  if (!BluetoothStatus(conn) == NO_ERR)

  {

    //käivitatakse alamprogramm NXTtootab

    StartTask(NXTtootab);

    //ekraanil kuvatakse kiri Yhenduse loomine

    TextOut(0, LCD_LINE1, "Yhenduse");

    TextOut(0, LCD_LINE2, "loomine...");

   

    //Bluetooth paaristamise loomine

    SysCommBTConnection(args);

    //ühenduse õnnestumiseks ootame 7 sekundit

    Wait(YhenduseOotamine*1000);

    //ühenduse loomine õnnestumise kohta kuvatakse teade

    if (BluetoothStatus(conn) == NO_ERR)

    {

      TextOut(0, LCD_LINE1, "Yhendatud");

      TextOut(0, LCD_LINE2, "edukalt!   ");

      TextOut(0, LCD_LINE3, name);

      return NO_ERR;

    }

    //kui ühendumine ei õnnestunud, kuvatakse Yhenduses viga

    else

    {

      ClearLine(LCD_LINE2);

      TextOut(0, LCD_LINE1, "Yhenduses viga");

      NumOut(0, LCD_LINE2, args.Result);

      Wait(SEC_1);

      return -1;

    }

  }

  //kui ühendus oli juba olemas, kuvatakse Yhendus olemas

  else

  {

    TextOut(0, LCD_LINE1, "Yhendus olemas");

    TextOut(0, LCD_LINE2, BTConnectionName(conn));

    return NO_ERR;

  }

}

//alljärgnev protseduur kontrollib programmi käivitamisel,

//kas Bluetooth ühendus on initsialiseeritud

//seda funktsiooni kasutatakse SLAVE NXT korral

int BluetoothCheck()

{

  //SLAVE korral on BTconn alati 0

  const byte BTconn=0;

  if (!BluetoothStatus(BTconn)==NO_ERR)

  {

    TextOut(0, LCD_LINE1, "Kaivita esimesena");

    TextOut(0, LCD_LINE2, "teine NXT.");

    Wait(SEC_3);

    return -1;

  }

  else

  {

    return NO_ERR;

  }

}

 

Add comment

Loading