Autor Tema: Brazo Robotico  (Leído 1719 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Gedeon

  • PIC10
  • *
  • Mensajes: 23
Brazo Robotico
« en: 13 de Noviembre de 2011, 03:41:46 »
buen dia a todos, soy nuevo en CCS, estoy trabajando en un brazo robotico de 2 grados de libertad y hasta ahora todo lo e hecho en asm, estoy mudando el proyecto a C que me facilita mucho mas el trabajo pero hasta ahora tengo 3 percanses: el primero el menu del brazo el cual es el menu principal donde se decide si se va a grabar una accion o a ejecutar una secuencia si se esta en grabar debo escoger el motor a utilizar y la accion a ejecutar, estos sub_menus son los que no e podido estructurar aun, 2 a la hora de reproducir los movimientos e tenido detalles y 3 el control del codo a traves del timer con un servo el cual va a ir variando segun decir el usuario. se que es mucho pedir pero si alguien puede orientarme, guiarme, darme una trama o una mano agradecido de antemano

Desconectado falflores

  • PIC16
  • ***
  • Mensajes: 173
    • Control, electrónica y programación en español
Tips para manejar un menú
« Respuesta #1 en: 13 de Noviembre de 2011, 07:42:04 »
Hola Gedeon, bienvenido al C, que hará que programar sea como un paseo por el parque, en comparación con su contraparte en ensamblador.

Yo te puedo dar unos tips para estructurar un menú. Lo que yo hago para estructurar un menú, por ejemplo en un LCD alfanumérico es manejar niveles, el nivel 0 será tu menú principal, en el cuál se dará a escoger al usuario entre los niveles 1, 2 y 3, por ejemplo; en el nivel 1 se puede dar a escoger entre los subniveles 1-1, 1-2 y 1-3, los mismo para el 2 y el 3, asi, dependiendo de cuantos submenus tengas; además yo lo que hago es manejar la parte gráfica y la parte de toma de desiciones por separado, como por ejemplo:

Código: [Seleccionar]
void error_message()     // Mesaje de error
{
printf(lcd_putc,"\f<<<<<<<ERROR>>>>>>>>\n\n");
printf(lcd_putc,"Seleccion incorrecta");
delay_ms(500);
}

/* Construcción del menú en LCD 20x4
En esta parte solamente se realiza la escritura en el LCD, dependiendo del
nivel que dicte la parte de control, esta es la parte gráfica.
*/
if(flag_lcd==1) // Si la bandera de escritura en LCD está seteada
{
flag_lcd=0; // Resetea la bandera de escritura para escribir solo una vez
switch(menu_level) // Determina en qué nivel del menú se encuentra
{
case 0: // Menú principal (Nivel 0)
printf(lcd_putc,"\f<<<<<<<<MENU>>>>>>>>\n");
printf(lcd_putc,"1 - PRENDER LEDs\n");
printf(lcd_putc,"2 - APAGAR LEDs\n");
printf(lcd_putc,"3 - TOGGLING LEDs");
break;
case 1: // Menú prender LEDs (Nivel 1)
printf(lcd_putc,"\f<<<<PRENDER LEDs>>>>\n");
printf(lcd_putc,"1 - LED B0 = %s\n",LED_B0_state);
printf(lcd_putc,"2 - LED B1 = %s\n",LED_B1_state);
printf(lcd_putc,"3 - LED B2 = %s",LED_B2_state);
break;
case 2: // Menú apagar LEDs (Nivel 2)
printf(lcd_putc,"\f<<<<APAGAR LEDs>>>>>\n");
printf(lcd_putc,"1 - LED B0 = %s\n",LED_B0_state);
printf(lcd_putc,"2 - LED B1 = %s\n",LED_B1_state);
printf(lcd_putc,"3 - LED B2 = %s",LED_B2_state);
break;
case 3: // Menú toggling LEDs (Nivel 3)
printf(lcd_putc,"\f<<<TOGGLING LEDs>>>>\n");
printf(lcd_putc,"1 - LED B0 = %s\n",LED_B0_state);
printf(lcd_putc,"2 - LED B1 = %s\n",LED_B1_state);
printf(lcd_putc,"3 - LED B2 = %s",LED_B2_state);
break;
}
}
/* Control del menú
  Esta parte controla lo que se muestra en el menú, dependiendo del nivel en
el que se esté, se determinan los parámetros que se escogen
*/
if(flag_receive_data==1) // Si la bandera de dato entrante se seteo...
{
flag_receive_data=0; // Resetea la bandera de dato entrante
flag_lcd=1; // Setea bandera de escribir en LCD
switch(menu_level) // Determina el nivel del menú y sus opciones
{
case 0: // Menu raíz escogido - nivel 0
switch(data) // Determina que opción del nivel 0 se escogió
{
case '1': // Prender LEDs
menu_level=1;
break;
case '2': // Apagar LEDs
menu_level=2;
break;
case '3': // Toggling LEDs
menu_level=3;
break;
default: // Ninguna opción válida
error_message();
}
break;
case 1: // Prender LEDs - nivel 1
switch(data) // Determina que opción del nivel 1 se escogió
{
case '1':
output_high(PIN_B0);
break;
case '2':
output_high(PIN_B1);
break;
case '3':
output_high(PIN_B2);
break;
case 'b': case 'B': case ESC: case BAC: // Regresar al menú raíz
menu_level=0;
break;
default: // Ninguna opción válida
error_message();
}
break;
case 2: // Apagar LEDs - nivel 2
switch(data) // Determina que opción del nivel 1 se escogió
{
case '1':
output_low(PIN_B0);
break;
case '2':
output_low(PIN_B1);
break;
case '3':
output_low(PIN_B2);
break;
case 'b': case 'B': case ESC: case BAC: // Regresar al menú raíz
menu_level=0;
break;
default: // Ninguna opción válida
error_message();
}
break;
case 3: // Toggling LEDs - nivel 3
switch(data) // Determina que opción del nivel 3 se escogió
{
case '1':
output_toggle(PIN_B0);
break;
case '2':
output_toggle(PIN_B1);
break;
case '3':
output_toggle(PIN_B2);
break;
case 'b': case 'B': case ESC: case BAC: // Regresar al menú raíz
menu_level=0;
break;
default: // Ninguna opción válida
error_message();
}
break;
}
}



El ejemplo que te puse es de un menú que da a escoger entre prender, apagar o cambiar de estado 3 LEDs, y para regresar al menú principal se puede presionar ESC, BACKSPACE, 'b' o 'B'. Si el usuario escoge una opción no válida, entonces se muestra un mensaje de error en el LCD por 500ms y se vuelve a mostrar el menú donde estaba.

Espero que te puedas dar mejor una idea con esta info. Para que te podamos orientar más, creo que debes explicar más detalladamente en que área específica te atoras. Saludos!
Los invito a mi blog "Control, electrónica y programación en español" www.robotnias.blogspot.com

Desconectado Gedeon

  • PIC10
  • *
  • Mensajes: 23
Brazo Robotico
« Respuesta #2 en: 20 de Noviembre de 2011, 14:12:11 »
esto es lo que tengo hasta ahora del brazo robotico, ya esta el menu para grabar y ejecutar los movimientos, en la parte de ejecuccion solo falta abrir y cerrar la pinta, ya el hombro esta funcional y el codo. el control del brazo sera desde puerto C, desde c0 hasta c3 esta el hombro, en c6 el codo y en c7 la pinza. les adjunto una simulacion.