Programa en NXC para un prototipo de ascensor de 4 pisos construido con el Kit de Lego NXT 1.0

/*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;
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);
cabine(40);

}

/* En este punto se produce un intercambio de del valor
de la variable, el valor de la variable "a" que representa la posición final
pasa a la varibale "b" */

b=a;       // el valor de "a" pasa a "b"

}
}    // 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*/

Vistas: 658

Comentario

¡Tienes que ser miembro de Red Robótica Latinoamericana para agregar comentarios!

Únete a Red Robótica Latinoamericana

© 2018   Creada por Red Robótica Latinoamericana.   Con tecnología de

Insignias  |  Informar un problema  |  Términos de servicio