Professional Documents
Culture Documents
Edumvil
Programando
NXT con NXC
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
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.
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Make sure to have correctly installed Mindstorms NXT Fantom Drivers that come with your set.
__________________________
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-
Sensores
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
!"#$%&'()'*+,-$.'/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?"
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
Caractersticas Tcnicas
__________________________
__________________________
4.2 ESQUEMA
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
!"#$
__________________________
Fuente de
Energa
USB
Bluetooth
Bluecore 4.0
_________________________
Pantalla
Bus SPI
Bus UART
Sonido
__________________________
Microprocesador
Principal Atmel ARM7
Botones
__________________________
Botones
Bus I!C
Circuitos de Entradas
_________________________
Circuitos de Salidas
x
x
x
x
x
x
__________________________
__________________________
Procesador
Atmel AVR
__________________________
__________________________
15
__________________________
Laboratorio Edumvil. M.C. Gabriel Gernimo C.
__________________________
__________________________
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.
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Lenguajes de Programacin
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Lenguajes de Programacin
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Lenguaje NXC
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
wget
http://downloads.sourceforge.net/
bricxcc/nbc-1.2.1.r4.tgz
__________________________
Desempaquetar
desempaquetar
Cambiarse
al directorio donde se
desempaqueto: cd nbc/NXT
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Observando la versin
Ejecutar
el compilador: ./nbc
Next Byte Codes Compiler versin 1.2
(....)
sudo
mv nbc /usr/local/bin
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Probando el compilador
Abrir
task main()
_________________________
__________________________
mundo!);
__________________________
Wait(1000);
__________________________
__________________________
__________________________
{
TextOut (0,0, Hola
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
sudo
__________________________
__________________________
Reiniciar el sistema
reboot
_________________________
__________________________
__________________________
__________________________
__________________________
Fuente principal: http://www.jclarsen.dk/index.php/guides/21-programming/52-using-nxc-on-linux
__________________________
Programando en NXC
__________________________
__________________________
__________________________
task main()
{
Instruccin 1...
Instruccin 2...
....
....
....
}
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Reglas Lxicas
__________________________
__________________________
Comentarios.
Para comentar mltiples lneas, estas se colocan entre
_________________________
/* y */
__________________________
__________________________
// comentario
__________________________
Espacios.
__________________________
__________________________
x=2;
__________________________
__________________________
x = 2;
Laboratorio Edumvil. M.C. Gabriel Gernimo C.
Reglas Lxicas
__________________________
__________________________
_________________________
__________________________
__________________________
char ch = 'a'; // ch == 97
__________________________
// se coloca x a 10
// se coloca x a 16 (10 hex)
__________________________
__________________________
__________________________
__________________________
NOTA
__________________________
__________________________
#define LCL_LINE1 56
__________________________
0
8
16
24
32
40
48
56
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
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);
}
_________________________
__________________________
__________________________
__________________________
__________________________
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
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
Estructura de un programa
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
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"
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Arreglos
__________________________
__________________________
Un arreglo se declara igual que una variable, pero con corchetes cuadrados
[ ] que siguen al nombre de la variable.
int mi_arreglo[];
un arreglo de 2-dimensiones
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Arreglos
__________________________
__________________________
__________________________
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.
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Declaraciones
__________________________
__________________________
__________________________
Asignaciones
__________________________
_________________________
__________________________
__________________________
Ejemplos:
__________________________
x = 2; // coloca x a 2
y = 7; // coloca y a 7
x += y; // x es 9, y sigue siento
Operador
__________________________
7
Accin
__________________________
__________________________
+=
__________________________
-=
*=
__________________________
/=
%=
&=
|=
__________________________
^=
__________________________
__________________________
_________________________
__________________________
||
+-=
>>=
__________________________
<<=
__________________________
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
__________________________
__________________________
__________________________
__________________________
__________________________
Estructuras de
control
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Sentencia if
__________________________
__________________________
__________________________
_________________________
__________________________
Sintaxis:
if (condicin) consecuencia
__________________________
Ejemplos:
__________________________
__________________________
if (x==1) y = 2;
if (x==1) { y = 1; z = 2; }
__________________________
__________________________
Laboratorio Edumvil. M.C. Gabriel Gernimo C.
Sentencia if-else
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
Sintaxis:
if (condicin) consecuencia else alternativa
__________________________
__________________________
__________________________
__________________________
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
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
Ejemplo:
__________________________
__________________________
__________________________
__________________________
Laboratorio Edumvil. M.C. Gabriel Gernimo C.
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);
}
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
Ejercicio
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Sentencia do-while
__________________________
__________________________
Ejemplo:
do
{
x = x+1;
y = y*2;
} while (x < 10);
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Practica 4
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Laboratorio Edumvil. M.C. Gabriel Gernimo C.
Sentencia for
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Practica 5
__________________________
task main()
__________________________
__________________________
for (int i=0; i<8; i++)
{
NumOut(0,LCD_LINE1-i*8, i);
}
_________________________
__________________________
__________________________
__________________________
Nota:
__________________________
__________________________
__________________________
Sentencia repeat
El repeat ejecuta un ciclo un nmero especifico de veces.
Sintaxis:
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
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);
}
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Sentencia repeat
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Sentencia switch
__________________________
__________________________
__________________________
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.
__________________________
__________________________
Sintaxis:
__________________________
__________________________
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;
}
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
_________________________
Sintaxis:
__________________________
break;
__________________________
__________________________
Sintaxis:
__________________________
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
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
Ejemplo:
__________________________
mi_ciclo:
x++;
goto mi_ciclo;
__________________________
__________________________
__________________________
Laboratorio Edumvil. M.C. Gabriel Gernimo C.
Sentencia until
__________________________
__________________________
__________________________
#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
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Expresiones
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
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
izquierda
x&y
_________________________
&
^
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
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
condicin
Significado
__________________________
expr
expr1 == expr2
expr1 != expr2
__________________________
_________________________
__________________________
__________________________
! condicion
cond1 || cond2
true
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
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Tareas - task
__________________________
__________________________
__________________________
_________________________
__________________________
{
// El cdigo de las tareas va aqu
}
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);
}
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
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
}
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
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
}
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
// y es igual a 1
__________________________
__________________________
__________________________
__________________________
__________________________
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.
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
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.
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Detalles de argumentos
__________________________
__________________________
inline
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
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.
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
El Preprocesador
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
MODULOS
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
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
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Mdulo Output
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Mdulo Output
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
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.
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Mdulo Output
__________________________
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Mdulo Output
voidOnFwd(byte, char): Motores de marcha hacia adelante.
void OnFwdEx(byte, char, const byte): Motores de marcha
hacia adelante y reinicia contadores.
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
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
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Mdulo Output
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Mdulo Output
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Mdulo Output
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Mdulo Output
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Mdulo Output
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Mdulo Output
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Mdulo Output
__________________________
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Rotacin
__________________________
__________________________
__________________________
_________________________
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:
__________________________
Laboratorio Edumvil. M.C. Gabriel Gernimo C.
Rotacin
__________________________
__________________________
__________________________
_________________________
__________________________
Parmetros
__________________________
__________________________
__________________________
__________________________
__________________________
Rotacin
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
Ejemplo:
__________________________
__________________________
__________________________
__________________________
task main()
{
OnFwd(OUT_A,
75); OnFwd
(OUT_C, 75);
Wait(4000);
OnRev(OUT_AC,
75); Wait
(4000);
Off(OUT_AC);
}
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Cambiando la velocidad
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Laboratorio Edumvil. M.C. Gabriel Gernimo C.
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
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
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.
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Mdulo display
__________________________
__________________________
__________________________
#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
__________________________
_________________________
__________________________
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.
__________________________
__________________________
__________________________
__________________________
__________________________
Mdulo display
__________________________
__________________________
Funcin LineOut
char LineOut (int x1, int y1, int x2, int y2,unsigned long
options=DRAW_OPT_NORMAL)
__________________________
_________________________
__________________________
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.
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
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)
__________________________
_________________________
__________________________
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.
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Mdulo display
Funcin FontNumOut
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Mdulo display
Funcin GraphicOut
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Mdulo display
Funcin GraphicArrayOut
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
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.
__________________________
__________________________
__________________________
__________________________
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.
__________________________
__________________________
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));
}
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
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:
__________________________
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
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
Parmetro:
btn: El botn a verificar, se puede aplicar las constantes.
__________________________
Retorna el contador.
__________________________
__________________________
__________________________
Mdulo button
Funcin ButtonLongPressCount
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Mdulo button
Funcin ButtonShortReleaseCount
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Mdulo button
Funcin ButtonLongReleaseCount
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Mdulo button
Funcin ButtonReleaseCount
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Mdulo button
Funcin ButtonState
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Mdulo button
Funcin SetButtonLongPressCount
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Mdulo button
Funcin SetButtonLongReleaseCount
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Mdulo button
Funcin SetButtonPressCount
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Mdulo button
Funcin SetButtonReleaseCount
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Mdulo button
Funcin SetButtonShortReleaseCount
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Mdulo button
Funcin SetButtonState
__________________________
__________________________
__________________________
_________________________
__________________________
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).
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Constantes de SoundState
__________________________
__________________________
__________________________
_________________________
#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
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Ejemplo:
PlayTone (440, 1000);
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Mdulo de Sonido
__________________________
__________________________
Ejemplo:
PlayToneEx (400,400,2,false);
byte SoundState ()
Obtiene el estado del modulo de sonido.
Ejemplo:
x=SoundState();
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Mdulo de Sonido
__________________________
__________________________
__________________________
_________________________
__________________________
sonido o meloda
__________________________
__________________________
__________________________
__________________________
__________________________
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();
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Mdulo de 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
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Ejemplo:
SetSoundFrequency(400);
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
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
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Mdulo de Sonido
__________________________
__________________________
Ejemplo:
task main()
{
SoundPlayFile argu;
argu.Filename = hello.rso;
argu.Loop = false;
argu.SoundLevel = 3;
SysSoundPlayFile (argu);
}
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Mdulo de Sonido
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
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
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
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
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Mdulo de Sonido
__________________________
__________________________
__________________________
Ejemplo:
task main()
{
PlaySound(SOUND_UP);
PlaySound(SOUND_DOWN );
Wait (1000);
PlaySound(SOUND_LOW_BEEP);
Wait (1000);
PlaySound(SOUND_FAST_UP);
}
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Mdulo de Sonido
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
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
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
_________________________
SENSORES
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Sensor de Tacto
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Se instala en la entrada 1 del NXT.
Sensor de Tacto
__________________________
__________________________
task main ()
{
int cont=0;
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Laboratorio Edumvil. M.C. Gabriel Gernimo C.
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);
}
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Sensor 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.
Sensor de Sonido
__________________________
__________________________
__________________________
(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
Sensor de Sonido
__________________________
__________________________
__________________________
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:
Parmetros:
port. El puerto a configurar
Porcentaje
Descripcin
4%-5%
Habitacin en silencio
5%-10%
__________________________
__________________________
__________________________
#define SENSOR_2Sensor(S2)
__________________________
__________________________
__________________________
!"#$
$
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);
}
}
}
_________________________
__________________________
__________________________
__________________________
__________________________
!"#$
__________________________
__________________________
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
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
!"#$%&'()'*+,-$.'/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
6).)6N+";*-").0($"2?.+#*",$)+*(*=T.":K]"O$?,U+#.-"GA^S"12$"?*;*-,.+",.?.?"#$"
$+)6."#$"#.,*?"#$"Y.?,."GA%"W"%G"D06,?_?"-$?;$),6M.>$+,$A"'("0(*12$"345")2$+,."
Robot 1 - Pasos
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Robot 1 - Pasos
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Robot 1 - Pasos
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Robot 1 - Pasos
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Robot 1 - Pasos
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Robot 2
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Robot 3
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Robot 3 - Pasos
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Robot 3 - Pasos
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Robot 3 - Pasos
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Robot 3 - Pasos
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Robot 4
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Robot 4 - Pasos
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Robot 4 - Pasos
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Robot 4 - Pasos
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Robot 4 - Pasos
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Robot 4 - Pasos
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Robot 4 - Pasos
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Robot 4 - Pasos
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
Robot 4 - Pasos
__________________________
__________________________
__________________________
_________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________