Download presentation
Presentation is loading. Please wait.
Published byMercy Atkins Modified over 9 years ago
1
NXC (and NBC) NXC (Not eXactly C) is a language similar to NQC, which was the most popular way to program the RCX Built on NBC, the Next Byte Code ‘assembler’ Uses the built in firmware, and p-code system
2
NXC uses BricxCC Reasonably stable development environment
Provides support for all LEGO robotic platforms Free!
3
Programming with NXC Assuming you are comfortable with C…
How to use the motors How to read the sensors Threading model
4
NXC Programs NXC is based on C
Restrictions because it’s based on the built-in P-Code system There’s no stack Limited memory Limited number of tasks (256) And subroutines, which are also ‘tasks’
5
NXC program skeleton #include "NXCDefs.h" task main() { }
6
NXC Sensors #include "NXCDefs.h" task main() {
SetSensorType( IN_1, SENSOR_TYPE_TOUCH ); SetSensorMode( IN_1, SENSOR_MODE_BOOL ); }
7
NXC Sensors #include "NXCDefs.h" task main() {
SetSensor( IN_1, SENSOR_TOUCH ); }
8
NXC Sensors To read a sensor use x = Sensor( IN_1 );
9
NXC Sample program #include "NXCDefs.h“ task main() {
SetSensor( IN_1, SENSOR_TOUCH ); while( true ) { if( Sensor( IN_1 ) ) { PlayToneEx(440, 100, 3, false); TextOut( 0, LCD_LINE1, "TOUCHING!"); while( Sensor( IN_1 ) ) ; } TextOut( 0, LCD_LINE1, " "); while( !Sensor( IN_1 ) )
10
NXC Motors Simple motor commands are available
OnFwd(), OnRev(), Off(), Float()
11
NXC Motors To use the built-in rotation sensors, you need to use the new motor commands Easiest to use is RotateMotor()
12
RotateMotor RotateMotor( port, speed, angle );
port is OUT_A, OUT_B, OUT_C, or combinations such as OUT_AB, OUT_ABC speed is a number -100 to 100 angle is the number of degrees you want the motor to turn (positive or negative)
13
Mimicking a Servo Motor
Read the current motor angle Current = MotorRotationCount( OUT_A ); Calculate how far you need to turn Delta = Target – Current; Turn that amount RotateMotor( OUT_A, speed, Delta );
14
Displaying Text The LCD display is useful for Debugging
Setting parameters Runtime messages Graphics Games … and more
15
Displaying Text TextOut( x, y, text ); NumOut( x, y, number );
16
LCD display The origin is the bottom left
So TextOut( 0,0, “hi” ) will display in the bottom left corner Use the LCD_LINEn macros if you like to make it easier
17
Text Example y = 42; TextOut(0, LCD_LINE5, "Answer:" );
NumOut( 8*6, LCD_LINE5, y ); // characters are 6 pixels wide
18
Graphics There are also commands to draw lines, circles, rectangles, and set points You can display bitmaps from a file RIC files – contain drawing commands One problem is there isn’t an easy way to clear areas of the screen It’s easy to clear the whole screen You can display a 1x1 blank bitmap
19
Tasks and Subroutines Multiple tasks are possible, but don’t work like you might expect Scheduling is different – tasks start when a ‘dependant’ task finishes There is no easy way of stopping a task Use Precedes() or Follows() in a task to define task dependencies
20
Tasks task FooTask() { // will start executing when main() finishes }
task main() { // program starts here Precedes( FooTask ); task BarTask() { Follows( main ); // will also start executing when main() finishes
21
Subroutines Essentially a task that can be called
It suspends the calling task until it returns Don’t use task keyword to define these Can pass in parameters or return a value
22
Subroutine Example void TestSub( int x, int y, short i ) { x = y + i;
} task main() TestSub( 1, 2, 3 );
23
NXC Help Preliminary help file is a PDF
There are many samples and a tutorial online
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.