BricxCC: Porovnání verzí

Z MediaWiki SPŠ a VOŠ Písek
Skočit na navigaci Skočit na vyhledávání
Bez shrnutí editace
Bez shrnutí editace
Řádek 238: Řádek 238:
'''Úkol č. 6'''
'''Úkol č. 6'''


'''Zadání:'''  
'''Zadání:''' Sonar


'''Funkce:'''  
'''Funkce:'''  
Řádek 247: Řádek 247:


<source lang"C">
<source lang"C">
#include "NXCDefs.h"                      //vložení hlavičkového souboru
task main()                              //hlavní funkce
{
SetSensorTouch (IN_1);                  //zapnutí tlačítka
SetSensorLowspeed (IN_4);                //zapnutí sonaru
SetSensorMode (IN_1, IN_MODE_PERIODCOUNTER); //přepnutí módu na čítač 
int Tone;                                //tón
int Frequency;                          //frekvence
int Distance;                            //vzdálenost
int Touch;                              //stav tlačítka 
while(true)                              //nekonečná smyčka
  //Distance = SensorUS (IN_4);          //načte vzdálenost ze sonaru v cm
  Touch = Sensor (IN_1);                //zjistí stav tlačítka
  Distance = 1; 
  if(Touch > 10) ClearSensor (IN_1);    //zajištění přetečení 
  Tone = Touch * 100;                    //výpočet tónu 
  Frequency = Tone + Distance;          //výpočet frekvence   
  PlayTone(Frequency, 0);                //zahrání zvuku   
  TextOut(10, LCD_LINE2, "Ton:", true);  //vypsání hodnot 
  TextOut(10, LCD_LINE4, "Frekvence:");
  NumOut (50, LCD_LINE2, Tone); 
  NumOut (50, LCD_LINE4, Frequency);
}
}                                        //konec programu


</source>
</source>




Řádek 256: Řádek 289:
'''Úkol č. 7'''
'''Úkol č. 7'''


'''Zadání:'''  
'''Zadání:''' Enkodér


'''Funkce:'''  
'''Funkce:'''  
Řádek 265: Řádek 298:


<source lang"C">
<source lang"C">
#include "NXCDefs.h"                      //vložení hlavičkového souboru
task main()                              //hlavní funkce
{
SetSensorTouch (IN_1);                  //zapnutí tlačítkového senzoru na portu 1 
int NXTCounter;                          //proměné pro uložení hodnot z čítačů
int ServoCounter;
bool Touch;                              //uložení stavu tlačítka 
while(true)                              //nekonečná smyčka
{
  Touch = Sensor (IN_1);                  //zjištění stavu tlačítka
  NXTCounter = MotorRotationCount (OUT_B);//zjískání natočení z čítače v NXT
  ServoCounter = MotorTachoCount (OUT_B); //zjískání natočení z čítače serva 
  if(Touch == true) ResetRotationCount (OUT_B); //vynulování čítače v NXT 
  TextOut (10, LCD_LINE3, "NXT citac:", true); //zobrazení textu
  TextOut (10, LCD_LINE4, "Servo citac:"); 
  NumOut (82, LCD_LINE3, NXTCounter);    //zobrazení hodnot
  NumOut (82, LCD_LINE4, ServoCounter); 
  Wait (1);                              //spoždění 1ms
}
}                                        //konec programu


</source>
</source>




Řádek 274: Řádek 334:
'''Úkol č. 8'''
'''Úkol č. 8'''


'''Zadání:'''  
'''Zadání:''' Joystick


'''Funkce:'''  
'''Funkce:'''  
Řádek 283: Řádek 343:


<source lang"C">
<source lang"C">
#include "NXCDefs.h"                      //vložení hlavičkového souboru
task main()                              //hlavní funkce
{
int MiddleY = (Sensor (IN_1) / 3);      //určení Y středu
int MiddleX = (Sensor (IN_2) / 3);      //určení X středu 
int PositionX = 0;                      //X pozice kurzoru
int PositionY = 0;                      //Y pozice kurzoru 
while(true)                              //nekonečná smyčka 
  PositionY = (MiddleY - (Sensor (IN_1) / 3)) + 32; //vypočítání pozice
  PositionX = (MiddleX - (Sensor (IN_2) / 3)) + 50; 
  ClearScreen ();                        //smazání obrazovky 
  CircleOut (PositionX, PositionY, 2);    //vykreslení kurzoru 
  Wait(1);                                //čekání 1ms pro odstranění blikání
}
}                                        //konec programu


</source>
</source>

Verze z 31. 5. 2011, 11:38

BrixCC – textový programovací nástroj pro vývoj robotických aplikací s LEGO roboty RXC a NXT.


Postup: 1. Stáhněte a nainstalujte program ze stránek http://bricxcc.sourceforge.net/

2. Nainstalujte nebo nakopírujte program do složky: C:\Program Files (x86)\

3. Program spusťte. V okně nastavte vyhledání a připojení NXT. Zvolte port, který chcete využít. Nabízí se USB nebo BlueTooth. Firmware nechte na Standard.

4. Následně v novém okně můžete psát program.

5. Každý program bude na začátku vypadat následovně.






















Ukázky programů:

Úkol č. 1 Zadání: Napište program tak, aby došlo k výpisu textu (i čísel) na LCD displeji robota NXT. Text musí být bez diakritiky.

Funkce: Po úvodní inicializaci a skoku do nekonečné smyčky, se vypíše text „Nahodna cisla“ a vygeneruje se náhodné číslo. Těchto 8 náhodných čísel se postupně zobrazí vedle sebe. Mezi jednotlivým generováním je zpoždění 300 ms.

Ukázka programu:

#include "NXCDefs.h"                      //vložení hlavičkového souboru

task main()                               //hlavní funkce
{
 int RandomValue;                         //náhodné číslo
 int X = 10;                              //poloha
 
 while(true)                              //nekonečná smyčka
  {
   TextOut (10, LCD_LINE3, "Nahodna cisla"); //výpis textu na display

   RandomValue = Random(10);             //vygenerování náhodného čísla od 0 do 9

   NumOut (X, LCD_LINE5, RandomValue);   //výpis hodnoty na display

   X += 10;                              //inkrementace X o 10
   if(X > 80) X = 10;                    //kontrola překročení hodnoty

   Wait(300);                            //spoždění o 300 milisekund
  }
}                                        //konec programu


Úkol č. 2

Zadání: Vyzkoušejte program, který řeší zobrazení grafických obrazců, pomocí kterých se zobrazuje stav baterie robota

Funkce: Načítaná hodnota, která je v mV, se vypíše a zároveň přes vzorec převede na procentuelní úroveň a ta se poté vykreslí. Navíc při poklesu napětí pod 6V se ohlásí stav nízké úrovně baterie.


Ukázka programu:

#include "NXCDefs.h"                      //vložení hlavičkového souboru

task main()                               //hlavní funkce
{
 int BatLvl;                              //hodnota baterie
 int BatPos;                              //pozice stavu baterie
 int PercentBat;                          //procentuelní stav baterie
 
 while(true)                              //nekonečná smyčka
  {
    BatLvl = BatteryLevel ();             //stav baterie v mV
    BatPos = ((BatLvl * 78) / 8500);      //vypočítání polohy na grafu stavu baterie
    PercentBat = (BatLvl / 85);
    
    RectOut (10, 25, 80, 22, true);       //vykreslení grafu
    RectOut (11, 26, BatPos, 20);         //vykreslení stavu baterie do grafu
    
    if(BatLvl < 6000) TextOut(10, LCD_LINE1, "Low Batery"); //oznámení nízkého stavu baterie
    
    NumOut(10, LCD_LINE2, BatLvl);        //vypsání hodnoty v mV
    TextOut (36, LCD_LINE2, "mV");
    NumOut(58, LCD_LINE2, PercentBat);    //vypsání hodnoty v %
    TextOut (75, LCD_LINE2, "%");
    
    Wait(10);                             //spoždění 10ms (kvůli problikávajícímu jevu při mazání)
  }
}                                         //konec programu



Úkol č. 3

Zadání: Naprogramujte robota tak, aby při stisknutí senzoru doteku zobrazoval na LCD displeji Stisknuto/Rozepnuto.

Funkce: Na LCD displeji je zobrazována hodnota 0=Rozepnuto. Při sepnutí tlačítka se zobrazí hodnota 1=Stisknuto.

Ukázka programu:

#include "NXCDefs.h"                      //vložení hlavičkového souboru

task main()                               //hlavní funkce
{
 SetSensorTouch (IN_1);                   //zapnutí tlačítkového sensoru na portu 1

 //SetSensorMode (IN_1, SENSOR_MODE_PULSE); //zapne mod pro čítač - reaguje jen na sestupnou hranu (vypínaní)
 //SetSensorMode (IN_1, SENSOR_MODE_EDGE);  //zapne mod pro čítač - reaguje na vzestupnou i sestupnou hranu

 int Touch;                               //proměnná pro uložení stavu tlačítka

 while(true)                              //nekonečná smyčka
 { 
  Touch = Sensor (IN_1);                  //zjištění stavu

  NumOut (10, LCD_LINE2, Touch);          //vypsání hodnoty na display

  if(Touch == true)                       //pokud je stisknuto tlačítko 
  { 
   TextOut (10, LCD_LINE3, "Stisknuto");  //vypsání stavu
  } 
  else 
  {  
   TextOut (10, LCD_LINE3, "Rozepnuto");
  }
 }
}                                         //konec programu



Úkol č. 4

Zadání: Naprogramujte robota tak, aby zobrazoval na LCD displeji hlasitost okolního ruchu.

Funkce: Robot pomocí senzoru hluku snímá hlasitost okolí a tu poté zobrazuje na LCD displeji.

Ukázka programu:

#include "NXCDefs.h"                      //vložení hlavičkového souboru
  
task main()                               //hlavní funkce
{ 
 SetSensorSound (IN_2);                   //zapnutí tlačítkového senzoru na portu 1

 int Sound;                               //proměná pro uložení hodnoty světla 
 int SoundPos;                            //poloha ekvalizéru

 while(true)                              //nekonečná smyčka
 {   
    Sound = Sensor (IN_2);                //stav baterie 

    SoundPos = (((Sound * 76) / 100));    //vypočítání polohy ekvalizéru 

    RectOut (12,27, SoundPos, 1, true);   //vykreslení ekvalizéru  
    RectOut (10, 25, 80, 5);              //vykreslení grafu   

    NumOut(10, LCD_LINE2, Sound);         //vypsání hodnoty   
    Wait(1);                              //spoždění 1ms 
 }
}                                         //konec programu



Úkol č. 5

Zadání: Naprogramujte robota tak, aby pomocí senzoru světla zobrazoval na LCD dipleji hodnotu intenzity světla.

Funkce: Na LCD displeji je zobrazována intenzita světla která se nachází pod senzorem světla.

Ukázka programu:

#include "NXCDefs.h"                      //vložení hlavičkového souboru

task main()                               //hlavní funkce
{
 SetSensorTouch (IN_1);                   //zapnutí tlačítka
 SetSensorLight (IN_3);                   //zapnutí světelného senzoru  

 SetSensorMode (IN_3, IN_MODE_RAW);       //přepnutí módu na rolišení 0 až 1023

 int Light;                               //proměná pro uložení hodnoty světla
 bool Touch;                              //proměná pro uložení stavu tlačítka 

 while(true)                              //nekonečná smyčka
 {
  Light = Sensor (IN_3);                  //načtení intenzity světla
  Touch = Sensor (IN_1);                  //zjistí stav tlačítka

  NumOut (10, LCD_LINE2, Light, true);    //výpis hodnoty 

  if(Touch == true)
  {
   SetSensorType (IN_3, IN_TYPE_LIGHT_INACTIVE); //vypnutí LED u světelného senzoru
  }
  else
  {
   SetSensorType (IN_3, IN_TYPE_LIGHT_ACTIVE); //zapnutí LED u světelného senzoru
  }  
 }
}                                         //konec programu



Úkol č. 6

Zadání: Sonar

Funkce:

Ukázka programu:

#include "NXCDefs.h"                      //vložení hlavičkového souboru

task main()                               //hlavní funkce
{
 SetSensorTouch (IN_1);                   //zapnutí tlačítka 
 SetSensorLowspeed (IN_4);                //zapnutí sonaru 

 SetSensorMode (IN_1, IN_MODE_PERIODCOUNTER); //přepnutí módu na čítač  

 int Tone;                                //tón
 int Frequency;                           //frekvence
 int Distance;                            //vzdálenost 
 int Touch;                               //stav tlačítka  

 while(true)                              //nekonečná smyčka
 {   
   //Distance = SensorUS (IN_4);          //načte vzdálenost ze sonaru v cm 
   Touch = Sensor (IN_1);                 //zjistí stav tlačítka 
   Distance = 1;  

   if(Touch > 10) ClearSensor (IN_1);     //zajištění přetečení   

   Tone = Touch * 100;                    //výpočet tónu   
   Frequency = Tone + Distance;           //výpočet frekvence     

   PlayTone(Frequency, 0);                //zahrání zvuku     

   TextOut(10, LCD_LINE2, "Ton:", true);  //vypsání hodnot   
   TextOut(10, LCD_LINE4, "Frekvence:"); 
   NumOut (50, LCD_LINE2, Tone);  
   NumOut (50, LCD_LINE4, Frequency); 
 }
}                                         //konec programu



Úkol č. 7

Zadání: Enkodér

Funkce:

Ukázka programu:

#include "NXCDefs.h"                      //vložení hlavičkového souboru
 
task main()                               //hlavní funkce
{
 SetSensorTouch (IN_1);                   //zapnutí tlačítkového senzoru na portu 1  

 int NXTCounter;                          //proměné pro uložení hodnot z čítačů
 int ServoCounter;
 bool Touch;                              //uložení stavu tlačítka  

 while(true)                              //nekonečná smyčka 
 { 
  Touch = Sensor (IN_1);                  //zjištění stavu tlačítka 
  NXTCounter = MotorRotationCount (OUT_B);//zjískání natočení z čítače v NXT 
  ServoCounter = MotorTachoCount (OUT_B); //zjískání natočení z čítače serva   

  if(Touch == true) ResetRotationCount (OUT_B); //vynulování čítače v NXT   

  TextOut (10, LCD_LINE3, "NXT citac:", true); //zobrazení textu 
  TextOut (10, LCD_LINE4, "Servo citac:");  

  NumOut (82, LCD_LINE3, NXTCounter);     //zobrazení hodnot 
  NumOut (82, LCD_LINE4, ServoCounter);  

  Wait (1);                               //spoždění 1ms 
 }
}                                         //konec programu



Úkol č. 8

Zadání: Joystick

Funkce:

Ukázka programu:

#include "NXCDefs.h"                      //vložení hlavičkového souboru 

task main()                               //hlavní funkce 
{
 int MiddleY = (Sensor (IN_1) / 3);      //určení Y středu 
 int MiddleX = (Sensor (IN_2) / 3);      //určení X středu  

 int PositionX = 0;                       //X pozice kurzoru 
 int PositionY = 0;                       //Y pozice kurzoru  

 while(true)                              //nekonečná smyčka  
 {  
  PositionY = (MiddleY - (Sensor (IN_1) / 3)) + 32; //vypočítání pozice 
  PositionX = (MiddleX - (Sensor (IN_2) / 3)) + 50;   

  ClearScreen ();                         //smazání obrazovky  
  CircleOut (PositionX, PositionY, 2);    //vykreslení kurzoru  
  Wait(1);                                //čekání 1ms pro odstranění blikání 
 }
}                                         //konec programu



literatura: