miércoles, 25 de julio de 2012

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