taller nxc cr
DESCRIPTION
Taller de Programacion robotica nxc aplicada a LegoTRANSCRIPT
Introducción
PrerrequisitoEl taller está orientado a alumnos con previa orientación a leguajes de programación imperativa como C, Pascal, NQC, etc.
Objetivos• Al finalizar los alumnos deben ser capaz de
diseñar y programar algoritmos basados en NXC.
• Programar funciones para el lego NXT.
BricxCC es un entorno de programación que permite compilar y cargar un programa al lego NXT.
Bricx Command Center
Compiler Download Run Stop
Preprocesador se realiza antes de compiladar el programa, agregando librerias o cambiando macros, se antepone #
#define nombre valorSe ocupa para generar macros, es decir, cambiará lo que se define por su valor. Esto puede simplificar cuando hay una constante o procedimiento que se utiliza repetidas veces
Ejemplo:#define t5_seg 5000#define Sensor2
(Sensor(S2)+Sensor(S2)+Sensor(S2))/3
Estructura de un programa NXC
Preprocesador
NXC soporta multihebras, es decir puede realizar varios procesos en paralelo. Se crea una hebra con la palabra reservada task, un programa tienen que tener un task principal del cual comienza el programa.
Estructura de un programa NXC
Task
Útil para agrupar un conjunto de instrucciones en una sola función, que puede ser convocado cuando sea necesario.
retorno_funcion nombre_funcion (lista_argumentos){
// cuerpo de la funcion.}
Estructura de un programa NXCFunciones
Nombre Tipo Información
bool 1 ó 0, verdadero o falso
char caracteres
int Entero 16 bits con signo, –32768 a 32767
unsigned int Entero 16 bits sin signo, 0 a 65535
long Entero 32 bits con signo,-2147483648 al 2147483647
unsigned long Entero 32 bits sin signo,0 a 4294967295
string Arreglo de caracteres, palabra
arrays Arreglos de cualquier tipo
Algunas variables
tipo nombre_variable ; //variable sin valortipo nombre_variable = expresión ; //variable con valor
Ejemplo:
int x; // x de tipo entero sin valor inicialint y = 2; // y de tipo entero con valor inicial igual a 2char ch = ‘a’; // ch es igual a letra ‘a’ de tipo caracter x = 1; // x es igual a 1x = y; // x es igual a yy++; // y se suma 1, y = y + 1;
Declaración de variables
if (condicion) consecuenciaif (condicion) consecuencia
else alternativa
Ejemplo:if (x==1) y = 2;
if (x==1) y = 3; else y = 4;
if (x==1) {
y = 1; z = 2;
}
Estructuras de controlif
do {cuerpo} while (condicion)
Ejemplo:do{
x = x+1;y = y*2;
}while(x < 10);
Estructuras de controldo while
for( instrucion_inicial ; condicion ; incremental_instruccion) {
cuerpo}
Ejemplo: for se puede escribir como while:
x=0;while (x<10){
y=x*2;x++;
}
for (x = 0 ; x < 10 ; x++){
y = x*2;}
Estructuras de controlfor
switch (expresion) case constante_expresion : consecuenciadefault : consecuencia
Ejemplo:switch (x)
case 1: x -- ;if (x == 0) break;
case 2: x+=2;default: x = 0;
Estructuras de controlswitch
API: es el conjunto de funciones que ofrece cierta biblioteca para ser utilizado y conseguir una abstracción a la programación.
• Características Generales• Módulos de Salida (output)• Módulos de Entrada (input)• Comunicación Bluetooth• Mas APIs
NXT API
• Funciones de Tiempo• Wait(time) // 1000 = 1 segundo• x = CurrentTick()
• Funciones Numéricas• x = Random(n)
• Funciones LCD• TextOut(x, y, msg, clear = true)• NumOut(x, y, value, clear = true)
• Funciones Sonido• PlayTone(frequencia, duracion)
NXT APICaracterísticas
Generales
NXT APIMódulos Salida
Servomotor:
Permite dar movimiento. Este nuevo motor, tiene incorporado un sensor de rotación, lo que permite dar giros mas precisos.
ServoMotores
1. Realizar un programa en NXC, para que el lego:- avance por 5 segundos- luego gire en 90° a la derecha- avance un tiempo aleatorio entre 5 y 10 segundos y luego detenerse y emitir un triple bip.
Actividad
Tipos y modos
• SetSensorType(puerto, const type) • SENSOR_TYPE_TOUCH NXT/RCX sensor
tacto• SENSOR_TYPE_LIGHT RCX sensor luz• SENSOR_TYPE_LIGHT_ACTIVE NXT sensor luz
• SetSensorMode(puerto, const mode)• SENSOR_MODE_RAW raw valor de 0 a
1023• SENSOR_MODE_BOOL boolean valor (0 ó 1)• SENSOR_MODE_PERCENT valor de 0 a 100
NXT APIMódulos de
Entrada
• SetSensorLight(puerto)• SetSensorSound(puerto)• SetSensorTouch(puerto)• SetSensorLowspeed(puerto)
Tipos y modos
NXT APIMódulos de
Entrada
2. un programa en NXC, para que el lego:- siga una línea negra por la derecha.- si el US detecta algo a 10 cm retroceder.- si el sensor tacto es presionado, detenerse.
Actividad
• Slave
int recibir;int enviar = 1;ReceiveRemoteNumber (inbox1, true,
recibir)SendRemoteNumber (0, outbox1, enviar)
Comunicación Bluetooth
• Master
int recibir;int enviar = 1;ReceiveRemoteNumber (inbox1, true,
recibir)SendRemoteNumber(nxt, outbox1,enviar)
Comunicación Bluetooth
3. En dos grupos, realizar conexión bluetooth, para que el lego:- cuando se presione el sensor de tacto del master, enviara un numero “1” al slave para que este avance.- cuando presione dos veces seguidas, el master enviará un numero 2, para que el slave se detenga.
Actividad
• Sensor Hitechinc Color RGB
• Sensor Hitechinc Compás Electromagnético (brújula)
• Sensor Hitechinc Acelerómetro
Mas APIs
long color, color_r, color_g , color_b;
SetSensorLowspeed(puerto);
ReadSensorHTColor(puerto, color, color_r, color_g, color_b);
Mas APIsSensor Hitechinc
Color RGB