You are on page 1of 62

PROGRAMANDO NXT CON NXC

Edumvil
Programando
NXT con NXC

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________

M.C. Gabriel Gernimo Castillo

Universidad Tecnolgica de la Mixteca


Laboratorio EDUMVIL
gcgero@gmail.com

__________________________

I. Writing your first program

Lego NXT

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.

__________________________

El ladrillo Inteligente NXT, es el


cerebro del robot. Es una pequea
computadora que se programa
para crear movimiento.

_________________________
__________________________

Contiene una pequea pantalla de


despliegue y un conjunto de
botones para comunicarse con los
motores y sensores.

__________________________
__________________________
__________________________

La descarga de los programas se


pueden realizar va cable USB o
Bluetooth.

__________________________

Make sure to have correctly installed Mindstorms NXT Fantom Drivers that come with your set.

Starting Bricx Command Center

__________________________

Laboratorio Edumvil. M.C. Gabriel Gernimo C.

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).

-5-

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Sensores

__________________________
__________________________

Ultrasonico. Mide la distancia de un objeto u obstculo.

__________________________

Tacto. Detecta cuando se presiona el botn de enfrente del sensor.

_________________________

Luz. Mide la luminosidad del brillo de la luz en la parte frontal del


sensor. Con esto puede distinguir entre blanco, negro y tonos de gris.

__________________________
__________________________

Color. Puede determinar el color de objetos.


!"#$"%&""""""""""""""""""""""""""""""""""""""""""""""""""""!"#$%&'()*+&,'-&%.)'/0%#)102

__________________________

Sonido. Mide el nivel de sonido cercano al robot.

__________________________
__________________________

Cada motor de rotacin tiene empotrado un sensor para medir la


distancia de movimiento del motor.

__________________________

Bloque MINDSTORMS NXT


Un Vistazo a su Estructura Interna
Laboratorio Edumvil. M.C. Gabriel Gernimo C.

!"#$%&'()'*+,-$.'/012'3.43,%.3'5'&67$&8,%.39

Puertos

'( ")*+,-*(.#*-/ " 0(*12$ " 345 " * " 0-6)7/ " )*+,6$+$ " 2+. " 89: " )*+ " ).;.)6#.# " #$"

$<$)2,.- " ;-*=-.>.? " #$ " #6@$-$+,$ " )*>;($<6#.#A " 8*+)-$,.>$+,$/ " )2$+,. " )*+ " 2+"
>6)-*;-*)$?.#*-"B,>$("BCDE"#$"FG"06,?"."H&"DIJA"K$",-.,."#$"2+">6)-*;-*)$?.#*-"
2,6(6J.#* " $L,$+?6M.>$+,$ " $+ " $($),-N+6). " #$ " )*+?2>* " O9PB?/ " ,$(Q@*+*? " >NM6($?/"
-$;-*#2),*-$?"#6=6,.($?">2(,6>$#6./RS".?T")*>*"$+"*,-.?".;(6).)6*+$?"$>;*,-.#.?")*>*"
;*- " $<$>;(* " $+ " (. " 6+#2?,-6. " #$( " .2,*>NM6(A " B#$>U?/ " (. " ;(.,.@*->. " )2$+,. " )*+ " 2+"

Puertos de
Salida

)*;-*)$?.#*-/ " B,>$( " BVC " #$ " & " 06,?/ " W " )*+ " 2+. " >$>*-6. " X(.?Y " #$ " GZ[ " \] " W " 2+."
Fuente de

Conexin
USB
>$>*-6."CBD"#$"[H"\]A"8*+"-$?;$),*"."(.?")*>2+6).)6*+$?/"$(")*+,-*(.#*-"?*;*-,."
Energa
Bluecore 4.0
Bluetooth

USB

,.+,* " )*>2+6).)6*+$? " 6+.(U>0-6).? " )*+ " ](2$,**,Y " O$?;$)6@6).)6N+ " MGA^ " 'PCS " )*>*"
)*>2+6).)6N+";*-").0($"2?.+#*",$)+*(*=T.":K]"O$?,U+#.-"GA^S"12$"?*;*-,.+",.?.?"#$"
Pantalla
Bus UART
Bus SPI
,-.?@$-$+)6."#$"#.,*?"#$"Y.?,."GA%"W"%G"D06,?_?"-$?;$),6M.>$+,$A"'("0(*12$"345")2$+,."

Sonido

,.>06Q+")*+"H";2$-,*?"#$"$+,-.#.")*+")*+$L6N+"C`%G"O)*+$),*-",$($@N+6)*"#$"["Y6(*?S/"
12$";$->6,$+")*+$),.-"?$+?*-$?",.+,*"#6=6,.($?")*>*".+.(N=6)*?"W"F";2$-,*?"#$"?.(6#."
Microprocesador

C`%G " 12$ " ?$ " 2,6(6J.+ " ;.-. " )*+$),.- " #6@$-$+,$? " ,6;*? " #$
" .),2.#*-$?/
" +*->.(>$+,$"
Principal
Atmel ARM7
Circuitos de Salidas

;6L$($?"12$"?$";2$#$"2,6(6J.-"$+">*#*"=-U@6)*";.-."#602<.-"@6=2-.?/"2+".(,.M*J")*+"2+"
Botones

Bus I!C
).+.("#$"?*+6#*")*+"&"06,?"#$"-$?*(2)6N+").;.J"#$"=$+$-.-",*+*?"$+"$("-.+=*"#$"G"."%["

\IJ"W"H"0*,*+$?"12$";$->6,$+"6+,$-.),2.-")*+"$("0(*12$"345A

Puertos de
Entrada

Procesador
B";$?.-"#$"12$"$("76,"0U?6)*"#$"a'bc"?N(*")2$+,.")*+")2.,-*"?$+?*-$?"12$"

Circuitos de Entradas

?$-M*>*,*-$?A"B#$>U?/"$(")*+,-*(.#*-")2$+,.")*+"2+.";.+,.((."a8P"=-U@6)."#$"%^^L[H"

Atmel AVR

>6#$+"(2>6+*?6#.#/"M*(2>$+"?*+*-*/"2(,-.?*+6#*?"W"2+"?$+?*-"#$")*+,.),*/"$L6?,$"2+."
.>;(6."=.>."#$"?$+?*-$?")*>;.,60($?")*+"(.";(.,.@*->."a'bc"12$">6#$+">2)Y.?">U?"

B)$($-.)6N+/ " 6+)(6+.)6N+/


" ;*?6)6N+ " Ob9KS/
" #6-$))6N+ " O0-e<2(.S/ " =6-N?)*;*/"
Los puertos de salida son A, B M.-6.0($?d
y C "(parte
superior)
usados
;-$?6N+ " .,>*?@Q-6)./ " ;-$?6N+ " +$2>U,6)./ " ,$>;$-.,2-./ " >.=+6,2#$? " $(Q),-6).? " O,$+?6N+/"
para conectar los motores.
15

Los puertos de entrada son el 1, 2, 3 y 4 (para inferior)


usados para conectar los sensores.

Laboratorio Edumvil. M.C. Gabriel Gernimo C.

Bloque MINDSTORMS
NXT
Vistazo interno
Un Vistazo a su Estructura Interna

__________________________
__________________________
__________________________

Fuente de
Energa

USB

Bluetooth
Bluecore 4.0

Pantalla

Bus UART

Bus SPI

Sonido

Circuitos de Entradas

Circuitos de Salidas

Bus I!C

Procesador
Atmel AVR

__________________________
__________________________

Microprocesador
Principal Atmel ARM7

Botones

_________________________

__________________________
__________________________
__________________________
__________________________

15

Laboratorio Edumvil. M.C. Gabriel Gernimo C.

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC



4. ROBOT UTILIZADO EN LAS PRCTICAS DE LABORATORIO /(*2
0,1'6725061;7
4.1 EL CEREBRO DEL ROBOT

Caractersticas Tcnicas

El bloque inteligente LEGO NXT, es el cerebro de nuestro robot, bsicamente es


un microprocesador, con puertos de entradas, de salida y memoria para
almacenar nuestros programas, se comunica con el computador a travs de un
puerto USB o Bluetooth.

__________________________
__________________________

Figura 59. Ladrillo inteligente LEGO NXT [17].

4.2 ESQUEMA

__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Tres puertas de salida, sealadas como A; B y C


Una puerta de comunicacin USB
Pantalla de cristal lquido.
Mini parlante
Botones de encendido apagado y navegacin.
Cuatro puertas de entrada, sealadas como 1; 2; 3 y 4.

!"#$

Bloque MINDSTORMS NXT


Botones del NXT
__________________________
Un Vistazo a su Estructura
Interna
__________________________

Botn Naranja: Se utiliza para encendido, y


como Enter.

__________________________

Fuente de
Energa

USB

Bluetooth
Bluecore 4.0

_________________________

Botones Gris Claro: Se utilizan para


desplazarse en el men a la izquierda y
derecha.

Pantalla

Bus SPI

Bus UART

Sonido

__________________________
Microprocesador
Principal Atmel ARM7

Botn Gris Oscuro: Se utiliza para


retroceder en la seleccin del men.
Nota:
Para apagar el NXT se presiona el botn gris
Oscuro hasta llegar a la opcin Turn off? y
en la pantalla se vern los iconos ! , y a
continuacin se presiona el botn Naranja en
la opcin deseada.

Botones

__________________________
Botones

Bus I!C

Circuitos de Entradas

_________________________

Circuitos de Salidas

x
x
x
x
x
x

__________________________

Microcontrolador de 32 bits ARM7


Memoria FLASH de 256 Kbytes
Memoria RAM de 64 Kbytes
Microcontrolador de 8 bit AVR
Memoria FLASH de 4Kbytes
Memoria RAM de 512 Bytes
Comunicacin Inalmbrica Bluetooth (Bluetooth Class
II V2.0)
Puerta de alta velocidad USB (12 Mbit/s)
Cuatro puertas de entrada de seis contactos,
plataforma digital (cable de 6 hilos)
Tres puertas de salida de seis contactos, plataforma
digital (cable de 6 hilos)
Pantalla grfica de cristal lquido de 64 x 100 puntos
Parlante, calidad de sonido 8KHz
Fuente de poder, 6 bateras AA

__________________________
Procesador
Atmel AVR

__________________________
__________________________
15

__________________________
Laboratorio Edumvil. M.C. Gabriel Gernimo C.

Opciones del Men

__________________________
__________________________

My Files
Software Files. En esta opcin se encuentran los programas que se
descargan de la computadora, va USB o Bluetooth.
NXT Files. Programas que ha realizado directamente en el NXT.
Sound Files. Programas de sonidos.

__________________________

NXT Programs. Al seleccionar este submen, se muestra primero la


pantalla donde se indica el uso de los puertos, y los motores. Al presionar
el botn naranja permite programar una secuencia de ordenes a ser
ejecutadas por el NXT.

__________________________

Try Me. Programas precargados para probar motores y sensores,


se deben usar los puertos predeterminados (los que se
recomiendan en el submen de NXT Programs).

NOTAS DEL CURSO

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Opciones del Men

__________________________
__________________________

View. Permite visualizar el estado de los sensores y los motores


conectados al NXT.
Setting. Puede ajustar el volumen del sonido del NXT, ajustar el
modo Sleep, borrar programas y visualizar la versin del NXT.
Bluetooth. Permite encender o apagar el bluetooth. Si est
encendido puede ajustar los distintos parmetros de la
comunicacin inalmbrica, tales como: contactos, conexiones,
visible, on/off, buscar.

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Lenguajes de Programacin

__________________________
__________________________
__________________________

NXT-G. Programacin en modo grfico (software oficial de LEGO),


compatible con Windows y MAC. Basado en LabView.
RobotC. Basado en Ansi C (software oficial de LEGO), compatible con
Windows.
NXC. Software Libre similar a C, compatible con Windows, MAC,
Linux.
LeJOS. Software Libre basado en Java, compatible con Windows, MAC,
Linux.

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Lenguajes de Programacin

__________________________
__________________________
__________________________

PbLua. Software libre similar a C.


LabView. Software de programacin grfica (propietario), se puede
ejecutar en mltiples plataformas.
Bricx Command Center (BricxCC)*. Es un programa para Windows
de 32-bit conocido como un IDE para robots LEGO MINDSTORMS
robots que incluye todas las generaciones de ellos, hasta la actual EV3.
BricxCC incluye Not eXactly C (NXC), Next Byte Codes (NBC), NPG
que usa el compilador NBC.

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

* Bricx Command Center .http://bricxcc.sourceforge.net/

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Lenguaje NXC

__________________________
__________________________
__________________________

NXC es el sinnimo de Not eXactly C.

Es un lenguaje para programar productos LEGO


MINSTORMS NXT.

El compilador NXC (llamado NBC) traslada el programa


fuente a cdigo de bytes del NXT.

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Laboratorio Edumvil. M.C. Gabriel Gernimo C.

Instalando el compilador NBC


en Ubuntu

__________________________
__________________________

Descargar el compilador nbc

wget

http://downloads.sourceforge.net/
bricxcc/nbc-1.2.1.r4.tgz

__________________________

Desempaquetar

Crear el directorio donde colocaremos el


compilador: mkdir nbc

desempaquetar

el archivo .tgz: tar xzf


nbc-1.2.1.r4.tgz -C nbc

Cambiarse

al directorio donde se
desempaqueto: cd nbc/NXT

Instalando el compilador NBC

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

__________________________
__________________________

Observando la versin

Ejecutar

el compilador: ./nbc
Next Byte Codes Compiler versin 1.2
(....)

Mover al directorio bin para no colocar siempre ./ antes de


invocar al nbc

sudo

mv nbc /usr/local/bin

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Instalando el compilador NBC

__________________________

Probando el compilador

Abrir

un editor para colocar cdigo nxc, en


este caso invocar al editor nano: nano hola.nxc

task main()

_________________________
__________________________

mundo!);

__________________________

Wait(1000);

__________________________

__________________________
__________________________

{
TextOut (0,0, Hola

__________________________

Una vez guardo el archivo, procedemos a compilarlo:


nbc hola.nxc -O=hola.rxe -sm-

__________________________
__________________________

Laboratorio Edumvil. M.C. Gabriel Gernimo C.

Comunicacin del NXT va USB

__________________________
__________________________

Crear un grupo llamado: legonxt


addgroup legonxt

Sumar usuarios al grupo


adduser login legonxt
p.e. adduser gcgero legonxt

Crear un archivo: nano /etc/udev/rules.d/45-legonxt.rules


colocar
SUBSYSTEM=="usb_device", ACTION=="add", SYSFS
{idVendor}=="0694", SYSFS{idProduct}=="0002",
SYMLINK+="legonxt-%k", GROUP="legonxt",
MODE="0660", RUN+="/etc/udev/legonxt.sh"

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Comunicacin del NXT va USB

__________________________
__________________________
__________________________

Crea el archivo legonxt.sh en /etc/udev usando un editor:


nano /etc/udev/legonxt.sh
coloca en el archivo las siguientes lneas:
#!/bin/bash
GROUP=legonxt
if [ "${ACTION}" = "add" ] && [ -f "$
{DEVICE}" ] then chmod o-rwx "${DEVICE}"
chgrp "${GROUP}" "${DEVICE}"
chmod g+rw "${DEVICE}"
fi

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Comunicacin del NXT va USB

__________________________
__________________________

sudo

__________________________

Cambiar modo del archivo


chmod a+x /etc/udev/legonxt.sh

__________________________

Reiniciar el sistema

reboot

_________________________
__________________________

Ahora, ya podemos compilar y enviar el proceso al brick


(ladrillo del lego)

__________________________
__________________________

nbc hola.nxc -sm- -d -S=usb

__________________________
Fuente principal: http://www.jclarsen.dk/index.php/guides/21-programming/52-using-nxc-on-linux

__________________________

Programando en NXC

__________________________
__________________________

Los programas en NXC


consisten de tareas.
Una tarea consiste de un
nmero de comandos,
llamadas Instrucciones.
Las llaves encierran todas las
Instrucciones.

__________________________
task main()
{
Instruccin 1...
Instruccin 2...
....
....
....
}

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Laboratorio Edumvil. M.C. Gabriel Gernimo C.

Reglas Lxicas

__________________________
__________________________

Comentarios.
Para comentar mltiples lneas, estas se colocan entre

_________________________

/* y */

__________________________

Para comentar una sola lnea se realizan por medio

__________________________

// comentario

__________________________

Espacios.

__________________________

Un espacio puede ser un tabulador, nueva lnea o espacio. Es vlido


colocar

__________________________

x=2;

__________________________
__________________________

x = 2;
Laboratorio Edumvil. M.C. Gabriel Gernimo C.

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Reglas Lxicas

Constates de cadenas. Como en C son delimitadas por el caracter


de doble comillas
TextOut(0, LCD_LINE1 , "Prueba")

Constates de caracter. Son delimitadas por comillas simples. El


valor del caracter esta en valor numerico ASCII

Constantes numricas. Pueden ser escritas en forma decimal o


hexadecimal
x = 10;
x = 0x10;

__________________________
__________________________
_________________________
__________________________
__________________________

char ch = 'a'; // ch == 97

__________________________

// se coloca x a 10
// se coloca x a 16 (10 hex)

__________________________
__________________________
__________________________
__________________________

f = 10.5; // se coloca f a 10.5

NOTA

__________________________

En el ejemplo anterior se utiliz una constantes predefinida

__________________________

#define LCL_LINE1 56

__________________________

Que indica que es la primera lnea de la pantalla LCD del NXT.


Los nmeros de lneas para ser usadas por la funcin del sistema DrawText
son:
#define LCD_LINE8
#define LCD_LINE7
#define LCD_LINE6
#define LCD_LINE5
#define LCD_LINE4
#define LCD_LINE3
#define LCD_LINE2
#define LCD_LINE1

0
8
16
24
32
40
48
56

__________________________
__________________________
__________________________
__________________________

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________

Guardar como: p1.nxc


1) Compilar:
nbc p1.nxc -O=p1.rxe -sm2) Descargar en el NXT:
nbc p1.nxc -sm- -d -S=usb

NOTAS DEL CURSO

__________________________
__________________________

Practica 1
task main ()
{
// Imprime un mensaje en la pantalla
TextOut (0,0,Hola Mundo);
Wait (1000);
// Limpia pantalla
ClearScreen();
TextOut (0,LCD_LINE6, :));
Wait(1000);
}

_________________________

__________________________
__________________________
__________________________
__________________________

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Practica 2
#define XMAX 99
#define YMAX 63
#define XMID (XMAX)/2
#define YMID (YMAX)/2
task main()
{
PointOut(1, YMAX-1);
PointOut(XMAX-1, YMAX-1);
PointOut(1,1);
PointOut(XMAX-1,1);
Wait(2000);
RectOut(5,5,90,50);

__________________________
__________________________

Wait(2000);
LineOut(5,5,95,55);
Wait(2000);
LineOut(5,55,95,5);
Wait(2000);
CircleOut(XMID,YMID-2,20);
Wait(1000);
ClearScreen();
GraphicOut(30,10,"faceclosed.ric");
Wait (5000);
ClearScreen();
GraphicOut(30,10,"faceopen.ric");
Wait (2000);
}

Identificadores

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

__________________________
__________________________
__________________________

Los identificadores pueden ser usados para nombrar


variables, tareas, funciones, y subrutinas.

El primer caracter de un identificador puede ser una letra


mayscula, minscula o un guin bajo. Los caracteres que le
siguen pueden ser letras, nmeros o guiones bajos.

__________________________

Existen una lista de palabras reservadas por el lenguaje NXC


que no pueden ser utilizadas como identificadores, tales como:
if, else, do, while, byte, char, float, ....

__________________________

_________________________
__________________________
__________________________
__________________________
__________________________

Laboratorio Edumvil. M.C. Gabriel Gernimo C.

Estructura de un programa

__________________________
__________________________
__________________________

Un programa est compuesto de bloques de cdigo (tareas y


funciones) y variables.

Cada bloque tiene sus propias caractersticas pero comparten una


estructura comn. El mximo nmero de bloques es 256.

__________________________

La tarea principal es llamada main(), y es la primera que se ejecuta.

__________________________

Una funcin se ejecuta cada vez que se llama en un bloque.

__________________________

Reglas de orden lxico: Cualquier identificador que nombra a una


tarea o funcin debe ser conocido por el compilador antes de ser
usado, una vez definida un tarea o funcin no puede ser redefinida o
declarada.

__________________________

_________________________

__________________________
__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Variables

__________________________

Todas las variables en NXC estn definidas usando uno de los siguientes
tipos:

__________________________
__________________________
_________________________

bool
byte
char
int
short
long
unsigned
float
mutex
string
Structures
Arrays

__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Laboratorio Edumvil. M.C. Gabriel Gernimo C.

Variables

__________________________
__________________________
__________________________

Ejemplos:

_________________________

int x;
// declara x
bool y,z;
// declara y y z
long a=1,b;
// declara a y b, inicializado a 1
float f=1.15, g; // declara f y g, initializado f
int data[10]; // arreglo de 10 ceros en data
bool flags[] = {true, true, false, false};
string msg = "hello world"

__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Laboratorio Edumvil. M.C. Gabriel Gernimo C.

Arreglos

__________________________
__________________________

Un arreglo se declara igual que una variable, pero con corchetes cuadrados
[ ] que siguen al nombre de la variable.
int mi_arreglo[];

// declara un arreglo con 0 elementos

Se puede declara de una dimensin o dos o tres o cuatro, que es su mximo


en NXC.
bool mi_arreglo[][];//declara

un arreglo de 2-dimensiones

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Arreglos

__________________________
__________________________

Un arreglo puede ser inicializado al ser declarado:

__________________________
int X[] = {1, 2, 3, 4}, Y[]={10, 10}; // 2 arreglos
int matrix[][] = {{1, 2, 3}, {4, 5, 6}};
string autos[] = {"honda", "ford", "chevy"};
Los elementos de un arreglo son identificados por la posicin en la cual se
encuentran dentro del arreglo (indice). El primero elemento del arreglo tiene la
posicin 0, el segundo 1, y as sucesivamente.

_________________________
__________________________
__________________________
__________________________
__________________________

mi_arreglo[0] = 123; // coloca a elemento uno el valor de 123


mi_arreglo[1] = mi_arreglo[2]; // copia el tercer elemento
en la posicin 2 del arreglo

__________________________
__________________________

Declaraciones

__________________________
__________________________

El cuerpo de los bloques de cdigo (tareas o funciones) esta


compuesta por declaraciones, las cuales son terminadas por punto
y coma (;).

__________________________

Asignaciones

__________________________

La Sintaxis para asignacin es:

_________________________
__________________________

variable Operador Expresin;

__________________________

Ejemplos:

__________________________

x = 2; // coloca x a 2
y = 7; // coloca y a 7
x += y; // x es 9, y sigue siento

Operador

__________________________
7

Accin

__________________________

Coloca a la variable la expresin

__________________________

+=

Suma la expresin a la variable

__________________________

-=

Resta la expresin a la variable

*=

Multiplica la variable por la expresin

__________________________

/=

Divide la variable por la expresin

%=

Coloca a la variable el resto de la divisin por la expresin

&=

Coloca el resultado del AND realizado con la expresin

|=

Coloca el resultado del OR realizado con la expresin

__________________________

^=

Coloca el resultado del XOR realizado con la expresin

__________________________
__________________________

_________________________
__________________________

||

Coloca en la variable el valor absoluto de la expresin

+-=

Coloca a la variable el signo (-1, +1, 0) de la expresin

>>=

Realiza un corrimiento a la derecha de la expresin

__________________________

<<=

Realiza un corrimiento a la izquierda de la expresin

__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Variables y Arreglos

__________________________
__________________________

int a;
int b,c;
int valores[];
task main()
{
a = 10;
b = 20 * 5;
c = b;
c /= a;
c -= 5;
a = 10 * (c + 3); // a es 80
ArrayInit(valores,0,10);//inicializa
valores[0] = a;
valores[1] = b;
valores[2] = a*b;
valores[3] = c;

__________________________
_________________________
__________________________
__________________________
__________________________
los 10 elementos a 0

__________________________
__________________________
__________________________

Laboratorio Edumvil. M.C. Gabriel Gernimo C.

__________________________
__________________________

Estructuras de
control

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Sentencia if

__________________________
__________________________

La sentencia if evala una condicin. Si la sentencia es verdadera,


ejecuta mas sentencias (la consecuencia). El valor de una condicin
es falsa solo si la evaluacin es cero. Para cualquier valor no cero, if
es verdadero.

__________________________
_________________________
__________________________

Sintaxis:
if (condicin) consecuencia

__________________________

Ejemplos:

__________________________
__________________________

if (x==1) y = 2;
if (x==1) { y = 1; z = 2; }

__________________________
__________________________
Laboratorio Edumvil. M.C. Gabriel Gernimo C.

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Sentencia if-else

__________________________
__________________________

La sentencia if-else evala una condicin, si la condicin es


verdadera se realiza una sentencia (consecuencia), la segunda
sentencia (alternativa) que precede a la palabra else, se ejecuta si
la condicin es falsa. La condicin se considera falsa solo si la
evaluacin es cero, si es diferente de cero es verdadero.

__________________________
_________________________
__________________________
__________________________

Sintaxis:
if (condicin) consecuencia else alternativa

__________________________
__________________________
__________________________
__________________________

Laboratorio Edumvil. M.C. Gabriel Gernimo C.

Sentencia if-else

__________________________
__________________________
__________________________

Ejemplo:

_________________________

if (x==1)
y = 3;
else
y = 4;
if (x==1) {
y = 1;
z = 2;
}
else {
y = 3;
z = 5;
}

__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Laboratorio Edumvil. M.C. Gabriel Gernimo C.

Sentencia while

__________________________

La sentencia while es usada para construir un ciclo condicional. La


condicin es evaluada, y si es verdadera entonces el cuerpo del ciclo
es ejecutada, y despus la condicin es evaluada nuevamente. Este
proceso continua hasta que la condicin sea falsa (o se invoca a la
sentencia break en la ejecucin).
Sintaxis:

__________________________
__________________________
_________________________
__________________________

while (condicin) cuerpo

__________________________

Ejemplo:

__________________________

while(x < 10)


{
x = x+1;
y = y*2;
}

__________________________
__________________________
__________________________
Laboratorio Edumvil. M.C. Gabriel Gernimo C.

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Practica 3
task main ()
{
int cont=0;
while (cont<10)
{
if (ButtonPressed(BTNLEFT, false))
cont+=1;
if (ButtonPressed(BTNRIGHT, false))
cont=0;
if (ButtonPressed(BTNCENTER, false))
break;
ClearScreen();
NumOut (0,LCD_LINE6, cont);
Wait(1000);
}
ClearScreen();
TextOut (0,LCD_LINE5, ADIOS);
Wait(1000);
}

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________

Guardar como: p2.nxc


1) Compilar:
nbc p3.nxc -O=p3.rxe -sm2) Descargar en el NXT:
nbc p3.nxc -sm- -d -S=usb

Ejercicio

__________________________
__________________________
__________________________
__________________________

__________________________
__________________________

1. Tomando como base la practica 2 y 3. Realiza lo


siguiente:
a) Al presionar el botn izquierdo muestra un archivo ric
b) Al presionar el botn derecho muestra un archivo ric
(diferente al archivo del inciso a )
c) Al presionar el botn del centro muestra ocho crculos en
el display que tengan como centro la mitad del display y sus
radios sean diferentes
d) Al presionar el botn de exit. Muestre el texto ADIOS
en el centro de la pantalla.

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Sentencia do-while

__________________________
__________________________

Una variante del ciclo while es el ciclo do-while.


Sintaxis:
do cuerpo while (condicin)
La diferencia entre while y do-while es que el do-while siempre
ejecuta el cuerpo de instrucciones por lo menos una vez, mientras
que el while puede no ejecutarlo.

Ejemplo:
do
{
x = x+1;
y = y*2;
} while (x < 10);

NOTAS DEL CURSO

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Practica 4

__________________________
__________________________

int mueve, turno, total;


task main()
{
total_time = 0;
do
{
mueve = Random(1000);
turno = Random(1000);
OnFwd(OUT_AC, 75);
Wait(mueve);
OnRev(OUT_C, 75);
Wait(turno);
total+= (mueve+turno);
} while (total< 20000);
Off(OUT_AC);
}

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Laboratorio Edumvil. M.C. Gabriel Gernimo C.

Sentencia for

__________________________
__________________________

Este tipo de ciclo permite automticamente inicializar e incrementar/


decrementar una variable que sirve de contador.
Sintaxis:
for(sentencia1 ; condicin ; sentencia2) cuerpo
Un ciclo for siempre ejecuta el sentencia1, y repetidamente verifica la
condicin. Mientras la condicin sea verdadera ejecuta el cuerpo y
luego ejecuta el sentencia2.
Frecuentemente la sentencia1 se encarga de fijar el valor de la
variable que sirve de contador para el ciclo.

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Practica 5

__________________________

task main()

__________________________

__________________________
for (int i=0; i<8; i++)
{
NumOut(0,LCD_LINE1-i*8, i);
}

_________________________
__________________________
__________________________
__________________________

Nota:

__________________________

NumOut. Dibuja un nmero en el display en la posicin


x,y.
LCD_LINE1. Lnea de la pantalla (#define LCD_LINE156)

__________________________

NOTAS DEL CURSO

__________________________

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Sentencia repeat
El repeat ejecuta un ciclo un nmero especifico de veces.
Sintaxis:

__________________________
__________________________
__________________________
_________________________

repeat (expresin) cuerpo


La expresin determina cuantas veces se va a ejecutar el cuerpo. La
expresin seguida de repeat es evaluada solo una vez y entonces el
cuerpo es repetido el nmero de veces indicado.

__________________________
__________________________

Ejemplo:

__________________________

int i=0;
repeat (8)
{
NumOut(0, LCD_LINE1-i*8, i++);
}

__________________________
__________________________
__________________________
Laboratorio Edumvil. M.C. Gabriel Gernimo C.

Practica 6

__________________________
__________________________
__________________________

task main()

_________________________

__________________________

int i=0;
repeat (8)
{
NumOut(0, LCD_LINE1-i*8, i++);
}

__________________________
__________________________
__________________________

__________________________
__________________________
Laboratorio Edumvil. M.C. Gabriel Gernimo C.

Practica 7
#define TIEMPO 500
task main()
{
repeat(4)
{
OnFwd(OUT_AC, 75);
Wait(TIEMPO);
OnRev(OUT_C, 75);
Wait(TIEMPO);
}
Off(OUT_AC);
}

La primera lnea define una


constante, llamada: TIEMPO
La repeticin es por medio
de la declaracin repeat y
entre parntesis el nmero
de veces (4) que se repiten
las instrucciones dentro de
las llaves

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Sentencia repeat

__________________________
__________________________
__________________________

Tambin se pueden colocar anidaciones de repeat


repeat(10)
{
repeat(4)
{
.........
........
.......
}
}

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Sentencia switch

__________________________
__________________________

La sentencia switch ejecuta una de varias secciones de cdigos


diferentes, dependientes del valor de una expresin. Una o mas
etiquetas de casos preceden a cada seccin de cdigo.

__________________________

Cada caso debe ser una constante y nica para verificar con la
sentencia switch. El switch evala la expresin y verifica las
etiquetas, si coincide la evaluacin con alguna de ellas se ejecutan
sus sentencias hasta que encuentra un break o el fin del switch.

__________________________

Se puede utilizar una etiqueta llamada default para el caso de que


no coincida la expresin con alguna de las etiquetas.

__________________________

Sintaxis:

__________________________

switch (expresin) cuerpo

__________________________

Sentencia switch

_________________________
__________________________
__________________________

__________________________
__________________________

Ejemplo:

__________________________
_________________________

switch(x)
{
case 1:

__________________________
// Realizar cuando x es 1
break;

case 2:
case 3:

__________________________
// Realizar cuando x es 2 o 3
break;

default:
// Realizar cuando x no es 1, 2, o 3
break;
}

NOTAS DEL CURSO

__________________________
__________________________
__________________________
__________________________

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Sentencia break y continue

__________________________
__________________________

Con los ciclos (tal como el while) se puede utilizar la sentencia


break para salir del ciclo de forma inmediata. Adems es un
componente bsico para la sentencia switch.

__________________________
_________________________

Sintaxis:

__________________________

break;

__________________________

Dentro de los ciclos se puede usar la sentencia continue para


saltar al tope de la siguiente iteracin del ciclo, saltando el cdigo
que se encuentre despus de la sentencia continue.

__________________________

Sintaxis:

__________________________

continue;

__________________________
__________________________

Sentencia break y continue

__________________________
__________________________
__________________________

Ejemplo (break):

Ejemplo (continue):

while (x<100) {
x = get_new_x();
if (button_pressed())
break;
process(x);
}

while (x<100) {
ch = get_char();
if (ch != 's')
continue;
process(ch);
}

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Sentencia goto

__________________________
__________________________

La sentencia goto indica a un programa que debe saltar a una


especifica localidad. Las sentencias a ejecutar deben estar
despus de una etiqueta y deben estar alineados en la columna.
La etiqueta sirve para indicar donde saltar. Solo se puede saltar en
una tarea o funcin, no fuera de ella.

__________________________
_________________________
__________________________
__________________________

Ejemplo:

__________________________

mi_ciclo:
x++;
goto mi_ciclo;

__________________________
__________________________
__________________________
Laboratorio Edumvil. M.C. Gabriel Gernimo C.

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Sentencia until

__________________________
__________________________

Este constructor proporciona una alternativa conveniente para el ciclo


while. La definicin del until es:

__________________________

#define until(c)

__________________________

while(!(c))

En otras palabras, until debe realizar el ciclo hasta que la condicin sea
verdadera.
Es frecuente usar esta conjuncin con un cuerpo de sentencias vacas o
un cuerpo para realizar otras tareas.
until(EVENTOS_OCURRAN);//espera que ocurra algn evento

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Sentencia start y stop


Se puede iniciar una tarea con la sentencia start. Esta sentencia
puede ser utilizada por el NBC/NXC firmware estndar o mejorado.
La operacin resultante es un cdigo nativo en el firmware
mejorado pero requiere subrutinas especiales generadas por el
compilador para poder trabajo con el firmware estndar.
start nombre_tarea;
Se puede parar una tarea con la sentencia stop. Esta sentencia es
solo soportada si se est ejecutando el firmware NBC/NXC
mejorado en el NXT.
stop nombre_tarea;

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Laboratorio Edumvil. M.C. Gabriel Gernimo C.

Expresiones

__________________________
__________________________

Las expresiones bsicas son las asignaciones de valores, las de


mayor complicacin son las formadas por valores que usan varios
operadores.
Las constantes numricas en el NXT son representadas por valores
enteros o punto flotante. El tipo depende del valor de la constante.
Internamente el NXC usa matemtica de punto flotante de 32 bit
para la evaluacin de expresiones constantes. Las constantes
numricas estn escritas como decimal o hexadecimal.
Existen dos valores especiales predefinidos: true y false. El valor
false es cero (0), mientras que el valor true es uno (1). Los mismos
valores se mantienen para las relaciones de operadores (p.e. <):
cuando la relacin es falsa el valor es 0, en otro caso el valor es 1.

NOTAS DEL CURSO

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Operador

Descripcin

Asociatividad

abs ()

valor absoluto

sign()

Ejemplo

__________________________

n/a

abs(x)

__________________________

signo de operando

n/a

sign(x)

__________________________

++,

incremento/decremento
en posfijo

izquierda

solo variables

x++

_________________________

++,

incremento/decremento
en prefijo

derecha

solo variables

++x

__________________________

menos unario

derecha

-x

__________________________

negacin de bit

derecha

~123

__________________________

negacin de lgica

derecha

!x

__________________________

multiplicacin, divisin,
modulo

izquierda

x*y

__________________________

suma, resta

izquierda

x+y

__________________________

Descripcin

Asociatividad

Ejemplo

corrimiento a la
izquierda, derecha

__________________________

izquierda

x<<4

__________________________

operadores relacionales

izquierda

x<y

__________________________

igual a, no igual a

izquierda

x == 1

AND para bit

izquierda

x&y

_________________________

&
^

XOR para bit

izquierda

x^y

OR para bit

izquierda

x1y

__________________________

&&

AND lgico

izquierda

x && y

__________________________

||

OR lgico

izquierda

x 11 y

__________________________

?:

condicional ternario

derecha

x ==1 ? y : z

__________________________

*, /, %
+, -

Operador
<<, >>
<, >, <=, >=

Restriccin

Restriccin

__________________________

__________________________

Condiciones

__________________________
__________________________

La condicin se forma comparando dos expresiones.

__________________________
_________________________

Una condicin puede ser negada con el operador de


negacin lgico o combinar dos condiciones con los
operadores lgicos AND y OR.

__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


condicin

Significado

__________________________

expr

Verdadero si expr no es igual a 0

expr1 == expr2

Verdadero si expr1 es igual a expr2

expr1 != expr2

Verdadero si expr1 no es igual a expr2

__________________________

expr1 < expr2

Verdadero si expr1 es menor que expr2

expr1 <= expr2

Verdadero si expr1 es menor que o igual a expr2

_________________________

expr1 > expr2

Verdadero si expr1 es mayor que expr2

__________________________

expr1 >= expr2

Verdadero si expr1 es mayor que o igual a to expr2

__________________________

! condicion

Negacin lgica de una condicin - Verdadero si la condicin es falsa

cond1 && cond2

AND lgico de dos condiciones (Verdadero si y solo si ambas condiciones son


verdaderas)

cond1 || cond2

OR lgico de dos condiciones (Verdadero si y solo si al menos una de las


condiciones es verdadera)

true

La palabra true tiene el valor de 1. Representa la condicin de siempre


verdadero

false

La palabra false tiene el valor de 0. Representa la condicin de siempre false

Prctica 8
#define TIEMPO 500
task main()
{
while(true)
{
OnFwd(OUT_AC, 75);
Wait(TIEMPO);
if (Random() >= 0)
{
OnRev(OUT_C, 75);
}
else
{
OnRev(OUT_A, 75);
}
Wait(TIEMPO);
}
}

__________________________

__________________________
__________________________
__________________________
__________________________

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

__________________________
__________________________
__________________________

Tareas y Funciones

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Tareas - task

__________________________
__________________________

Dado que NXT soporta multi-hilos, una tarea es un hilo


La tarea se define usando la palabra clave task
task name()

__________________________
_________________________
__________________________

{
// El cdigo de las tareas va aqu
}

El nombre de la tarea deber ser un identificador vlido, y el cuerpo


de dicha tarea consiste en una lista de instrucciones

Las tareas pueden ser iniciadas o paradas, por medio de start o


stop respectivamente.Sin embargo el principal mecanismo para
iniciar una tarea es por medio del API Precedes o Follows. El
API StopAllTasks para todas las tareas que estn ejecutndose.

Ejemplo de task

__________________________
__________________________
__________________________
__________________________
__________________________

__________________________
__________________________

task music() {
while (true) {
PlayTone(TONE_A4,MS_500);
Wait(MS_600);
}
}

task controller() {
Wait(SEC_10);
stop music;
Wait(SEC_5);
StopAllTasks();
}

task movement() {
while (true) {
OnFwd(OUT_A,Random(100));
Wait(Random(SEC_1));
}
}

task main() {
Precedes(music,
movement, controller);
}

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Laboratorio Edumvil. M.C. Gabriel Gernimo C.

Funciones

__________________________
Las funciones son un grupo de instrucciones agrupadas que pueden
ser llamadas cuando se necesiten. Estas pueden ser invocadas pasando
argumentos y pueden retornar algn valor. Sintaxis
[safecall] [inline] return_type name
(argument_list)
{
// cuerpo de la funcin
}

__________________________

La lista de argumento puede ser vaca, o puede contener uno o mas


argumentos. Un argumento esta definido como un tipo seguido por
un nombre, cuando son mltiples argumentos se separan por comas.
Todos los valores representados pueden ser: bool, char, byte, int,
short, long, unsigned int, unsigne long, float, string, struct types o array
de algn tipo.

NOTAS DEL CURSO

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Argumentos por valor

NXC soporta paso de argumentos por valor, valor constante, referencia y


referencia constante.

Paso por valor


Cuando los argumentos son pasados por valor, el compilador debe
asignar una variable temporal para contener el argumento. Por lo tanto
los cambios en dicha variable solamente son locales.
void foo(int x)
{
x = 2; // solo afecta a x
}
task main()
{
int y = 1;
// y es igual a 1
foo(y); // y sigue siendo igual a 1
}

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Laboratorio Edumvil. M.C. Gabriel Gernimo C.

Argumento por valor constante

__________________________
__________________________
__________________________

Este tipo tambin se pasa por valor. Si la funcin es una


funcin inline entonces los argumentos pueden ser tratados
por el compilador como valores constantes verdaderos y
pueden ser evaluados en tiempo de compilacin.

_________________________
__________________________
__________________________

Si la funcin no es inline entonces el compilador trata los


argumentos como si fuera una referencia constante, lo que
permite pasar constantes o variables.

__________________________
__________________________
__________________________
__________________________

Argumento por valor constante

__________________________
__________________________

void foo(const int x)


{
PlayTone(x, MS_500);
x = 1;//Error-no se puede modificar el argumento
Wait(SEC_1 );
}

__________________________

task main()
{
int x = TONE_A4 ;
foo(TONE_A5); // ok
foo(4* TONE_A3);//expresin tratada como constante
foo(x);//x no es una constante pero se puede pasar
}

__________________________

NOTAS DEL CURSO

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Argumento por referencia

__________________________
__________________________

Permite que el llamado de la funcin modifique el valor y estos estn


disponibles despus de terminada dicha funcin. Para adquirir el valor
se debe colocar & a la variable que se recibe como argumento.

__________________________

void foo(int &x)


{
x = 2;
}
task main()
{
int y = 1;

__________________________

_________________________
__________________________
__________________________

// y es igual a 1

foo(y); // y es ahora igual a 2


foo(2); // Error - Solo se envan variables

__________________________
__________________________

__________________________

Argumento por referencia constante

__________________________
__________________________

Tambin se pasa por referencia pero la restriccin de que la funcin que


la invoca no se le permite modificar el valor. Debido a esta restriccin el
compilador es capaz de que se le puedan pasar no solo variables. Las
funciones deben ser invocadas con el nmero correcto de argumentos.
void foo(int bar, const int baz)
{
// cuerpo de la funcin...
}
task main()
{
int x; // Declaracin de x
foo(1, 2);
// ok
foo(x, 2);
// ok
foo(2); // Error-nmero incorrecto de argumentos
}

Detalles de argumentos

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

__________________________
__________________________

safecall
Si la funcin es marcada como safecall entonces el compilador
sincroniza la ejecucin de esta funcin a travs de mltiples
hilos, protegiendo el llamado de la funcin con los llamados
Acquire y Release. Si un segundo hilo trata de invocar a la
funcin safecall mientras otro hilo est en ejecucin, el segundo
hilo debe esperar hasta que la funcin retorne del primer hilo.

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Detalles de argumentos

__________________________
__________________________

safecall
safecall void foo(unsigned
int frequency)
{
PlayTone(frequency,SEC_1);
Wait(SEC_1);
}

task task2()
{
while(true) {
foo(TONE_A5);
Yield();
}

task task1()
{
while(true) {
foo(TONE_A4);
Yield();
}
}

task main()
{
Precedes(task1,task2);
}

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Detalles de argumentos

__________________________
__________________________

inline

__________________________

Las funciones pueden ser marcadas como inline. Con esto se indica
que se debe crear una copia del cdigo de dicha funcin, solo hay
que tener en consideracin que como se copia el cdigo entonces
est en lugar de reducir, aumentar.
El cdigo del ejemplo siguiente muestra como usar inline en la
funcin, en esta caso la task main contiene 4 llamados a PlayTone y
4 a Wait, adems de los 4 llamados a la subrutina foo, dado que el
cdigo es expandido.

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Laboratorio Edumvil. M.C. Gabriel Gernimo C.

Detalles de argumentos

__________________________
__________________________

inline

__________________________

inline void foo(unsigned int frequency)


{
PlayTone(frequency, SEC_1);
Wait(SEC_1);
}
task main()
{
foo(TONE_A4);
foo(TONE_B4);
foo(TONE_C5);
foo(TONE_D5);
}

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Laboratorio Edumvil. M.C. Gabriel Gernimo C.

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Detalles de argumentos

__________________________
__________________________
__________________________

void

_________________________
void permite definir funciones que no retornen
datos, estas funciones son referidas como
procedimientos o subrutinas. La palabra sub es un
alias de void, ambas son usadas para declarar o
definir una funcin.

__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Laboratorio Edumvil. M.C. Gabriel Gernimo C.

El Preprocesador

__________________________
__________________________
__________________________

El preprocesador NCX implementa las siguientes directivas


estandares preprocesadas: #include, #define, #ifdef,
#ifndef, #endif, #if, #elif, #undef, ##, #line, #error, y
#pragma . Adems soporta dos directivas no estandares:
#download and #import.

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Laboratorio Edumvil. M.C. Gabriel Gernimo C.

__________________________
__________________________
__________________________

MODULOS

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Mdulo Output

__________________________
__________________________

El mdulo Output abarca todas las salidas de motores. Casi todas las
funciones del API NXC toman como argumento una salida o un conjunto de
salidas variables o constantes
Macros para especificar el puerto de salida del motor
#defineOUT_A 0x00 //Salida del puerto A
#define OUT_B 0x01 //Salida del puerto B
#define OUT_C 0x02 //Salida del puerto C
#defineOUT_AB 0x03 //Salida del puerto A y puerto B
#defineOUT_AC 0x04 //Salida del puerto A y puerto C
#defineOUT_BC 0x05 //Salida del puerto B y puerto C
#defineOUT_ABC 0x06 //Salida del puerto A, puerto B y puerto C

Mdulo Output

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

__________________________
__________________________
__________________________

Macros de modos del puerto de salida del motor


#defineOUT_MODE_COAST
0x00 //punto muerto del motor
#defineOUT_MODE_MOTORON 0x01 //encender motor
#define OUT_MODE_BRAKE
0x02 // freno de motor
#define OUT_MODE_REGULATED 0x04 //regulador de motor
#defineOUT_MODE_REGMETHOD0xF0 //registro de mtodo

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Mdulo Output

__________________________
__________________________

Funciones para accesar y modificar caractersticas del modulo de


salida:
void SetMotorPwnFreq(byte): Establece la frecuencia reglamentaria
del motor.
void SetMotorRegulationTime(byte): Establece el tiempo
reglamentario.
void SetMotorRegulationOptions(byte): Establece opciones
reglamentarias.
void OnFwdSyncPID (byte, char, char , byte, byte, byte): Motores
de avance sincronizados en los factores PID.

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Mdulo Output

__________________________
__________________________

void OnFwdSyncExPID(byte, char, char, const byte, byte,


byte, byte): Motores de avance sincronizados y contadores con
factores PID reiniciados.
void OnRevSyncPID(byte, char, char, byte, byte, byte):
Motores de reversa sincronizados con los factores PID.
void OnRevSyncExPID(byte, char, char, const byte, byte,
byte, byte): Motores de reversa sincronizados y contadores con
factores PID reiniciados.

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Mdulo Output
void OnFwdRegPID(byte, char, byte, byte, byte, byte): Avanzan
motores hacia adelante regulados con los factores PID.
void OnFwdRegExPID(byte, char, byte, const byte, byte, byte,
byte): Avanzan motores hacia adelante regulados y reiniciando
contadores con los factores PID.
voidOnRevRegPID(byte, char, byte, byte, byte, byte): Marchan los
motores de reversa regulados con los factores PID.

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________

void OnRevRegExPID(byte, char, byte, const byte, byte, byte,


byte): Marchan los motores hacia atrs regulados y reiniciandos los
contadores con los factores PID.

__________________________

voidOff(byte): Apaga motores.

__________________________

Mdulo Output

__________________________

__________________________
__________________________

voidOffEx(byte, const byte): Apaga motores y reinicia contadores.


voidCoast(byte): Punto muerto de motores.
voidCoastEx(byte, const byte): Punto muerto de motores y reinicia
contadores.
void Float (byte): Motores flotadores (float).

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Mdulo Output
voidOnFwd(byte, char): Motores de marcha hacia adelante.
void OnFwdEx(byte, char, const byte): Motores de marcha
hacia adelante y reinicia contadores.

__________________________
__________________________
__________________________
_________________________

voidOnRev(byte, char): Motores de marcha hacia atrs.

__________________________

void OnRevEx(byte, char, const byte): Motores de marcha


hacia atrs y reinicia contadores.

__________________________

void OnFwdReg(byte, char, byte): Motores de marcha hacia


adelante regulados.

__________________________

void OnFwdRegEx(byte, char, byte, const byte): Motores de


marcha hacia delante regulados y contadores reiniciados.

Mdulo Output
void OnRevReg(byte, char, byte): Ejecuta motores de reversa
regulados.
voidOnRevRegEx(byte, char, byte, const byte): Ejecuta motores de
reversa regulados y contadores reiniciados.
void OnFwdSync(byte, char, char): Motores de marcha hacia
adelante sincronizados.
voidOnFwdSyncEx(byte outputs, char pwr, char turnpct, const byte
reset): Motores de marcha hacia adelante sincronizados y contadores
reiniciados.

__________________________
__________________________
__________________________

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Mdulo Output

__________________________
__________________________

void OnRevSync(byte, char pwr, char): Ejecuta motores de reversa


sincronizados.
void OnRevSyncEx(byte, char pwr, char, const byte): Ejecuta
motores de reversa sincronizados y contadores reiniciados.

__________________________
_________________________
__________________________

void RotateMotor(byte, char, long): Rota el motor.

__________________________

void RotateMotorPID(byte, char, long, byte, byte, byte): Rota el


motor con factores PID.

__________________________

void RotateMotorEx(byte, char, long, char, bool, bool): Rota el


motor Ex.

__________________________
__________________________
__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Mdulo Output

__________________________
__________________________

void RotateMotorExPID(byte, char, long, char, bool, bool, byte,


byte, byte): Rota el motor Ex con factores PID.
void ResetTachoCount(byte): Reinicia el contador de tacmetro.
void ResetBlockTachoCount(byte): Reinicia el contador relativo al
bloque.
void ResetRotationCount(byte): Reinicia el contador relativo al
programa.
void ResetAllTachoCounts(byte): Reinicia todos los contadores del
tacometro.

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Mdulo Output

__________________________
__________________________

void ResetRotationCount(byte): Reinicia el contador relativo al


programa.
void ResetAllTachoCounts(byte): Reinicia todos los
contadores de tacometro.
void SetOutput(byte, byte, variant,..., byteN, variant N): Fija
campos de salida.
variant GetOutput(byte, const byte): Obtiene los valores de
campos de salida.
byteMotorMode(byte): Obtiene modo de motor.

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Mdulo Output

__________________________
__________________________

char MotorPower(byte): Obtiene el nivel de potencia del motor.


char MotorActualSpeed(byte): Obtiene la velocidad actual del
motor.
long MotorTachoCount(byte): Obtiene el contador del tacmetro
del motor.
long MotorTachoLimit(byte): Obtiene el limite del tacmetro del
motor.
byte MotorRunState(byte): Obtiene el estado de ejecucin del
motor.

NOTAS DEL CURSO

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Mdulo Output

__________________________
__________________________
__________________________

char MotorTurnRatio(byte): Obtiene la relacin de vueltas del motor.


byte MotorRegulation(byte output): Obtiene el modo de regulacin
del motor.
bool MotorOverload(byte output): Obtiene el estado overload del
motor.

_________________________
__________________________
__________________________
__________________________

byte MotorRegPValue(byte output): Obtiene el valor P del motor P.

__________________________

byte MotorReglValue(byte output): Obtiene el valor I del motor.

__________________________
__________________________

Mdulo Output

__________________________
__________________________

byte MotorRegDValue(byte output): Obtiene el valor D del.


long MotorBlockTachoCount(byte): Obtiene el contador relativo al
bloque del motor.
long MotorRotationCount(byte): Obtiene el contador relativo del
programa del motor.

__________________________
_________________________
__________________________
__________________________
__________________________

byte MotorOutputOptions(byte): Obtiene las opciones del motor.

__________________________

byte MotorMaxSpeed(byte): Obtiene la velocidad mxima del motor.

__________________________
__________________________

Mdulo Output

__________________________
__________________________

byte MotorMaxAcceleration(byte): Obtiene la aceleracin


mxima del motor.
byte MotorPwnFreq(): Obtiene la frecuencia de regulacin
del motor.
byte MotorRegulationTime(): Obtiene el tiempo de
regulacin del motor.
byte MotorRegulationOptions(): Obtiene las opciones de
regulacin del motor.

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Mdulo Output

__________________________
__________________________

void PosRegEnable(byte, byte p= PID_3, byte i= PID_1 ,


byte d= PID_1): Habilita la posicin de regulacin absoluta
con los factores PID.

__________________________

void PosRegSetAngle(byte, long): Cambia el valor actual


para el ngulo fijado.

__________________________

void PosRedAddEngle(byte, long): Suma al valor actual


para fijar el ngulo.
void PosRegSetMax(byte, byte, byte): Fija los limites
mximos.

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Rotacin

__________________________
__________________________

Rota el motor un especifico nmero de grados.


void RotateMotor ( byte outputs, char pwr, long angle )

__________________________
_________________________

Parmetros:
outputs. Puertos de salida, pueden ser constantes o variables. Si se
desea controlar multiples puertos se usa un arreglo de bytes.
pwr. Potencia que puede ser de 0 a 100. Negativo indica direccin de
reversa.
angle. Angulo limite en grados. Si se coloca negativo es direccin
inversa.

__________________________
__________________________
__________________________
__________________________
__________________________

Ejemplo:

RotateMotor(OUT_A, 100, 50);

__________________________
Laboratorio Edumvil. M.C. Gabriel Gernimo C.

Rotacin

__________________________
__________________________

void RotateMotorEx ( byte outputs, char pwr, long angle, char


turnpct, bool sync, boolstop)

__________________________
_________________________

Ejecutar las salidas especificadas hacia adelante durante el nmero


de grados. Especifique tambin la sincronizacin, porcentaje de giro,
y las opciones de frenado. Esta funcin se utiliza principalmente con
ms de un motor.

__________________________

Parmetros

__________________________

outputs: Puertos de salida. Puede ser una constante o una variable.


Si utiliza una variable y desea controlar varias salidas en una sola
llamada tiene que utilizar una matriz de bytes en lugar de un byte y
almacena los valores de puerto de salida de la matriz de bytes antes
de pasar en esta funcin.

__________________________

NOTAS DEL CURSO

__________________________

__________________________
__________________________

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Rotacin

__________________________

pwr: Potencia de salida (0..100). Puede ser negativo para invertir la


direccin.
angle: Angulo lmite en grados. Puede ser negativo para invertir la
direccin.
turnpct: Giro de (-100..100). La direccin del vehculo depende de su
construccin.

__________________________
__________________________
_________________________
__________________________
__________________________

sync: Sincroniza los motores. Debe establecerse en true para producir


resultado.

__________________________

stop: Especifica que los motores deben frenar al final de la rotacin.

__________________________

Ejemplo:

__________________________

RotateMotorEx (OUT_BC, 75, 360, 50, true, true )

Moviendo los motores

__________________________

__________________________
__________________________

task main()
{
OnFwd(OUT_A,
75); OnFwd
(OUT_C, 75);
Wait(4000);
OnRev(OUT_AC,
75); Wait
(4000);
Off(OUT_AC);
}

1) Indica al robot comunicarse con el


motor conectado en su salida A y se
mueva hacia adelante a 75% de su
mxima velocidad.
2) Lo mismo que 1, pero para el motor
conectado en C
3) Indica que espere 4 segundos
4) Se le indica al robot que se mueva en
sentido inverso, es decir, haca atrs.
Se combinan los dos motores
conectados en A y C.
5) Indica que espere 4 segundos
6) Apagamos los motores A y C.

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Laboratorio Edumvil. M.C. Gabriel Gernimo C.

Cambiando la velocidad

__________________________
__________________________
__________________________

La velocidad se puede cambiar en el segundo parmetro de los llamados


siguientes:

_________________________

OnFwd(OUT_AC, 30); // avanzar

__________________________

OnRev(OUT_AC, 30); // retroceder

__________________________

La potencia est entre 0 y 100.

__________________________
__________________________
__________________________
__________________________
Laboratorio Edumvil. M.C. Gabriel Gernimo C.

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Constantes de puertos de
entrada
Las constantes de entrada son usados cuando se llama
al API de las funciones de control de los sensores
#define IN_1
#define IN_2
#define IN_3
#define IN_4

__________________________
__________________________
__________________________
_________________________
__________________________

0x00
0x01
0x02
0x03

__________________________
__________________________
__________________________
__________________________
__________________________
Laboratorio Edumvil. M.C. Gabriel Gernimo C.

Mdulo display

__________________________
__________________________

El mdulo display abarca el soporte para dibujar en el LCD del NXT. El


NXT soporta dibujos de puntos, lineas, rectngulos y crculos. Permite
dibujar archivos grficos de iconos, textos y nmeros en la pantalla.
La coordinada origen de la pantalla LCD es (0,0). El API NXC proporciona
constantes para ser usadas en las funciones NumOut y TextOut, las cuales
permite colocarse en una linea especifica del LCD, las cuales van de 1 a 8, 1
es la lnea limite superior y 8 es la lnea limite inferior.
Estas constantes (LCD_LINE1, LCD_LINE2, LCD_LINE3, LCD_LINE4,
LCD_LINE5, LCD_LINE6, LCD_LINE7, LCD_LINE8) deben ser usadas
como la coordenada Y en los llamados NumOut y TextOut.

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Mdulo display
Funcin TextOut
c h a r Te x t O u t ( i n t x , i n t y , s t ri n g s t r , u n s i g n e d l o n g
options=DRAW_OPT_NORMAL)
Dibuja un texto en la coordenada (x,y) de la pantalla. El valor de y debe ser
multiplo de 8 (se puede utilizar las constantes de numero de linea:
LCD_LINE). Si el argumento no se especifica el valor por default es
DRAW_OPT_NORMAL. Los valores de este argumento estn listados en el
grupo de Drawing option constants.
Parmetros:
x: Es el valor de la coordenada de inicio de la salida del texto en el LCD
y: Es el nmero de lnea para la salida del texto en el LCD
str: La cade na a desplegar en el LCD
options: Opcin de dibujo del texto.

NOTAS DEL CURSO

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Mdulo display

__________________________

Constantes de la opcin Font drawing

__________________________

Estas constantes solo son usadas cuando se dibujan en el LCD texto o


nmeros usando la fuente RIC-base

__________________________

#define!DRAW_OPT_NORMAL!!
#define DRAW_OPT_CLEAR_WHOLE_SCREEN
#define DRAW_OPT_CLEAR_EXCEPT_STAT_SCREEN
#define DRAW_OPT_CLEAR_PIXELS
#define DRAW_OPT_CLEAR
#define DRAW_OPT_INVERT
#defineDRAW_OPT_LOGICAL_COPY
#define DRAW_OPT_LOGICAL_AND
#define DRAW_OPT_LOGICAL_OR
#define DRAW_OPT_XOR
#define DRAW_OPT_FILL_SHAPE
#defineDRAW_OPT_CLEAR_SCREEN_MODES
#defineDRAW_OPT_LOGICAL_OPERATIONS
#define DRAW_OPT_POLYGON_POLYLNE
#define DRAW_OPT_CLEAR_LINE
#define DRAW_OPT_CLEAR_EOL

(0x0000)
(0x0001)
(0x0002)
(0x0004)
(0x0004)
(0x0004)
(0x0000)
(0x0008)
(0x0010)
(0x0018)
(0x0020)
(0x0003)
(0x0018)
(0x0400)
(0x0800)
(0x1000)

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Mdulo display

__________________________
__________________________

Funcin NumOut
char NumOut (int x, int y, variant value, unsigned long
options=DRAW_OPT_NORMAL)
Dibuja el valor numerico en la coordenada (x,y) de la pantalla. El valor de y
debe ser multiplo de 8.
Parmetros:
x: Es el valor de la coordenada de inicio de la salida del texto en el LCD
y: Es el nmero de lnea para la salida del texto en el LCD
value: El valor a desplegar en el LCD, cualquier tipo de numero
options: Opcin de dibujo del texto.

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Mdulo display

__________________________
__________________________

Funcin PointOut
char PointOut (int x,
options=DRAW_OPT_NORMAL)

int

y,unsigned

long

__________________________
_________________________

Dibuja un punto en la coordenada (x,y) de la pantalla.

__________________________

Parmetros:
x: Es el valor de la coordenada en x
y: Es el valor de la coordenada en y
options: Opcin de dibujo del punto.

__________________________
__________________________
__________________________
__________________________
__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Mdulo display

__________________________
__________________________

Funcin LineOut
char LineOut (int x1, int y1, int x2, int y2,unsigned long
options=DRAW_OPT_NORMAL)

__________________________
_________________________

Dibuja una lnea en la pantalla desde la coordenada (x1,y1) a (x2,y2)

__________________________

Parmetros:
x1,y1: Es el valor de la coordenada inicial
x2, y2: Es el valor de la coordenada final
options: Opcin de dibujo.

__________________________
__________________________
__________________________
__________________________
__________________________

Mdulo display
Funcin CircleOut
c h a r C i rc l e O u t ( i n t x , i n t y , b y t e r a d i o , u n s i g n e d l o n g
options=DRAW_OPT_NORMAL)
Dibuja un circulo en la pantalla con centro en la coordenada (x,y) usando como
radio el valor de radio.
Parmetros:
x1,y1: Es el valor x del centro del circulo.
x2, y2: Es el valor y del centro del circulo.
radio: El radio del circulo.
options: Opcin de dibujo.

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Mdulo display
Funcin RectOut
char RectOut (int x, int y, int ancho, int alto, unsigned long
options=DRAW_OPT_NORMAL)
Dibuja un rectngulo en la pantalla en la coordenada (x,y) usada como el tope
de la esquina izquierda del rectngulo, con el ancho y alto especificado.
Parmetros:
x,y: Coordenada (x,y) de la esquina superior izquierda del rectngulo.
ancho: Es el valor del ancho del rectngulo
alto: Es el valor del alto del rectngulo
options: Opcin de dibujo.

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Mdulo display

__________________________
__________________________

Funcin PolyOut
c h a r P o l y O u t ( L o c a t i o n Ty p e p u n t o s [ ] , u n s i g n e d l o n g
options=DRAW_OPT_NORMAL)

__________________________
_________________________

Dibuja un poligono en la pantalla en la coordenada usando un arreglo de puntos.

__________________________

Parmetros:
puntos: Es un arreglo de tipo LocationType que contiene los puntos que definen
el poligono.
options: Opcin de dibujo.

__________________________
__________________________
__________________________

Ejemplo:
LocationType puntos[] = {16,16, 8,40, 32,52, 20,36, 52,36, 56,52, 64,32, 44,20, 24,20};
PolyOut(puntos, DRAW_OPT_LOGICAL_XOR|DRAW_OPT_LOGICAL_XOR|
DRAW_OPT_FILL_SHAPE);

Mdulo display
Funcin EllipseOut
char EllipseOut (int x, int y, int radioX, int radioY, unsigned long
options=DRAW_OPT_NORMAL)
Dibuja una elipse en la pantalla con centro en la coordenada (x, y) usando los
radios radioX y radioY.
Parmetros:
x,y: El valor de la coordenada del centro, x y y respectivamente
radioX: Radio de en x.
radioY: Radio de en y.
options: Opcin de dibujo.

__________________________
__________________________

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Mdulo display
Funcin FontTextOut
char FontTextOut (int x, int y, string archivo, string cadena, unsigned
long options=DRAW_OPT_NORMAL)
Dibuja un texto en la pantalla en la posicin (x, y) usando una tradicional fuente
RIC.
Parmetros:
x,y: El valor de la coordenada donde se inicia el texto, x y y respectivamente
archivo: El nombre del archivo con la fuente RIC.
cadena: El texto para desplegarlo en la pantalla LCD.
options: Opcin de dibujo.

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Mdulo display
Funcin FontNumOut

__________________________
__________________________
__________________________

char FontNumOut (int x, int y, string archivo, variant valor, unsigned


long options=DRAW_OPT_NORMAL)
Dibuja un valor numrico en la pantalla en la posicin (x, y) usando una
tradicional fuente RIC.
Parmetros:
x,y: El valor de la coordenada donde se inicia el texto, x y y respectivamente
archivo: El nombre del archivo con la fuente RIC.
valor: El valor numrico para ser desplegado en la pantalla LCD.
options: Opcin de dibujo.

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Mdulo display
Funcin GraphicOut

__________________________
__________________________
__________________________

char GraphicOut (int x, int y, string archivo, unsigned long


options=DRAW_OPT_NORMAL)
Dibuja una imagen grfica tomada de un archivo en la pantalla en la posicin (x,
y).
Parmetros:
x,y: El valor de la coordenada donde se colocar la imagen.
archivo: El nombre del archivo de la imagen grfica RIC.
options: Opcin de dibujo.

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Mdulo display
Funcin GraphicArrayOut

__________________________
__________________________
__________________________

char GraphicArrayOut (int x, int y, byte datos[], unsigned long


options=DRAW_OPT_NORMAL)

_________________________
__________________________

Dibuja una imagen grfica a partir de un arreglo de bytes.

__________________________

Parmetros:
x,y: El valor de la coordenada donde se colocar la imagen.
datos: El arreglo de bytes de la imagen grfica RIC.
options: Opcin de dibujo.

__________________________
__________________________
__________________________
__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Mdulo display
Funciones: ResetScreen, ClearScreen, ClearLine
void ResetScreen ()
Reinicia la pantalla LCD.
void ClearScreen ()
Limpia la pantalla LCD, coloca una pantalla en blanco.
char ClearLine (bye linea)
Est funcin limpia una sola lnea en la pantalla.
Parmetro:
linea: Es la lnea que quieres borrar, use las constantes de lineas.

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Mdulo button

__________________________

Este mdulo est relacionado con los cuatro botones del NXT.

__________________________

Est formado por un conjunto de constantes asociadas a los botones


(offsets, asociadas a los botones, usadas con la funcin ButtonState),
funciones para accesar y modificar las caractersticas de los botones, y los
tipos de datos usados por los botones.

__________________________

Constantes
#define BTN1 0
#define BTN2 1
#define BTN3 2
#define BTN4 3
#define BTNEXIT
BTN1
#define BTNRIGHT BTN2
#define BTNLEFT
BTN3
#define BTNCENTER BTN4
#define NO_OF_BTNS 4

Mdulo button
Funcin ButtonPressed
bool ButtonPressed (const byte btn, bool resetCount=false)
Verifica si se presin el botn, se puede adems reiniciar el contador de
presionado.
Parmetros:
btn: El botn a verificar, se puede aplicar las constantes.
resetCount: Bandera para reiniciar o no el contador, default false.
Retorna un valor indicando si se presiono o no el botn.
Ejemplo:
while (true)
{
NumOut(0, LCD_LINE2, ButtonPressed (BTNRIGHT, false));
NumOut(0, LCD_LINE3, ButtonPressed (BTNLEFT, false));
}

NOTAS DEL CURSO

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Mdulo button
Funcin ButtonCount
byte ButtonCount (const byte btn, bool resetCount=false)
Obtiene la cantidad de veces que se presiono el botn, opcionalmente limpiar el
contador despus de leerlo.
Parmetros:
btn: El botn a verificar, se puede aplicar las constantes.
resetCount: Bandera para reiniciar o no el contador, default false.
Retorna el contador.

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________

Ejemplo:

__________________________

valor= ButtonCount (BTN1, true);

Mdulo button
Funcin ReadButtonEx

__________________________

__________________________
__________________________
__________________________

bool ReadButtonEx (const byte btn, bool reset, bool &pressed, unsigned
int &count)
Lee informacin de un botn especifico, coloca en los parmetros pressed y
count el estado actual de dicho botn, opcionalmente se puede reiniciar (reset)
el estado de presionado despus de la lectura.
Parmetros:
btn: El botn a verificar, se puede aplicar las constantes.
reset: Reiniciar o no el contador de presionado.
pressed: El estado del botn si es presionado
count: El contador que indica las veces que fue presionado el botn

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Mdulo button
Funcin ButtonPressCount

__________________________
__________________________
__________________________
_________________________

byte ButtonPressCount (const byte btn)

__________________________

Obtiene la cantidad de veces que se presiono el botn.

__________________________

Parmetro:
btn: El botn a verificar, se puede aplicar las constantes.

__________________________

Retorna el contador.

__________________________
__________________________
__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Mdulo button
Funcin ButtonLongPressCount

__________________________
__________________________
__________________________

byte ButtonLongPressCount (const byte btn)


Obtiene la cantidad de veces que se presiono el botn en formato largo.
Parmetro:
btn: El botn a verificar, se puede aplicar las constantes.
Retorna el contador en formato largo.

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Mdulo button
Funcin ButtonShortReleaseCount

__________________________
__________________________
__________________________

byte ButtonShortReleaseCount (const byte btn)


Obtiene la cantidad de veces que se libero el botn en formato corto.
Parmetro:
btn: El botn a verificar, se puede aplicar las constantes.
Retorna el contador en formato corto.

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Mdulo button
Funcin ButtonLongReleaseCount

__________________________
__________________________
__________________________

byte ButtonLongReleaseCount (const byte btn)


Obtiene la cantidad de veces que se libero el botn en formato largo.
Parmetro:
btn: El botn a verificar, se puede aplicar las constantes.
Retorna el contador en formato largo.

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Mdulo button
Funcin ButtonReleaseCount

__________________________
__________________________
__________________________

byte ButtonReleaseCount (const byte btn)


Obtiene la cantidad de veces que se libero el botn.
Parmetro:
btn: El botn a verificar, se puede aplicar las constantes.
Retorna el contador.

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Mdulo button
Funcin ButtonState

__________________________
__________________________
__________________________

byte ButtonState (const byte btn)


Obtiene el estado del botn especificado.
Parmetro:
btn: El botn a verificar, se puede aplicar las constantes.
Retorna el estado.

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Mdulo button
Funcin SetButtonLongPressCount

__________________________
__________________________
__________________________

void SetButtonLongPressCount (const byte btn, const byte n)


Fija el contador de presin en formato largo del botn especificado.
Parmetros:
btn: El nmero de botn.
n: El nuevo valor del contador.

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Mdulo button
Funcin SetButtonLongReleaseCount

__________________________
__________________________
__________________________

void SetButtonLongReleaseCount (const byte btn, const byte n)


Fija el contador de liberacin de formato largo del botn especificado.
Parmetros:
btn: El nmero de botn.
n: El nuevo valor del contador.

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Mdulo button
Funcin SetButtonPressCount

__________________________
__________________________
__________________________

void SetButtonPressCount (const byte btn, const byte n)


Fija el contador de presin del botn especificado.
Parmetros:
btn: El nmero de botn.
n: El nuevo valor del contador.

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Mdulo button
Funcin SetButtonReleaseCount

__________________________
__________________________
__________________________

void SetButtonReleaseCount (const byte btn, const byte n)


Fija el contador de liberacin del botn especificado.
Parmetros:
btn: El nmero de botn.
n: El nuevo valor del contador.

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Mdulo button
Funcin SetButtonShortReleaseCount

__________________________
__________________________
__________________________

void SetButtonShortReleaseCount (const byte btn, const byte n)


Fija el contador de liberacin en formato corto del botn especificado.
Parmetros:
btn: El nmero de botn.
n: El nuevo valor del contador.

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Mdulo button
Funcin SetButtonState

__________________________
__________________________
__________________________

void SetButtonState (const byte btn, const byte state)

_________________________

Fija el estado del botn especificado.

__________________________

Parmetros:
btn: El botn a fijar, se puede aplicar las constantes.
state: El nuevo estado del botn.

__________________________
__________________________
__________________________
__________________________
__________________________

Modulo de Sonido
Este mdulo se encarga de proporcionar soporte de reproduccin de tonos
(archivos de sonido .rso y archivos melody) en el NXT por medio de dos
diferentes tipos de archivos.
Cuando un sonido o un archivo es reproducido, la ejecucin no espera a que
finalice la anterior ejecucin de sonido, entonces para reproducir mltiples
tonos o secuencia de archivos es necesario esperar a que se termine el
primero sonido emitido, esto puede lograrse por medio del uso de la funcin
Wait o con el valor del estado del sonido en un ciclo while.
El API NXC define constantes de frecuencia y duracin, las cuales pueden
ser utilizadas en los llamados Playtone o PlayToneEx. Las constantes de
frecuencia inician con TONE_A3 (la A de tono en octavo 3) y va a
TONE_B7 (la B de tono en octavo 7). Las constantes de duracin inician
con MS_1 (1 milisegundo) y va a MIN_1 (60000 milisegundos).

NOTAS DEL CURSO

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Constantes de SoundState

__________________________
__________________________

Constantes para ser usada con la funcin SoundState().


#defineSOUND_STATE_IDLE 0x00

__________________________

#define SOUND_STATE_FILE 0x02

_________________________

#define SOUND_STATE_TONE0x03

__________________________

#defineSOUND_STATE_STOP 0x04

__________________________

byte SoundState ( )
Obtiene el estado del mdulo de sonido. Retorna el actual
estado del modulo de sonido.
void SetSoundModuleState ( bytestate )
Fija el estado del mdulo de sonido.

Mdulo de Sonido
char PlayFile (string filename)
Reproduce un archivo. El archivo puede ser un RSO o un RMD.

Ejemplo:
PlayFile (starup.rso);
charPlayFileEx (string filename, byte volume, bool loop, unsigned int
sr=0)
Reproduce un archivo con opciones extras. El volumen debe ser un
nmero entre 0 (silencio) a 4 (ruidoso). Reproduce el archivo
repetidamente si el loop es true.

Ejemplo:
PlayFileEx (starup.rso, 2, true);

Mdulo de Sonido

__________________________
__________________________
__________________________
__________________________

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

__________________________
__________________________
__________________________

charPlayTone (unsigned int frequency, unsigned int duration)


Reproduce un tono con una frecuencia (en Hz) y duracin
especificada (en ms).

Ejemplo:
PlayTone (440, 1000);

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Mdulo de Sonido

__________________________
__________________________

charPlayToneEx (unsigned int frequency, unsigned int duration, byte


volume, bool loop)
Reproduce un tono con frecuencia (Hz), duracin(ms) y volumen
(0..4) especifico, si bool es true el sonido es repetitivo.

Ejemplo:

PlayToneEx (400,400,2,false);
byte SoundState ()
Obtiene el estado del modulo de sonido.

Ejemplo:

x=SoundState();

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Mdulo de Sonido

__________________________
__________________________

Los valores que puede retornar estn asociados a las siguientes


constates

__________________________
_________________________

#define SOUND_STATE_IDLE 0x00 //Reiniciar (SOUND_UPDATE)


#defineSOUND_STATE_FILE 0x02 //Procesando un archivo de

__________________________

sonido o meloda

__________________________

#define SOUND_STATE_TONE0x03 //Procesando un tono


#define SOUND_STATE_STOP0x04 //Paro del sonido inmediato y
cierre del hardware

__________________________
__________________________
__________________________
__________________________

Mdulo de Sonido

__________________________
__________________________

byte SoundFlags()
Obtiene las banderas del modulo de sonido.

Ejemplo:

x=SoundFlags();
byte StopSound ()
Detiene un sonido.

Ejemplo:

StopSound();
unsigned intSoundFrequency ()
Obtiene la frecuencia de sonido.

Ejemplo:

x=SoundFrequency();

NOTAS DEL CURSO

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Mdulo de Sonido

__________________________
__________________________

unsigned int SoundDuration()


Obtiene la duracin del sonido.

Ejemplo:

x=SoundDuration();
unsigned int SoundSampleRate()
Obtiene la frecuencia de muestreo.

Ejemplo:

x=SoundSampleRate();
byte SoundMode()
Obtiene el modo del sonido.

Ejemplo:

x=SoundMode();

Mdulo de Sonido
Los valores que puede retornar son:
#define SOUND_MODE_ONCE0x00 // Reproduce solo una vez
#defineSOND_MODE_LOOP 0x01 // Reproduce el archivo
hasta que se escriba SOUND_STATE_STOP en SoundState
#defineSOUND_MODE_TONE0x02 // Reproduce el tono
especifico en la frecuencia con una duracin de ms

byte SoundVolume ()
Obtiene el volumen.

Ejemplo:

x=SoundVolume();
void SetSoundDuration (unsigned int duration)
Fija la duracin del sonido.

Ejemplo:

SetSoundDuration(500);

Mdulo de Sonido

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

__________________________
__________________________

voidSetSoundFlags (byte flags)


Fija las banderas del modulo de sonido. Las Constantes usadas en est
funcin son:
#defineSOUND_FLAGS_IDLE0x00 // Sonido Inactivo
#define SOUND_FLAGS_UPDATE0x01 // Actualiza los cambios
#defineSOUND_FLAGS_RUNNING 0x02 //Procesando un tono o archivo

void SetSoundFrequency(unsigned int frequency)


Fija la frecuencia de sonido.

Ejemplo:

SetSoundFrequency(400);

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Mdulo de Sonido
voidSetSoundMode (byte mode)
Fija el modo del sonido, utilizando las constates de modo.

Ejemplo:

SetSoundMode(SOUND_MODE_ONCE);
voidSetSoundModeState(byte state)
Fija el estado del modulo de sonido.
void SetSoundSampleRate(unsigned int sampleRate)
Fija la frecuencia de muestreo.

Ejemplo:

SetSoundSampleRate(4000);
void SetSoundVolume(byte volume)
Fija el volumen del sonido.

Ejemplo:

SetSoundVolume (3);

Mdulo de Sonido

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

__________________________
__________________________

voidSysSoundPlayFile (SoundPlayFileType &args)


Reproduce un archivo de sonido, que se pasa va la
estructura siguiente.
struct SoundPlayFile_Type {
char Result; // siempre es NO_ERR
string Filename;
bool Loop;
byte SoundLevel;
};

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Mdulo de Sonido

__________________________
__________________________

Ejemplo:
task main()
{
SoundPlayFile argu;
argu.Filename = hello.rso;
argu.Loop = false;
argu.SoundLevel = 3;
SysSoundPlayFile (argu);
}

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Mdulo de Sonido

__________________________
__________________________

void SysSoundPlayTone (SoundPlayToneType &args)


Reproduce un tono, con las caractersticas pasadas va la estructura
siguiente.
struct SoundPlayToneType {
char Result;
unsigned int Frequency;
unsigned int Duration;
bool Loop;
byte SoundLevel;
};

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Mdulo de Sonido

__________________________
__________________________

Ejemplo:
task main()
{
SoundPlayToneType argu;
argu.Frequency = 400;
argu.Duration = 2000;
argu.Loop = false;
argu.SoundLevel = 3;
SysSoundPlayTone (argu);
}

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Mdulo de Sonido

__________________________
__________________________

void SysSoundGetState (SoundGetStateType &args)


Obtiene el estado del sonido, va la siguiente estructura
struct SoundGetStateType {
byte State;
byte Flags;
};
Ejemplo:
task main ()
{
SoundGetStateType argu;
SysSoundGetState (argu);
if (argu.State == SOUND_STATE_IDLE)
{ /* realizar algo */ }
}

NOTAS DEL CURSO

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Mdulo de Sonido
void SysSoundSetState ( SoundSetStateType &args)
Fija el estado del sonido, va la siguiente estructura
struct SoundSetStateType {
byte Result;
byte State;
byte Flags;
};

Ejemplo:

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________

task main ()
{
SoundSetStateType argu;
argu.State = SOUND_STATE_STOP;
SysSoundSetState (argu);
}

__________________________
__________________________
__________________________

Mdulo de Sonido

__________________________
__________________________
__________________________

void PlaySound(const int &aCode)


Reproduce un sonido del sistema, usando las siguientes
constantes:
aCode
SOUND_CLICK
SOUND_DOUBLE_BEEP
SOUND_DOWN
SOUND_UP
SOUND_LOW_BEEP
SOUND_FAST_UP

Resultado del Sonido


Sonido de la tecla click
Doble beep
Barrido hacia abajo
Barrido hacia arriba
Sonido de error
Barrido rpido

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Mdulo de Sonido

__________________________
__________________________
__________________________

Ejemplo:
task main()
{
PlaySound(SOUND_UP);
PlaySound(SOUND_DOWN );
Wait (1000);
PlaySound(SOUND_LOW_BEEP);
Wait (1000);
PlaySound(SOUND_FAST_UP);
}

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Mdulo de Sonido

__________________________
__________________________

voidPlayTones (Tone tones[])


Reproduce mltiples tonos va los elementos colocados en el
arreglo que sern instancias de la estructura siguiente
struct Tone {
unsigned int Frequency;
unsigned int Duration;
};

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Mdulo de Sonido
Ejemplo:
Tone tonos [] = {
TONE_C4, MS_50,
TONE_E4, MS_50,
TONE_G4, MS_50,
TONE_C5, MS_50,
TONE_E5, MS_50,
TONE_G5, MS_50,
TONE_C6, MS_50,
};
task main()
{
PlayTones (tonos);
Wait (1000);
}

Mdulo de Sonido

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

__________________________
__________________________

Constantes
#define TONE_C4262 // Cuarto octavo C
#define MS_50
50 // 50 milisegundos
#define TONE_E4330 // Cuarto octavo de E
#define TONE_G4392
#define TONE_C5523
#define TONE_E5659
#define TONE_G5784
#define TONE_C61047

__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


__________________________
__________________________
__________________________
_________________________

SENSORES

__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Sensor de Tacto

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________

__________________________
Se instala en la entrada 1 del NXT.

Sensor de Tacto

__________________________
__________________________

task main ()
{
int cont=0;

__________________________
_________________________

while (cont < 3)


{
SetSensor (IN_1, SENSOR_TOUCH);
OnRev (OUT_AB, 75);
if (SENSOR_1 == 1)
{
OnFwd (OUT_AB, 75);
Wait (300);
cont +=1;
}
}
Off(OUT_AB);
}

__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Laboratorio Edumvil. M.C. Gabriel Gernimo C.

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Sensor de Tacto
task main ()
{
int cont=0, ban=0;
SetSensor (IN_1, SENSOR_TOUCH);
SetSensor (IN_2, SENSOR_TOUCH);
while (cont < 6)
{
if (ban==0)
OnFwd (OUT_AB, 75);
else
OnRev (OUT_AB,75);
if (SENSOR_1 == 1)
{
OnRev (OUT_AB, 75);
Wait (300);
cont +=1;
ban=1;
}

if (SENSOR_2==1)
{
OnFwd (OUT_AB, 75);
Wait (300);
cont +=1;
ban=0;
}
}
Off(OUT_AB);
}

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Laboratorio Edumvil. M.C. Gabriel Gernimo C.

Sensor Ultrasonico

__________________________
__________________________
__________________________

byte SensorUS ( const byte port )

_________________________

Lee el valor del sensor Ultrasonico. Antes de esta funcin se


debe configurar el puerto como Lowspeed. Esta funcin
incluye 15 milisegundos de espera antes de la lectura del
sensor.

__________________________

void SetSensorLowspeed ( const byte &port, bool bIsPowered


= true )

__________________________

Configura un sensor I2C (Ultrasonico).

__________________________

__________________________

__________________________
__________________________
Laboratorio Edumvil. M.C. Gabriel Gernimo C.

Sensor Ultrasonico

__________________________
__________________________

#define UMBRAL 70

__________________________

task main()
{
SetSensorLowspeed(IN_4)
while (true)
{
OnFwd (OUT_BC, 75);
until (SensorUS (IN_4) < UMBRAL);
Wait (1000);
Off(OUT_BC);
OnRev(OUT_C, 80);
Wait (800);
}
}

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Laboratorio Edumvil. M.C. Gabriel Gernimo C.

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC



4.9.2 SENSOR DE SONIDO
Figura 63. Sensor de Sonido [19].

Sensor de Sonido

__________________________
__________________________

El sensor de sonido puede detectar tanto decibeles (dB), como decibeles


ajustados (dBA). Decibel es una medida de la presin de sonido.

Permite detectar los decibeles (dB). Permite medir


hasta 90 dB.
x (dBA): La sensibilidad del sensor es ajustada al odo humano.

__________________________

(db) /D VHQVLELOLGDG GHO VHQVRU QR HVWi DMXVWDGD \ SXHGH HVFXFKDU
sonidos por debajo o por encima de la capacidad del odo humano.

#define UMBRAL 75
El sensor puede medir sonido hasta de 90 dB. La lectura del sonido de visualiza
task main()
en porcentaje de acuerdo a la siguiente tabla:
_________________________
{
Tabla 4. Discriminacin del sensor de sonido en porcentaje [17].
SetSensorSound (IN_2);
Porcentaje
Descripcin
__________________________
do
4%-5%
Habitacin en silencio
{
__________________________
5%-10%
Personas hablando lejos
until (SENSOR_2 > UMBRAL);
OnFwd (OUT_BC, 75);
10%-30%
Conversacin normal
__________________________
Wait (1000);
30%-100%
Personas gritando y msica a alto volumen
ResetSensor(IN_2);
__________________________
until (SENSOR_2 > UMBRAL);
OnFwd (OUT_BC, 75);
Wait(100);
__________________________
Off (OUT_BC);
} while (true);
__________________________
}
Laboratorio Edumvil. M.C.!"#$
Gabriel Gernimo C.

$ SENSOR DE SONIDO
4.9.2

Figura 63. Sensor de Sonido [19].

Sensor de Sonido

__________________________
__________________________

El sensor de sonido puede detectar tanto decibeles (dB), como decibeles


ajustados (dBA). Decibel es una medida de la presin de sonido.
x
x

__________________________

(dBA): La sensibilidad del sensor es ajustada al odo humano.


(db) /D VHQVLELOLGDG GHO VHQVRU QR HVWi DMXVWDGD \ SXHGH HVFXFKDU

sonidos
por debajo o por encima
la capacidad del odo humano.
void SetSensorSound ( const byte &port, bool
bdBScaling
=detrue)

_________________________

El sensor puede medir sonido hasta de 90 dB. La lectura del sonido de visualiza
en porcentaje de acuerdo a la siguiente tabla:

Configura el sensor de sonido en el puerto especificado.

Tabla 4. Discriminacin del sensor de sonido en porcentaje [17].

Parmetros:
port. El puerto a configurar

Porcentaje

Descripcin

4%-5%

Habitacin en silencio

5%-10%

Personas hablando lejos

__________________________
__________________________

bdBScaling. Bandera para indicar si el puerto


se Conversacin
va a configurar
10%-30%
normal
el puerto como sonido en escala dB o dBA. El valor por omisin
30%-100%
Personas gritando y msica a alto volumen
es true que indica que se configura en dB

__________________________

#define SENSOR_2Sensor(S2)

__________________________

Constante para leer el valor del sensor en el puerto 2

__________________________
__________________________

4.9.3 SENSOR DE LUZ

!"#$
$

Figura 64. Sensor de luz [19].

Sensor de Luz

__________________________

__________________________
Luz permite al robot distinguir entre
luz y obscuridad.
El Sensor de Luz le permite dan visin al robot dededistinguiendo
entre
luz Puede leer la intensidad
luz en una habitacin y medir la intensidad de luz de superficies coloreadas
[18].
y obscuridad. Es monocromtico, es decir, puede
distinguir
entre
el
El sensor es monocromtico, es decir puede distinguir entre el blanco y el negro
por una gama de grises, la lectura la entrega en porcentaje [17]. __________________________
blanco y el negro pasando por una gama de pasando
grises,
y su lectura la
Este nuevo y muy mejorado sensor de luz intenta paliar las grandes carencias de
su antecesor. En este sentido han "desacoplado" el emisor y receptor (ya no hay
entrega en porcentaje.
luz que pase directamente de uno a otro como ocurra con el modelo anterior), y
El Sensor de Luz es uno de los dos sensores que le dan visin al robot. El Sensor

#define UMBRAL 60
task main ()
{
SetSensorLight (IN_3);
OnFwd (OUT_BC, 20);
While (true)
{
if (Sensor (IN_3) > UMBRAL)
{
OnRev (OUT_C, 30);
Wait (100);
until (Sensor (IN_3) <= UMBRAL);
OnFwd (OUT_BC, 30);
}
}
}

NOTAS DEL CURSO

_________________________

han aadido la posibilidad de desconectar el emisor mediante software.


De esta forma, este sensor puede trabajar tanto en modo reflexin o como
medidor de nivel de luz de una forma mucho ms eficaz que el anterior modelo.
Aunque hemos ledo que este sensor es compatible con el RCX, en nuestra
opinin, no lo es ya que aunque el diseo es analgico, hace uso del nuevo
sistema de alimentacin separada que tienen los conectores del NXT mediante
uno de sus pines.
En el set del NXT versin educativa viene un nico sensor de luz por lo que
nosotros aconsejamos adquirir uno adicional para, por ejemplo, hacer "sigue
lneas" ms eficaces [19].

__________________________
__________________________
__________________________

4.9.4 SENSOR ULTRASNICO

__________________________
!"#$

__________________________
__________________________

Laboratorio Edumvil. M.C. Gabriel Gernimo C.

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Referencias
1. NXC: NXC Programmers guide. http://bricxcc.sourceforge.net/nbc/
nxcdoc/nxcapi/consts.html
2. Bricx Command Center .http://bricxcc.sourceforge.net/
3. Daniele Benedettelli. Programming LEGO NXT Robots using NXC. 2007.
4. M. Gasperi, P. Hurbain. Extreme NXT: Extending the LEGO
MINDSTORMS NXT to the Next Level. ISBN-13: 978-1-4302-2453-2. 2009
5. T. Griffin. The Art of LEGO MINDSTORMS NXT-G Programming.
ISBN-10: 1-59327-218-9. 2010
6. JCLarsen. Using NXC on Linux. http://www.jclarsen.dk/index.php/guides/
21-programming/52-using-nxc-on-linux

&""""""""""""""""""""""""""""""""""""""""""""""""""""!"#$%&'()*+&,'-&%.)'/0%#)102

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

__________________________
__________________________
__________________________

Diseos

_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Los siguientes diseos de NXT fueron descargados de sitios de la Internet.

!"#$%&'()'*+,-$.'/012'3.43,%.3'5'&67$&8,%.39

__________________________
Robot
1
'( ")*+,-*(.#*-/ " 0(*12$ " 345 " * " 0-6)7/ " )*+,6$+$ " 2+. " 89: " )*+__________________________
" ).;.)6#.# " #$"

__________________________
- " ;-*=-.>.? " #$ " #6@$-$+,$ " )*>;($<6#.#A " 8*+)-$,.>$+,$/ " )2$+,.
" )*+ " 2+"
_________________________

-*)$?.#*-"B,>$("BCDE"#$"FG"06,?"."H&"DIJA"K$",-.,."#$"2+">6)-*;-*)$?.#*-"

__________________________

#* " $L,$+?6M.>$+,$ " $+ " $($),-N+6). " #$ " )*+?2>* " O9PB?/ " ,$(Q@*+*?
" >NM6($?/"
__________________________

__________________________
2),*-$?"#6=6,.($?">2(,6>$#6./RS".?T")*>*"$+"*,-.?".;(6).)6*+$?"$>;*,-.#.?")*>*"

$>;(* " $+ " (. " 6+#2?,-6. " #$( " .2,*>NM6(A " B#$>U?/ " (. " ;(.,.@*->. "__________________________
)2$+,. " )*+ " 2+"
__________________________

$?.#*-/ " B,>$( " BVC " #$ " & " 06,?/ " W " )*+ " 2+. " >$>*-6. " X(.?Y " #$ " GZ[ " \] " W " 2+."

__________________________

6."CBD"#$"[H"\]A"8*+"-$?;$),*"."(.?")*>2+6).)6*+$?/"$(")*+,-*(.#*-"?*;*-,."

)*>2+6).)6*+$? " 6+.(U>0-6).? " )*+ " ](2$,**,Y " O$?;$)6@6).)6N+ " MGA^ " 'PCS " )*>*"
NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


6).)6N+";*-").0($"2?.+#*",$)+*(*=T.":K]"O$?,U+#.-"GA^S"12$"?*;*-,.+",.?.?"#$"

$+)6."#$"#.,*?"#$"Y.?,."GA%"W"%G"D06,?_?"-$?;$),6M.>$+,$A"'("0(*12$"345")2$+,."

PROGRAMANDO NXT CON NXC


Robot 1 - Pasos

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Robot 1 - Pasos

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Robot 1 - Pasos

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Robot 1 - Pasos

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Robot 1 - Pasos

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Robot 2

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Robot 3

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Robot 3 - Pasos

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Robot 3 - Pasos

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Robot 3 - Pasos

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Robot 3 - Pasos

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Robot 4

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Robot 4 - Pasos

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Robot 4 - Pasos

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Robot 4 - Pasos

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Robot 4 - Pasos

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Robot 4 - Pasos

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Robot 4 - Pasos

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO


PROGRAMANDO NXT CON NXC


Robot 4 - Pasos

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

Robot 4 - Pasos

__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________

NOTAS DEL CURSO

M.C. GABRIEL GERNIMO CASTILLO