Programa en NXC para un prototipo de ascensor de 4 pisos
construido con el Kit de Lego NXT 1.0
AUTOR: Eduardo Ventura
Blog : http://aularobotica.blogspot.com
En este algoritmo se utiliza la subrutina, las estructuras
de control if (condicional) y while (true) (loop infinito), además se crea
la ecuacion "c=(a-b)*360" que permite determinar si el ascensor debe subir
o bajar y cuantos grados, "a" representa el número de piso al que se
dirige el ascesor y "b" la posición en la que encuentra en cada momento,
si el resultado es (+) sube y (-) baja, se multiplica por 360 para aumentar
el número de grados a girar, todo dependerá del modelo construido.
*/
// ********INICIO DEL PROGRAMA ***********
int a, b, c; //Declaración de las variables.
//*********INICIO DE LA SUBRUTINA********
/* Creamos una subrutina llamada "cabine" para reducir la cantidad
de líneas y el tamaño del programa, en la subrutina se declara la
variable pw que representa la potencia del motor, y la cantidad de
grados a girar se representa por las cantidades 360 y -360 el signo
negativo indica giro en sentido contrario */
sub cabine(int pw) //esta es la subrutina con la variable entera pw
{
RotateMotor(OUT_B,pw,360); Wait (1000);
RotateMotor(OUT_B,pw,-360);
}
//*************TAREA PRINCIPAL*************
task main ()
/* En esta parte indicamos los sensores que utilizamos
y sus respectivos puertos*/
{
SetSensorTouch(IN_1);
SetSensorTouch(IN_2);
SetSensorTouch(IN_3);
SetSensorTouch(IN_4);
/* Este loop infinito se ejecuta hasta que se decida
apagar el nxt*/
while (true)
{
/* Creamos una condicional para saber cual sensor
de touch fue tocado, y creamos la variable "a" asignando
un valor en cada caso, este valor de "a" conjuntamente
con la ecuación "c=(a-b)*360" nos permite calcular la
cantidad de grados a girar y en que sentido */
//**INCIO DE LA ESTRUCTURA DE CONTROL if ( Condiconal )***
if (SENSOR_1 == 1)
// si el valor es igual "1" significa que se ha pulsado algún botón touch
{
a=0;c=(a-b)*360;
RotateMotor(OUT_A,40,c);
b=a; // el valor de "a" pasa a "b"
cabine(40); // Esta es la subrutina que se ejecuta para un valor de 40
}
if (SENSOR_2 == 1)
{
a=1;c=(a-b)*360;
RotateMotor(OUT_A,40,c);
b=a;
cabine(40);
}
if (SENSOR_3 == 1)
{
a=2;c=(a-b)*360;
RotateMotor(OUT_A,40,c);
b=a;
cabine(40);
}
if (SENSOR_4 == 1)
{
a=3;c=(a-b)*360;
RotateMotor(OUT_A,40,c);
b=a;
cabine(40);
}
}
} // fin del programa
// NOTA:
/* Estoy aprendiendo a programar en NXC, este es uno de mis primeros programas, lo hice como un reto.
todas las sugerencias seran bie acogidas, las espero. Gracias*/
No hay comentarios:
Publicar un comentario