Programming 
LEGO NXT Robots 
using NXC
(beta 30 or higher)
(Version 2.2, June 7, 2007)
by Daniele Benedettelli
with revisions by John Hansen
Pdf format specification - Split, seperate PDF into multiple files in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Explain How to Split PDF Document in Visual C#.NET Application
break apart pdf; add page break to pdf
Pdf format specification - VB.NET PDF File Split Library: Split, seperate PDF into multiple files in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
VB.NET PDF Document Splitter Control to Disassemble PDF Document
break pdf documents; c# split pdf
-2-
Preface
As happened for good old Mindstorms RIS, CyberMaster, and Spybotics, to unleash the full power of 
Mindstorms NXT brick, you need a programming environment that is more handy than NXT-G, the National 
Instruments Labview-like graphical language that comes with NXT retail set.
NXC is a programming language, invented by John Hansen, which was especially designed for the Lego robots. 
If you have never written a program before, don't worry. NXC is really easy to use and this tutorial will lead you 
on your first steps towards it. 
To make writing programs even easier, there is the Bricx Command Center (BricxCC). This utility helps you to 
write your programs, to download them to the robot, to start and stop them, browse NXT flash memory, convert 
sound files for use with the brick, and much more. BricxCC works almost like a text processor, but with some 
extras. This tutorial will use BricxCC (version 3.3.7.16 or higher) as integrated development environment (IDE). 
You can download it for free from the web at the address
http://bricxcc.sourceforge.net/
BricxCC runs on Windows PCs (95, 98, ME, NT, 2K, XP, Vista). The NXC language can also be used on other 
platforms. You can download it from the web page
http://bricxcc.sourceforge.net/nxc/
Most of this tutorial should also apply to other platforms, except that you loose some of the tools included in 
BricxCC and the color-coding.
The tutorial has been updated to work with beta 30 of NXC and higher versions.  Some of the sample programs 
will not compile with versions older than beta 30.
As side note, my webpage is full of Lego Mindstorms RCX and NXT related content, including a PC tool to 
communicate with NXT:
http://daniele.benedettelli.com
Acknowledgements
Many thanks go to John Hansen, whose work is priceless!
TIFF Image Viewer| What is TIFF
The TIFF specification contains two parts: Baseline TIFF (the edit and processing images with TIFF format and other such as Bitmap, Png, Gif, Tiff, PDF, MS-Word
c# print pdf to specific printer; break pdf password
DocImage SDK for .NET: Web Document Image Viewer Online Demo
Microsoft PowerPoint: PPTX, PPS, PPSX; PDF: Portable Document Format; TIFF: Tagged Image File Format; XPS: XML Paper Specification. Supported Browers: IE9+;
pdf format specification; break a pdf into separate pages
-3-
Contents
Preface ___________________________________________________________________2
Acknowledgements____________________________________________________________________ 2
Contents__________________________________________________________________3
I. Writing your first program__________________________________________________5
Building a robot t ______________________________________________________________________ _ 5
Starting Bricx Command Center__________________________________________________________ _ 5
Writing the program___________________________________________________________________ _ 6
Running the program m __________________________________________________________________ _ 7
Errors in your program_________________________________________________________________ _ 8
Changing the speed____________________________________________________________________ _ 8
Summary____________________________________________________________________________ 9
II. A more interesting program_______________________________________________10
Making turns________________________________________________________________________ _ 10
Repeating commands s _________________________________________________________________ _ 10
Adding comments____________________________________________________________________ _ 11
Summary___________________________________________________________________________ 12
III. Using variables_________________________________________________________13
Moving in a spiral____________________________________________________________________ _ 13
Random numbers s ____________________________________________________________________ 14
Summary___________________________________________________________________________ 15
IV. Control structures_______________________________________________________16
The if statement______________________________________________________________________ _ 16
The do statement_____________________________________________________________________ _ 17
Summary___________________________________________________________________________ 17
V. Sensors________________________________________________________________18
Waiting for a sensor__________________________________________________________________ _ 18
Acting on a touch sensor_______________________________________________________________ _ 19
Light sensor_________________________________________________________________________ _ 19
Sound sensor________________________________________________________________________ _ 20
Ultrasonic sensor_____________________________________________________________________ _ 21
Summary___________________________________________________________________________ 22
VI. Tasks and subroutines___________________________________________________23
Tasks______________________________________________________________________________ 23
Subroutines_________________________________________________________________________ 24
Defining macros_____________________________________________________________________ _ 25
Summary___________________________________________________________________________ 26
VII. Making music_________________________________________________________28
Playing sound files___________________________________________________________________ _ 28
Playing music_______________________________________________________________________ _ 28
Summary___________________________________________________________________________ 30
VIII. More about motors____________________________________________________31
Stopping gently______________________________________________________________________ _ 31
Advanced commands s _________________________________________________________________ _ 31
PID control_________________________________________________________________________ _ 33
Summary___________________________________________________________________________ 34
IX. More about sensors_____________________________________________________35
Sensor mode and type_________________________________________________________________ _ 35
The rotation sensor___________________________________________________________________ _ 36
Putting multiple sensors on one input_____________________________________________________ _ 37
Summary___________________________________________________________________________ 38
X. Parallel tasks___________________________________________________________39
A wrong program m ____________________________________________________________________ _ 39
Critical sections and mutex variables_____________________________________________________ _ 39
Using semaphores____________________________________________________________________ _ 40
Summary___________________________________________________________________________ 41
GIF Image Viewer| What is GIF
routines according to the latest GIF specification to meet edit and processing images with Gif format and other such as Bitmap, Png, Gif, Tiff, PDF, MS-Word
pdf print error no pages selected; pdf split file
C# Imaging - C# Code 128 Generation Guide
minimum left and right margins that go with specification. load a program with an incorrect format", please check Create Code 128 on PDF, Multi-Page TIFF, Word
cannot select text in pdf file; acrobat split pdf into multiple files
-4-
XI. Communication between robots ___________________________________________42
Master – Slave messaging______________________________________________________________ _ 42
Sending numbers with acknowledgement__________________________________________________ _ 43
Direct commands s ____________________________________________________________________ 45
Summary___________________________________________________________________________ 45
XII. More commands_______________________________________________________46
Timers_____________________________________________________________________________ 46
Dot matrix display____________________________________________________________________ _ 46
File system m _________________________________________________________________________ _ 47
Summary___________________________________________________________________________ 50
XIII. Final remarks________________________________________________________51
VB Imaging - EAN-8 Generating Tutorial
compatible with the latest GS1 General Specification, with the Besides the PNG image format, other supported common 8 on defined page area of a PDF, multi-page
pdf split; acrobat separate pdf pages
VB.NET Image: Create Code 11 Barcode on Picture & Document Using
REFile.SaveDocumentFile(doc, "c:/code11.pdf", New PDFEncoder()). Data, Valid: 0-9, -, Format, PNG GIF JPEG. to the ISO/IEC international specification, the minimum
pdf split pages in half; break pdf into single pages
-5-
I.Writing your first program
In this chapter I will show you how to write an extremely simple program. We are going to program a robot to 
move forwards for 4 seconds, then backwards for another 4 seconds, and then stop. Not very spectacular but it 
will introduce you to the basic idea of programming. And it will show you how easy this is. But before we can 
write a program, we first need a robot.
Building a robot
The robot we will use throughout this tutorial is Tribot, the first rover you have been instructed to build once got 
NXT set out of the box. The only difference is that you must connect right motor to port A, left motor to port C 
and the grabber motor to port B.
Make sure to have correctly installed Mindstorms NXT Fantom Drivers that come with your set. 
Starting Bricx Command Center
We write our programs using Bricx Command Center. Start it by double clicking on the icon BricxCC. (I assume 
you already installed BricxCC. If not, download it from the web site (see the preface), and install it in any 
directory you like. The program will ask you where to locate the robot. Switch the robot on and press OK. The 
program will (most likely) automatically find the robot. Now the user interface appears as shown below (without 
the text tab).
C# Imaging - QR Code Image Generation Tutorial
to draw, insert QR Codes in PDF, TIFF, MS C# code to adjust bar code image format, location, resolution ISO+IEC+18004 QR Code bar code symbology specification.
break password on pdf; break pdf into pages
C# Imaging - EAN-8 Generating Tutorial
compatible with the latest GS1 General Specification, with the Besides the PNG image format, other supported common 8 on defined page area of a PDF, multi-page
pdf format specification; break pdf into multiple pages
-6-
The interface looks like a standard text editor, with the usual menu, and buttons to open and save files, print 
files, edit files, etc. But there are also some special menus for compiling and downloading programs to the robot 
and for getting information from the robot. You can ignore these for the moment.
We are going to write a new program. So press the New File button to create a new, empty window.
Writing the program
Now type in the following program:
task main()
{
OnFwd(OUT_A75);
OnFwd(OUT_C75);
Wait(4000);
OnRev(OUT_AC75);
Wait(4000);
Off(OUT_AC);
}
It might look a bit complicated at first, so let us analyze it. 
Programs in NXC consist of tasks. Our program has just one task, named main. Each program needs to have a 
task called main which is the one that will be executed by the robot. You will learn more about tasks in Chapter 
VI. A task consists of a number of commands, also called statements. There are brackets around the statements 
such that it is clear that they all belong to this task. Each statement ends with a semicolon. In this way it is clear 
where a statement ends and where the next statement begins. So a task looks in general as follows:
VB Imaging - Micro PDF 417 VB Barcode Generation
with established ISO/IEC barcode specification and standard You can easily generator Micro PDF 417 barcode and a program with an incorrect format", please check
acrobat split pdf; c# print pdf to specific printer
GS1-128 C#.NET Integration Tutoria
by GS1 in its system standards using Code 128 barcode specification. text //Generate EAN 128 barcodes in GIF image format ean128.generateBarcodeToImageFile
break pdf into separate pages; break a pdf into smaller files
-7-
task main()
{
statement1;
statement2;
}
Our program has six statements. Let us look at them one at the time:
OnFwd(OUT_A75);
This statement tells the robot to start output A, that is, the motor connected to the output labeled A on the NXT, 
to move forwards. The number following sets the speed of the motor to 75% of maximum speed.
OnFwd(OUT_C75);
Same statement but now we start motor C. After these two statements, both motors are running, and the robot 
moves forwards.
Wait(4000);
Now it is time to wait for a while. This statement tells us to wait for 4 seconds. The argument, that is, the number 
between the parentheses, gives the number of 1/1000 of a second: so you can very precisely tell the program how 
long to wait. For 4 seconds, the program is sleeping and the robot continues to move forwards.
OnRev(OUT_AC75);
The robot has now moved far enough so we tell it to move in reverse direction, that is, backwards. Note that we 
can set both motors at once using 
OUT_AC
as argument. We could also have combined the first two statements 
this way.
Wait(4000);
Again we wait for 4 seconds.
Off(OUT_AC);
And finally we switch both motors off.
That is the whole program. It moves both motors forwards for 4 seconds, then backwards for 4 seconds, and 
finally switches them off.
You probably noticed the colors when typing in the program. They appear automatically.  The colors and styles 
used by the editor when it performs syntax highlighting are customizable.
Running the program
Once you have written a program, it needs to be compiled (that is, changed into binary code that the robot can 
understand and execute) and sent to the robot using USB cable or BT dongle (called “downloading” the 
program).
Here you can see the button that allows you to (from left to right) compile, download, run and stop the program.
Press the second button and, assuming you made no errors when typing in the program, it will be correctly 
compiled and downloaded. (If there are errors in your program you will be notified; see below.)
Now you can run your program. To this, go to My Files OnBrick menu, Software files, and run 1_simple
program. Remember: software files in NXT filesystem have the same name as source NXC file.
Also, to get the program run automatically, you can use the shortcut CTRL+F5 or after downloading the 
program you can press the green run button.
Does the robot do what you expected? If not, check wire connections.
-8-
Errors in your program
When typing in programs there is a reasonable chance that you make some errors. The compiler notices the 
errors and reports them to you at the bottom of the window, like in the following figure:
It automatically selects the first error (we mistyped the name of the motor). When there are more errors, you can 
click on the error messages to go to them. Note that often errors at the beginning of the program cause other 
errors at other places. So better only correct the first few errors and then compile the program again. Also note 
that the syntax highlighting helps a lot in avoiding errors. For example, on the last line we typed 
Of
rather than 
Off
. Because this is an unknown command it is not highlighted.
There are also errors that are not found by the compiler. If we had typed 
OUT_B
this would cause the wrong 
motor to turn. If your robot exhibits unexpected behavior, there is most likely something wrong in your program.
Changing the speed
As you noticed, the robot moved rather fast. To change the speed you just change the second parameter inside 
parentheses. The power is a number between 0 and 100. 100 is the fastest, 0 means stop (NXT servo motors will 
hold position). Here is a new version of our program in which the robot moves slowly:
task main()
{
OnFwd(OUT_AC30);
Wait(4000);
OnRev(OUT_AC30); 
Wait(4000);
Off(OUT_AC);
}
-9-
Summary
In this chapter you wrote your first program in NXC, using BricxCC. You should now know how to type in a 
program, how to download it to the robot and how to let the robot execute the program. BricxCC can do many 
more things. To find out about them, read the documentation that comes with it. This tutorial will primarily deal 
with the language NXC and only mention features of BricxCC when you really need them.
You also learned some important aspects of the language NXC. First of all, you learned that each program has 
one task named 
main
that is always executed by the robot. Also you learned the four basic motor commands: 
OnFwd()
OnRev()
and 
Off()
. Finally, you learned about the 
Wait()
statement.
-10-
II.A more interesting program
Our first program was not so amazing. So let us try to make it more interesting. We will do this in a number of 
steps, introducing some important features of our programming language NXC. 
Making turns
You can make your robot turn by stopping or reversing the direction of one of the two motors. Here is an 
example. Type it in, download it to your robot and let it run. It should drive a bit and then make a 90-degree right 
turn.
task main()
{
OnFwd(OUT_AC75);
Wait(800);
OnRev(OUT_C75);
Wait(360);
Off(OUT_AC);
}
You might have to try some slightly different numbers than 500 in the second 
Wait()
command to make a 90 
degree turn. This depends on the type of surface on which the robot runs. Rather than changing this in the 
program it is easier to use a name for this number. In NXC you can define constant values as shown in the 
following program.
#define MOVE_TIME  1000
#define TURN_TIME   360
task main()
{
OnFwd(OUT_AC75);
Wait(MOVE_TIME);
OnRev(OUT_C75);
Wait(TURN_TIME);
Off(OUT_AC);
}
The first two lines define two constants. These can now be used throughout the program. Defining constants is 
good for two reasons: it makes the program more readable, and it is easier to change the values. Note that 
BricxCC gives the define statements its own color. As we will see in Chapter VI, you can also define things 
other than constants.
Repeating commands
Let us now try to write a program that makes the robot drive in a square. Going in a square means: driving 
forwards, turning 90 degrees, driving forwards again, turning 90 degrees, etc. We could repeat the above piece of 
code four times but this can be done a lot easier with the 
repeat
statement.
Documents you may be interested
Documents you may be interested