55
Taller Programación NXC aplicada a Lego Mindstorm NXT

Taller NXC Cr

  • Upload
    pitzia

  • View
    29

  • Download
    0

Embed Size (px)

DESCRIPTION

Taller de Programacion robotica nxc aplicada a Lego

Citation preview

Taller Programación NXC aplicada a

Lego Mindstorm NXT

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.

Lego Mindstorm 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

Comentarios

• Preprocesador• Task• Funciones

Estructura de un programa NXC

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

Estructura de un programa NXC

Ejemplo funciones

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

Ejemplo de variables y su

ámbito

NXC tiene palabras reservadas que no se pueden ocupar para nombrar variables.

Palabras reservadas

• if• while• do while• for• repeat• switch

Estructuras de control

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

while (condicion) {cuerpo}

Ejemplo:while(x < 10){

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

}

Estructuras de controlwhile

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

repeat (expresion) {cuerpo}

ejemplo:

repeat (3){

x+=2; //x=x+2}

Estructuras de controlrepeat

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

• true• false• x• !x• x == 1 • x != 1• x < 1• x <= 1• x > 1• x >= 1• x && y• x || y

Condiciones

El NXTiniciar un programa

El NXTiniciar un programa

El NXTiniciar un programa

El NXTiniciar un programa

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

3 salidas

OUT_A

OUT_B

OUT_C

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

• OnFwd(puerto,velocidad)• OnRev(puerto,velocidad)• Off(puerto)

Ejemplo:

NXT APIMódulos de

Salida

• RotateMotor( puerto, velocidad, grados)

Ejemplo:

NXT APIMódulos de

Salida

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

NXT APIMódulos de

Entrada

4 entradas

SENSOR_1 o S1

SENSOR_2 o S2

SENSOR_3 o S3

SENSOR_4 o S4

NXT APIMódulos de

EntradaSensores

NXT APIMódulos de

EntradaSensores

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

• x = Sensor(n)• x = SensorUS(n)

Información de Sensor

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• Master

Comunicación Bluetooth

• 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

El NXTcomunicación

El NXTcomunicación

El NXTcomunicación

El NXTcomunicación

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

Mas APIsSensor Hitechinc

Color RGB

SetSensorLowspeed(puerto)

x = SensorHTCompass(puerto)

Mas APIsSensor Hitechinc

Compás

Mas APIsSensor Hitechinc

Compás

SetSensorHTGyro(port)

x = SensorHTGyro(port,offset)

Mas APIsSensor Hitechinc

Gyroscope

Mas APIsSensor Hitechinc

Gyroscope