Espacio en Blanco es el uso de espacios

Anuncio
Introducción a la Programación • Espacio en blanco
Actividad5
Reglas RobotC (parte 1)
Accede a la Comunidad Virtual y reproduce el
video de esta lección.
Espacio en Blanco
Espacio en Blanco es el uso de espacios, tabulaciones y líneas en blanco para organizar
el código visualmente. Los Programadores usan Espacios en Blanco al agrupar fragmentos
legibles sin afectar en la lectura que la máquina hace del código. Por ejemplo, un programa
que hace avanzar al robot 2 segundos y retroceder 4, su código se lee así:
Programa sin espacio en blanco
Programa con espacio en blanco
task main()
{
bMotorReflected[port2]=1;
motor[port3]=127;
motor[port2]=127;
wait1Msec(2000);
task main()
{
bMotorReflected[port2]=1;
motor[port3]=127;
motor[port2]=127;
wait1Msec(2000);
motor[port3]=-127;
motor[port2]=-127;
wait1Msec(4000);
}
motor[port3]=-127;
motor[port2]=-127;
wait1Msec(4000);
}
46
Introducción a la Programación • Espacio en blanco
Actividad5
Ambos programas funcionan igual, sin embargo, el segundo usa espacio en blanco para
organizar el código al separar dos comportamientos principales: avanzar y retroceder.
En este caso, los saltos de renglón se usan verticalemente para separar las tareas. Los espacios en blanco horizontales y tabulaciones también son importantes. Debajo, el espacio en
blanco se usa en forma de sangría para indicar las líneas que hay en cada estructura de control
(tarea principal, repetición, sentencia si-entonces).
Programa sin espacio en blanco
task main()
{
bMotorReflected[port2]=1;
while(true)
{
if(SensorValue(touch)==0)
{
motor[port3]=127;
motor[port2]=127;
}
else
{
motor[port3]=-127;
motor[port2]=-127;
}
}
}
Programa con espacio en blanco
task main()
{
bMotorReflected[port2]=1;
while(true)
{
if(SensorValue(touch)==0)
{
motor[port3]=127;
motor[port2]=127;
}
else
{
motor[port3]=-127;
motor[port2]=-127;
}
}
}
47
Introducción a la Programación • Palabras Reservadas
Actividad5
Palabras resevadas
Motores
motor[output] = power;
Este comando indica al correspondiente motor que se encienda o apague y
simultáneamente fije su nivel de potencia.
El motor VEX tiene 8 salidas: port1, port2... hasta port8. VEX soporta niveles de potencia desde -127 (reversa) hasta 127 (avance al frente). Un nivel
0 detendrá al motor.
motor[port3]= 127; motor[port2]= -127; //port3 - Velocidad al frente
//port2 - Velocidad en reversa
bMotorReflected[output] = 1; (or 0;)
Cuando el valor del comando sea 1, este código invierte la rotación del motor.
Una vez fijado, el motor funcionará en reversa el programa entero (o hasta
que bMotorReflected[] valga cero).
Esto es muy funcional cuando se trabaja con motores montados en direcciones opuestas, permitiéndole al programador usar el mismo nivel de potencia
en cada motor.
Hay dos configuraciones: 0 es normal, y 1 es reversa. Puedes usar “true”
para 1 y “false” para 0.
Antes
motor[port3]= 127; motor[port2]= 127; //port3 - Velocidad al frente
//port2 - Velocidad en reversa
Después
bMotorReflected[port2]= 1; motor[port3]= 127;
motor[port2]= 127; //Invierte la dirección port2
//port3 - Velocidad al frente
//motorA - Velocidad al frente
48
Introducción a la Programación • Palabras Reservadas
Actividad5
Palabras resevadas
Cronometrando
VEX permite usar comandos de Espera (Wait) para insertar retrasos en el programa. También
soporta “Timers” los cuales funcionan como cronómetros y se pueden reiniciar en cuanto se
requiera reanudar la cuenta del tiempo.
wait1Msec(wait_time);
Esté código hará que el robot espere por ciertos milisegundos antes de ejecutar la siguiente
instrucción
en un programa. “wait_time” es un valor tipo entero (de 1 = 1/1000 de segundo).
El máximo valor de wait_time es 32768 o 32.768 segundos.
motor[port3]= 127;
wait1Msec(2000); motor[port3]= 0; //port3 - Velocidad al frente
//Espera 2 segundos
//port3 - apagado
wait1Msec(wait_time);
wait10Msec(wait_time);
Este código hace que el robot espere centésimas de segundo antes de ejecutar la siguiente
instrucción del programa. “wait_time” es un valor tipo entero (de 1 = 1/100 de segundo). El
máximo valor wait_time es 32768 o 327.68 segundos.
motor[port3]= 127;
wait10Msec(200); motor[port3]= 0; //port3 - Velocidad al frente
//Espera 2 segundos
//port3 - apagar
time1[timer]
Este código convierte el valor de tiempo en un número integral. La resolución de “time1” está
en milisegundos (1 = 1/1000th de segundo).
El máximo de tiempo que se puede referenciar es 32.768 segundos (~1/2 minuto) VEX tiene 4
cronómetros internos: T1, T2, T3 y T4
int x;
x=time1[T1];
//Variable de números enteros x
//Asigna x=valor para Timer 1 (1/1000 seg.)
49
Introducción a la Programación • Palabras Reservadas
Actividad
5
time10[timer]
Este código retorna el valor actual del cronómetro referenciado como un valor entero.
La resolución de “time10” está en centésimas de segundo (1 = 1/100 de segundo).
El máximo de tiempo que se puede referenciar es 327.68 segundos (~5.5 minutos)
VEX tiene 4 cronómetros internos: T1, T2, T3 y T4
int x;
x=time10[T1];
//Variable de números enteros x
//Asigna x=valor para Timer 1 (1/100 seg.)
time100[timer]
Este código retorna el valor actual del cronómetro referenciado como un valor entero.
La resolución de “time100” está en décimas de segundo (1 = 1/10 de segundo).
El máximo de tiempo que se puede referenciar es 3276.8 segundos (~54 minutos) VEX
tiene 4 cronómetros internos:T1, T2, T3 y T4.
int x;//Variable integral x
x=time100[T1];
//Asigna x=valor para Timer 1 (1/10 seg.)
Cleartimer[timer]
Este código reinicia el cronómetro a cero segundos. VEX tiene 4 cronómetros internos:T1,
T2, T3 y T4
ClearTimer(T1);
//Reinicia Timer #1
50
Introducción a la Programación • Palabras Reservadas
Actividad5
SensorValue(sensor_input)
SensorValue se usa para obtener un valor de tipo entero del puerto de sensor especificado.
Los valores corresponderán al tipo de sensor del puerto.
VEX tiene 16 entradas análogas/digitales: in1, in2... hasta in16
if(SensorValue(in1) == 1) //Si in1 (sensor de contacto) está presionado
{
motor[port3] = 127; //Velocidad al frente Motor Puerto 3
}
Tipo de Sensor
Contacto
Reflexión (Ambiental)
Rotación (Codificador Antiguo)
Potenciómetro
Seguidor de Línea (Infrarrojo)
Sonar
Codificador de cuadratura
Entradas digitales
Salidas digitales
Digital
Análogo
Rango de Valores
0o1
0 a 1023
0 a 32676
0 a 1023
0 a 1023
-2, -1, y 1 a 253
-32678 a 32768
0o1
0o1
Palabras Resevadas
Sonidos
VEX puede reproducir sonidos y tonos usando una bocina piezoeléctrica
conectada a un puerto de motor.
PlayTone(frequency, duration);
Este comando reproduce un sonido desde la bocina interna VEX a una
frecuencia específica (1 = 1 hertz) por una longitud específica (1 = 1/100
de segundo).
PlayTone(220, 500); //Reproduce un tono de 220hz por 1/2 segundo
51
Introducción a la Programación • Palabras Reservadas
Actividad5
Palabras resevadas
Radio Control
ROBOTC te permite controlar a tu robot usando entradas desde un Transmisor de Radio
Control.
bVexAutonomousMode
Establece el valor en 0 para radio habilitado ó 1 para radio deshabilitado (modo autónomo).
También puedes usar “true” para 1 y “false” para 0.
PlayTone(220, 500); //Reproduce un tono de 220hz por 1/2 segundo
bVexAutonomousMode = 0;
bVexAutonomousMode = 1; //habilita radio control
//deshabilita radio control
vexRT[joystick_channel]
Este comando recupera el valor del canal específico del cual se ha transmitido.
Si el receptor RF está conectado al Rx1, los valores siguientes aplican:
Puerto de Control
Joystick derecho, eje X
Joystick derecho, eje Y
Joystick izquierdo, eje Y
Joystick izquierdo, eje X
Botones Traseros Izquierdos
Botones Traseros Derechos
Canal Joystick
Ch1
Ch2
Ch3
Ch4
Ch5
Ch6
Posibles Valores
-127 a 127
-127 a 127
-127 a 127
-127 a 127
-127, 0, o 127
-127, 0, o 127
Si el receptor RF está conectado al Rx2, los valores siguientes aplican:
Puerto de Control
Joystick derecho, eje X
Joystick derecho, eje Y
Joystick izquierdo, eje Y
Joystick izquierdo, eje X
Botones Traseros Izquierdos
Botones Traseros Derechos
Canal Joystick
Ch1Xmtr2
Ch2Xmtr2
Ch3Xmtr2
Ch4Xmtr2
Ch5Xmtr2
Ch6Xmtr2
Posibles Valores
-127 a 127
-127 a 127
-127 a 127
-127 a 127
-127, 0, o 127
-127, 0, o 127
bVexAutonomousMode = false; //habilita radio control
while(true)
{
motor[port3] = vexRT[Ch3]; //joystick derecho, eje y
//controla al motor en puerto 3
motor[port2] = vexRT[Ch2]; //joystick izquierdo, eje y
//controla al motor en puerto 2
}
52
Introducción a la Programación • Palabras Reservadas
Actividad5
Palabras resevadas
Misceláneo
Los comandos misceláneos útiles no son parte del lenguaje C estándar.
srand(seed);
Define el valor integral de “seed” usado en el comando random() para generar
un número aleatorio. Este comando es opcional al usar el comando random(), y
arrojará la misma secuencia de números generados cada vez que se ejecuta el
programa.
srand(16); //Asigna 16 como el valor de seed
random(value);
Genera números aleatorios entre 0 y el número en el paréntesis.
random(100); //Genera un números entre 0 y 100
Palabras Resevadas
Estructuras de Control
La estructura de control en ROBOTC habilita un programa para controlar el flujo
fuera del típico estilo de arriba a abajo.
task main(){}
Crea una tarea llamada “main” necesaria en cada programa. La tarea principal es
responsable de asegurar que el código se ejecute en el programa.
while(condition){}
Usado para repetir una {sección del código} mientras cierta (condición) se
mantenga verdadera.
Un período de repetición infinito se puede crear asegurando que la condición
siempre sea verdadera, p.ejem. “1==1” o “true”.
while(time1[T1]<5000)
//Mientras el valor del cronómetro sea
{menor a 5 seg...
motor[port3]= 127;
//...el puerto3 del motor se activa al 100%
}
53
Introducción a la Programación • Palabras Reservadas
Actividad5
if(condition){}/else{}
Con este comando, el programa revisa la (condición) dentro del paréntesis
de la sentencia y ejecuta uno o dos paquetes de código. Si la (condición)
es verdadera, el código dentro de las llaves se ejecutará. Si la (condición)
es falsa, el código dentro de las llaves se ejecutará en lugar de aquél. La
sentencia “else” no se requiere cuando se utiliza una sentencia “if”.
while(time1[T1]<5000)//Mientras el valor delcronómetro sea
{menor a 5 seg...
motor[port3]= 127;
//...el puerto3 del motor corre al 100%
}
if(sensorValue(bumper) ==1)
//el sensor de choque es usado como...
{//...la condición
motor[port3]= 0; //si está presionado se detiene el motor
en el puerto 3
}
else
{
motor[port3]= 127; //si no está presionado se activa el
motor del puerto 3.
}
54
Introducción a la Programación • Palabras Reservadas
Actividad5
Palabras resevadas
Tipos de datos
Diferente tipo de información requiere distintos tipos de variables para
contenerla.
int
Este tipo de dato se usa para almacenar valores enteros en un rango desde
-32768 a 32768.
int x; x = 765; //Declara la variable entera x
//Almacena 765 dentro de x
Este código también se puede escribir así:
int x = 765; //Declara la variable entera x y...
//...la inicia en un valor de 765
bool
Este tipo de dato se usa para almacenar valores booleanos tanto 1 (verdadero)
o 0 (falso).
bool x; x = 0; //Declara la variable booleana x
//establece x a 0
char
Este tipo de dato se usa para almacenar un sólo caracter ASCII, especificado
entre comillas sencillas.
char x; //Declara la variable caracter x
x = ‘J‘; //Almacena el caracter J dentro de x
Reglas ROBOTC Parte 2
Accede a la Comunidad Virtual y reproduce el
video de esta lección.
55
Descargar