Documentos de Académico
Documentos de Profesional
Documentos de Cultura
NIVEL BSICO
Gustavo Zazo
NDICE
1 INTRODUCCIN....................................................................................................4
2 REGLAS LXICAS ..................................................................................................4
2.1 CDIGO ......................................................................................................4
2.2 SIGNOS DE PUNTUACIN..................................................................................4
2.3 ESPACIOS EN BLANCO .....................................................................................4
2.4 INSTRUCCIONES ............................................................................................5
2.5 COMENTARIOS ..............................................................................................5
2.6 COLOREADO DE CDIGO ..................................................................................6
2.7 IDENTIFICADORES Y PALABRAS RESERVADAS ..........................................................6
3 BLOQUES DE CDIGO ............................................................................................6
3.1 TAREAS ......................................................................................................7
3.2 FUNCIONES ..................................................................................................7
4 VARIABLES Y CONSTANTES ......................................................................................9
4.1 VARIABLES...................................................................................................9
4.2 CONSTANTES.............................................................................................. 10
5 INSTRUCCIONES GENERALES .................................................................................. 11
5.1 ASIGNACIN............................................................................................... 11
5.2 INSTRUCCIONES COMPUESTAS ......................................................................... 11
6 INSTRUCCIONES DE CONTROL DE FLUJO.................................................................... 12
6.1 BUCLES..................................................................................................... 12
6.1.1 repeat .................................................................................................. 12
6.1.2 while.................................................................................................... 12
6.1.3 do while .............................................................................................. 13
6.1.4 for ....................................................................................................... 13
6.2 INSTRUCCIONES DE CONDICIN........................................................................ 14
6.2.1 if - else ................................................................................................. 14
6.2.2 switch .................................................................................................. 15
7 INSTRUCIONES DE SALTO ...................................................................................... 16
7.1 goto ........................................................................................................ 16
7.2 return ...................................................................................................... 16
7.3 break ....................................................................................................... 16
7.4 continue ................................................................................................... 16
8 OPERADORES .................................................................................................... 16
8.1 OPERADOR DE ASIGNACIN ( = ) ...................................................................... 16
8.2 OPERADORES ARITMTICOS ............................................................................ 17
8.2.1 Operador (+) : Suma ................................................................................. 17
8.2.2 Operador (+=): Incremento ......................................................................... 17
8.2.3 Operador (++): Incremento en 1 ................................................................... 17
2 REGLAS LXICAS
2.1 CDIGO
Las rdenes al robot se escriben como texto en la pantalla del ordenador, se procesan por el
compilador de RobotC para obtener un archivo en lenguaje mquina y despus se cargan en el
robot, en el que se pueden ejecutar. El texto que se escribe como parte de un programa se llama
cdigo.
El cdigo de un programa en RobotC consiste en una serie de piezas (tokens) ordenadas
secuencialmente.
Cada pieza est integrada por letras, nmeros, signos de puntuacin o smbolos matemticos.
Grficamente se puede expresar como sigue:
El lenguaje C (y, por tanto, RobotC, que es un derivado suyo) diferencia entre maysculas y
minsculas, por lo que hay que prestar atencin cuando se escribe un programa. As, por
ejemplo, wait se reconoce como una pieza del lenguaje, pero Wait no se reconoce como tal.
Algunos de los operadores de C++ estn formados por mltiples caracteres. Para preservar estas
piezas no se debe insertar espacio en blanco entre ellos. En el ejemplo siguiente, la primera
lnea usa un operador de cambio a la derecha (>>), pero en la segunda lnea el espacio
aadido hace que los smbolos > se interpreten como dos elementos separados y en
consecuencia se genere un error.
x = 1 >> 4; //dar a x el valor de 1 desplazado a la derecha 4 bits
x = 1 > > 4; // error
El uso de espacios, tabulaciones y lneas ayuda al programador a leer el cdigo con mayor
facilidad. Es muy recomendable hacer un buen uso de los espacios en blanco en un programa.
2.4 INSTRUCCIONES
Una instruccin (orden, sentencia o declaracin) es una orden directa al robot. Por ejemplo, la
instruccin motor[motorC] = 100; indica al robot que ponga en marcha el motor conectado
al puerto C al 100 % de potencia.
Las instrucciones son ejecutadas de izquierda a derecha y de arriba abajo.
RobotC reconoce las diferentes instrucciones porque la gran mayora acaban en ; , pero no
porque estn en diferentes lneas. Los dos siguientes trozos de cdigo son exactamente iguales
para RobotC, pero el segundo es prcticamente ilegible para un programador humano.
task main()
{
motor[motorC] = 100;
wait1Msec(3000);
}
task main(){motor[motorC
]=100;wait1Msec(3000);}
2.5 COMENTARIOS
RobotC soporta dos tipos de comentarios. El primer tipo (comentarios C tradicionales) empieza
con /* y termina con */. Pueden abarcar varias lneas, pero no pueden anidarse.
/* esto es un comentario */
/* esto es un comentario
de dos lneas */
/* otro comentario
/* intentando anidar
finalizando el comentario interior */
este texto ya no es un comentario! */
task main()
{
motor[motorC] = 100;
wait1Msec(3000); // Esto es un comentario: Espera 3 s
}
default if sub
do int switch
3 BLOQUES DE CDIGO
Un programa en RobotC se compone de bloques de cdigo y variables globales. Hay dos tipos de
bloques de cdigo: tareas y funciones en lnea. Cada tipo de bloque de cdigo tiene sus propias
caractersticas y restricciones particulares, pero todos comparten una estructura comn.
task nombre()
{
// El cdigo de la tarea se escribe aqu (cuerpo)
}
El nombre de la tarea puede ser cualquier identificador legal. Un programa debe tener al menos
una tarea, que se llama main y que se inicia cada vez que se ejecuta el programa.
Funciones referentes a tareas:
3.2 FUNCIONES
A menudo es til agrupar un conjunto de instrucciones en una sola funcin, que puede ser llamada
cuando sea necesario. RobotC soporta funciones con argumentos, pero no valores de retorno. Las
funciones se definen con la siguiente sintaxis:
void nombre(lista_de_argumentos)
{
// cuerpo de la funcin
}
EJEMPLOS DE APLICACIN
1. En el siguiente ejemplo se define la funcin GiraDerecha, que luego es llamada desde la
tarea principal task main.
4 VARIABLES Y CONSTANTES
4.1 VARIABLES
Una variable es un contenedor que puede almacenar un valor determinado: cantidades numricas,
cadenas alfanumricas o valores booleanos.
Los principales tipos de variables que soporta RobotC son los siguientes:
El contador ha llegado a 4
Una cadena de caracteres que
Cadena puede incluir nmeros, letras o ALTO string
smbolos.
Hora de comer!
Las variables se declaran usando una de las palabras reservadas int, float, string o bool
seguida de una lista de nombres de variables separados por coma y terminados por un punto y
coma.
string nombre, apellido; Crea las variables de tipo cadena llamadas nombre
y apellido
int valorLuz = 40; Crea una variable de tipo entero llamada valorLuz y
le asigna un valor inicial de 40
Por ejemplo:
int x; // x es global
void aaa ()
{
int z; // z local declarada
}
task main()
{
int y; // y es local de la tarea main
x = y; // ok
y = z; // error aqu no est definida z
}
task otra ()
{
x = 1; // ok
y = 2; // error - y no es global
}
4.2 CONSTANTES
Una constante es un contenedor que almacena un valor determinado pero, a diferencia de las
variables, dicho valor no puede ser modificado posteriormente en el programa.
Las constantes se declaran de la misma manera que las variables, pero anteponiendo la palabra
reservada const.
Es obligatorio adjudicarlas un valor en la instruccin de la declaracin.
Ejemplos:
const float DECIMAL = 14.256;
const string NOMBRE = Jorge;
const int EDAD = 25;
NOTA: No es obligatorio, pero es una costumbre entre los programadores usar maysculas para los
nombres de constantes y minsculas para los nombres de variables.
5 INSTRUCCIONES GENERALES
5.1 ASIGNACIN
Una vez declaradas las variables se les puede asignar el valor de una expresin:
Variable operador_de_asignacin expresin;
Operador Accin
Algunos ejemplos:
x = 2 ; // asigna a x el valor 2
y = 7 ; // asigna a y el valor 7
x += y ; // x es 9. y sigue siendo 7
Aunque puede no parecer muy significativo, juega un papel crucial al construir estructuras de
control ms complicadas. Muchas estructuras de control requieren una instruccin sencilla como cuerpo.
Usando una instruccin compuesta, la misma estructura de control se puede usar para controlar mltiples
instrucciones.
6.1 BUCLES
Los bucles nos ofrecen la solucin cuando queremos repetir una instruccin compuesta un nmero
determinado de veces.
6.1.1 repeat
La instruccin repeat ejecuta un bucle un nmero determinado de veces:
repeat (nmero_de_repeticiones)
{
cuerpo
}
Ejemplo:
motor[motorA] = 60;
motor[motorC] = -60;
wait1Msec(500);
6.1.2 while
La instruccin while se usa para construir un bucle condicional. La condicin se evala y si es
verdadera se ejecuta el cuerpo del bucle, a continuacin se comprueba de nuevo la condicin. El proceso
while (condicin)
{
cuerpo
}
6.1.3 do while
Una variante del bucle while es el bucle do-while. Su sintaxis es:
do
{
cuerpo
}
while (condicin)
6.1.4 for
Las sintaxis del bucle for es:
for ( valor_inicial; condicin; incremento )
{
cuerpo
}
Ejemplo:
Como vemos, el for va delante del grupo de instrucciones a ejecutar, de manera que si la
condicin es falsa, esas instrucciones no se ejecutan ni una sola vez.
Se puede omitir cualquiera de las secciones (inicializacin, condiciones o incrementos). Tambin
se pueden poner ms de una variable a inicializar, ms de una condicin y ms de un
incremento.
if (condicin) instruccin;
if (condicin)
instruccin;
if (condicin)
instruccin;
else
instruccin;
if (condicin)
{
cuerpo
}
if (condicin)
{
cuerpo
}
Obsrvese que la condicin va encerrada entre parntesis. Vanse los ejemplos a continuacin. En
el ltimo ejemplo se utiliza una instruccin compuesta para permitir que se ejecuten dos instrucciones
como consecuencia de la condicin.
if (x==1) y = 2;
if (x==1)
y = 3;
else
y = 4;
if (x==1)
{
y = 1;
z = 2;
}
6.2.2 switch
La instruccin switch sirve par elegir una opcin entre varias disponibles. No se evala una
condicin que se debe cumplir sino el valor de una variable. Dependiendo del valor se cumplir un caso u
otro. La sintaxis es:
switch (x)
{
case 1 :
// haz algo cuando x es 1
break;
case 2 :
case 3 :
// haz otra cosa cuando x es 2 3
break;
default :
// haz esto cuando x no es ni 1, ni 2 ni 3
}
Las palabras reservadas case y default no son instrucciones en s mismas sino que son
etiquetas que preceden a las instrucciones. Mltiples etiquetas pueden preceder a la misma
instruccin.
El cdigo con switch es ms cmodo de leer que con la instruccin if else. Sin embargo
switch tiene algunas limitaciones; por ejemplo, no se pueden usar condiciones en los case.
7.1 goto
La instruccin goto fuerza al programa a saltar a una posicin determinada. Las instrucciones de un
programa pueden ser marcadas precedindolas de un identificador y dos puntos, a lo que se llama
etiqueta. La instruccin goto especifica la etiqueta a la que el programa debe saltar.
goto nombre_de_etiqueta;
Por ejemplo:
mi_bucle: // etiqueta
x++;
goto mi_bucle;
El goto slo se puede usar dentro de funciones, y no se puede saltar desde una funcin a otra.
La instruccin goto debe usarse con moderacin y precaucin. En la mayora de los casos las
estructuras de control tales como if, while y switch hacen los programas ms fciles de leer
y modificar.
7.2 return
Es posible hacer que una funcin finalice antes de llegar al final de su cdigo usando la instruccin
return.
return;
7.3 break
Dentro de los bucles (por ejemplo, en un bucle while) la instruccin break puede utilizarse para
salir del bucle. La instruccin break tambin puede utilizarse para salir de la instruccin switch.
break;
7.4 continue
La instruccin continue se puede utilizar para saltar a la parte superior de la siguiente iteracin
de un bucle.
continue;
8 OPERADORES
Un operador sirve para manipular datos. Los hay de varios tipos: de asignacin, de relacin, lgicos,
aritmticos y de manipulacin de bits.
Tambin podemos asignar a varias variables el valor de otra en solo una instruccin:
a = b = c = d; // a,b,c toman el valor de d
8.2.10 Resumen
+ Suma * Multiplicacin
+= Incremento / Divisin
++ Incremento en 1 % Resto
- Resta
-= Decremento
-- Decremento en 1
>= mayor o igual que se cumple si el primero es mayor o igual que el segundo
<= menor o igual que se cumple si el primero es menor o igual que el segundo
if (a != b) Se cumple si a es distinto de b
Ejemplos de || (OR):
9 MOTORES (Salidas)
Tanto RCX como NXT tienen 3 salidas (A, B y C) a las que se pueden conectar motores o bombillas.
Con la excepcin de algunas aplicaciones concretas, generalmente se conectan motores.
%_relacin:
100 es la misma velocidad del esclavo
que la del maestro
nSyncedTurnRatio = %_relacin;
50 es la mitad
-100 es la misma velocidad pero con el
sentido de giro opuesto
Ejemplo 1:
Ejemplo 2:
10 SENSORES (Entradas)
El NXT tiene cuatro puertos de entrada (el RCX tres) a los que se pueden conectar diferentes
sensores. Hay numerosas funciones y variables para configurar estos puertos y acceder a sus lecturas.
Raw value
RCX y NXT 0 a 1024 (raw)
Valor en bruto
Touch
RCX y NXT 0 o 1 (booleano)
Toque
Temperature (legacy)
RCX C o F
Temperatura (antiguo)
Reflection (legacy)
RCX 0 a 100 ( % )
Reflexin (luz antiguo)
Rotation (legacy) 0 a 16
RCX
Rotacin (antiguo) (360 = 16, 90 = 4, )
Light active
NXT 0 a 100 ( % )
Luz activo
Light inactive
NXT 0 a 100 ( % )
Luz inactivo
Sound DB
NXT 0 a 100 ( % )
Sonido dB
Custom (sensores no
RCX y NXT Segn el sensor
fabricados por LEGO)
Usando el asistente para configuracin de sensores y motores (Motors and Sensors Setup),
RobotC genera automticamente el cdigo necesario y lo incluye al principio del programa:
Ejemplo 2:
const tSensors ojo = (tSensors) S2; //sensorLightActive
Se configura un sensor de luz activo, llamado ojo, en el puerto S2.
(*) Los motores NXT incorporan un encoder (sensor que detecta el movimiento de rotacin de un
eje). El encoder mide grados sexagesimales, de manera que devuelve un valor de 360 por cada
giro del motor. Esto permite posicionar con mucha precisin determinados movimientos. Existe
una funcin que permite leer y escribir el valor del encoder de un determinado motor:
nMotorEncoder[puerto_motor]=valor;
Ejemplos:
while (nMotorEncoder[motorA] < 720) Espera a que el motor A gire dos vueltas
11 SONIDOS
RobotC suministra una coleccin de funciones de control del altavoz del NXT y el RCX. Las
principales son las siguientes:
RCX y NXT
PlaySound(sonido); Reproduce uno de los sonidos predefinidos
del sistema.
RCX y NXT
ClearSounds(); Borra todos los comandos de sonido
existentes y en el buffer.
NXT
PlaySoundFile(nombre_archivo); Reproduce un archivo de sonido del sistema
de archivos del NXT (formato .rso).
El firmware de RobotC pone en la cola (en el buffer) hasta 10 sonidos para ser reproducidos. Esto
permite al programa iniciar la reproduccin de un sonido y continuar la ejecucin de otras instrucciones
sin tener que esperar a que acabe el sonido para continuar la ejecucin del programa. Este modo de
reproduccin es muy til en robots en los que si se espera a la completa reproduccin del sonido se
pueden tener retrasos en la reaccin de los motores ante la lectura de los sensores.
Sonidos predefinidos:
soundDownwardTones soundLowBuzz
soundException soundLowBuzzShort
Ejemplos de aplicacin:
PlaySound(soundBeepBeep); // reproduce el sonido BeepBeep
PlayTone(440, 10); // reproduce un tono de 440 Hz durante 1 s
PlaySoundFile(hola.rso); // reproduce el archivo de sonido hola.rso
Los archivos de sonido en el NXT tienen un formato especial con extensin rso y pueden ocupar un
mximo de 64 kb. Existen utilidades para transformar archivos con formato wav en archivos rso (ver el
apartado Referencias). Una vez transformado el archivo a formato wav, se debe copiar al NXT mediante la
utilidad File Management de RobotC.
12 CONTROL DE TIEMPO
El firmware del RCX y del NXT maneja un reloj interno de 32 bits. Cuenta en unidades de 1
milisegundo. Cuatro cronmetros (T1, T2, T3 y T4) estn integrados y usan esta caracterstica.
time1[cronmetro]
Almacena el valor del cronmetro especificado:
time10[cronmetro] T1, T2, T3 o T4. El valor puede ser obtenido en
unidades de 1, 10 o 100 milisegundos.
time100[cronmetro]
Ejemplos:
motor[motorC] = 100; Pone el motor C en marcha durante 1s. Despus contina con la
wait1Msec(1000); ejecucin del programa.
13 COMUNICACIONES
13.1 RCX
El RCX puede enviar y recibir mensajes simples utilizando los infrarrojos para comunicarse con otro
RCX. Un mensaje puede tener un valor desde 1 hasta 255. El ltimo mensaje recibido es guardado y puede
accederse a l mediante la variable message(). Si no ha sido recibido ningn mensaje,
message()devolver el valor 0. Debe tenerse en cuenta que, debido a la naturaleza de la comunicacin
mediante infrarrojos, no se podrn recibir mensajes mientras un mensaje se est transmitiendo.
Funciones y variables:
Ejemplos:
13.2 NXT
El sistema NXT tiene una potente capacidad de comunicacin entre dos NXT mediante el uso del
sistema inalmbrico Bluetooth que incorporan los NXT. Bluetooth es un protocolo de comunicacin
inalmbrica a corta distancia que opera en la frecuencia de radio de 2.4 GHz. El alcance mximo del
protocolo Bluetooth que incorpora el NXT es de 10 m.
Para lograr que se comuniquen dos NXT es necesario configurarlos previamente mediante la sencilla
utilidad que incluyen los propios ladrillos NXT.
Las funciones y variables que permiten la comunicacin bsica entre dos NXT son las siguientes:
No se deben enviar mensajes con una separacin menor de 30 milisegundos, pues podran perderse.
14 PANTALLA LCD
14.1 RCX
El RCX tiene una pantalla de una lnea en el que se pueden mostrar diferentes valores numricos.
Ejemplos:
14.2 NXT
El NXT est equipado con una pantalla monocroma LCD de 100 pxeles de ancho por 64 pxeles de
alto. La esquina inferior izquierda es el punto (0,0) y la esquina superior derecha es el punto (99, 63).
RobotC tiene un completo conjunto de funciones para mostrar texto y diferentes formas
geomtricas en la pantalla LCD.
Ejemplos:
aparece en la
Si se escribe este cdigo
pantalla:
nxtDisplayString(0,"Hola mundo"); Hola mundo
nxtDisplayClearTextLine(nmero_lnea);
Borra la lnea especificada en nmero_lnea.
eraseDisplay();
Borra el contenido de la pantalla.
Igual que el anterior pero se rellena con ceros el espacio hasta completar los
%06d
6 caracteres.
000007
%+6d Igual que %6d pero se incluir el smbolo de signo (+ o -). +00007
15.1 RCX
15.2 NXT
Los datos se almacenan en la RAM. Despus pueden ser copiados en un archivo flash del NXT. No se
almacenan en tiempo real en el archivo flash porque se invertiran entre 3 y 6 milisegundos en la
operacin, lo que podra perturbar la ejecucin del programa.
Hay utilidades en la interfaz de RobotC para importar el registro y mostrarlo en una ventana del PC.
Se encuentran en debug display y en NXT -> Files Management.