Autor: Fernando Meza
Competencia: Trabajo en Equipo
Palabras Clave: NXC
Introducción
Competencia: Trabajo en Equipo
Palabras Clave: NXC
Introducción
Un robot recorre la meseta de una montaña, y su misión es detectar las alturas de los precipicios de ésta, información que servirá para escaladores, paracaidistas, deportes extremos en general.
Implementación
- La meseta de la montaña estará dada por la mesa de competición sin paredes.
- Cada vez que el robot detecte el fin de la mesa, deberá detenerse, y medir la altura del “precipicio”. Este dato será registrado y guardado en un ARRAY de enteros.
- Después de medir, debe (al azar) buscar otro borde de la mesa, y realizar la misma operación.
- El robot finaliza su trabajo de búsqueda cuando registró la medición del 4to “precipicio”.
- Finalizada la búsqueda genera un reporte que guardará en un archivo (WriteLnString).. Un ejemplo del formato del reporte sería:
REPORTE PITFINDER
--------------------
Precipicio 1 ==> 20 mts
Precipicio 2 ==> 10 mts
Precipicio 3 ==> 30 mts
Precipicio 4 ==> 20 mts
- Al final, deberá mostrar en el visor del NXT el reporte de los precipicios anteriormente guardado en el archivo, a través de la lectura del mismo (ReadLnString).
Codigo NXC Para el resultado del Ejercicio.
#define LUZ 40 // Definimos El umbral de luz
#define UMBRAL 80 // Definimos el umbral de sonido
int choque=0 ; // iniciamos el contador choque en 0
int puntonegro=0; // iniciamos el contador puntonegro en 0
int pote=25 ; // iniciamos la potencia inicial en 25
// Motor derecho A
// Motor Izquierdo B
#define UMBRAL 80 // Definimos el umbral de sonido
int choque=0 ; // iniciamos el contador choque en 0
int puntonegro=0; // iniciamos el contador puntonegro en 0
int pote=25 ; // iniciamos la potencia inicial en 25
// Motor derecho A
// Motor Izquierdo B
inline int GiroPotencia (int t, string direccion, string evento){ // Inicio del // Parametro
if(evento=="choque" ){ //Si el evento=choque
OnRev(OUT_AB,40); //Avanzar a una potencia de 40
Wait(t); // Esperar tiempo
RotateMotor(OUT_A,40,180); // Rotar el motor girar en 180º Wait(t);} // Esperar un tiempo
if(evento=="choque" ){ //Si el evento=choque
OnRev(OUT_AB,40); //Avanzar a una potencia de 40
Wait(t); // Esperar tiempo
RotateMotor(OUT_A,40,180); // Rotar el motor girar en 180º Wait(t);} // Esperar un tiempo
if(evento=="puntonegro" ){ // Si evento =punto negro
OnRev(OUT_AB,40); // Avanzar en una potencia de 40
Wait(t); // Esperar un un tiempo
OnRev(OUT_AB,40); // Avanzar en una potencia de 40
Wait(t); // Esperar un un tiempo
int Grados; // Definimos Grados
Grados=Random(180); // Grados= un valor de 0 a 180º
if (direccion=="d" ){ // Si dirección = a d(derecha)
RotateMotor(OUT_B,40,Grados); // Rotar motor B potencia 40 en //Xgrados
Wait(t);} // Esperar tiempo
else { // En el caso contrario
RotateMotor(OUT_A,40,Grados); // Rotar motor A potencia 49 en //X grados
Wait(t);}
Grados=Random(180); // Grados= un valor de 0 a 180º
if (direccion=="d" ){ // Si dirección = a d(derecha)
RotateMotor(OUT_B,40,Grados); // Rotar motor B potencia 40 en //Xgrados
Wait(t);} // Esperar tiempo
else { // En el caso contrario
RotateMotor(OUT_A,40,Grados); // Rotar motor A potencia 49 en //X grados
Wait(t);}
}
} //Terminar parámetro Giropotencia
} //Terminar parámetro Giropotencia
task main(){
SetSensorTouch(IN_2); //Sensor de Tacto.
SetSensorLight(IN_3); //Sensor de Luz
SetSensorSound(IN_4); //Sensor de Sonido.
SetSensorLight(IN_3); //Sensor de Luz
SetSensorSound(IN_4); //Sensor de Sonido.
while (Sensor(IN_4)<UMBRAL){ //Entra en el ciclo Sensor sonido>Umbral
OnFwd(OUT_AB,pote); // Avanzar potencia
if(Sensor(IN_2)==1){ // Si sensor Tacto=1
choque++; // Contador choque súmele 1
if(pote>30){ // Si pote >30
pote=pote-10;} // A pote réstele 10
GiroPotencia(1500,"d" ,"choque" ); //GiroPotencia tiempo 1500 //derecha eventochoque
OnFwd(OUT_AB,pote); // Avanzar potencia
if(Sensor(IN_2)==1){ // Si sensor Tacto=1
choque++; // Contador choque súmele 1
if(pote>30){ // Si pote >30
pote=pote-10;} // A pote réstele 10
GiroPotencia(1500,"d" ,"choque" ); //GiroPotencia tiempo 1500 //derecha eventochoque
}
if(Sensor(IN_3)< LUZ){ // si Sensor de luz es menor a LUZ
puntonegro++; // Contador puntonegro súmele 1
if(pote<100){ // Si pote <100
pote=pote+10;} // pote sumele10
if(Sensor(IN_3)< LUZ){ // si Sensor de luz es menor a LUZ
puntonegro++; // Contador puntonegro súmele 1
if(pote<100){ // Si pote <100
pote=pote+10;} // pote sumele10
int dir; // Definimos la variable dir
dir=Random(1); // Dir se define en un valor random de d y i
if (dir==1) // Si dir=1
GiroPotencia(1500,"d" ,"puntonegro" ); // GiroPotencia Tiempo //15000 Derecha
else // En el caso contrario
GiroPotencia(1500,"i" ,"puntonegro" ); // GiroPotencia Tiempo //15000 Izquierda
dir=Random(1); // Dir se define en un valor random de d y i
if (dir==1) // Si dir=1
GiroPotencia(1500,"d" ,"puntonegro" ); // GiroPotencia Tiempo //15000 Derecha
else // En el caso contrario
GiroPotencia(1500,"i" ,"puntonegro" ); // GiroPotencia Tiempo //15000 Izquierda
}
} // Termino del main
Off(OUT_AB); //Apagar motores
TextOut(30,50,"puntonegro="); // Coordenadas para mostrar por pantalla
NumOut(50,40,puntonegro); // Los valores expuestos en las variables
TextOut(30,20,"choque"); // De los contadores de Choque y Puntonegro
NumOut(50,10,choques);
Wait(90000) ; // Esperar 90000 milisegundos
NumOut(50,40,puntonegro); // Los valores expuestos en las variables
TextOut(30,20,"choque"); // De los contadores de Choque y Puntonegro
NumOut(50,10,choques);
Wait(90000) ; // Esperar 90000 milisegundos
} //Termino Del Programa
Conclusión
El objetivo principal fue obtenido correctamente ya que el robot recorrio la meseta de una montaña (mesa de practica) , y su misión fue detectar las alturas de los precipicios de ésta Al final de la mesa avian unos cubos los cuales se trataba de simular la altura de los precipicios, esta información servirá para escaladores, paracaidistas, deportes extremos en general.
No hay comentarios:
Publicar un comentario