Atención

Como consecuencia de la incorporación de un segundo módulo ultrasonidos, el grupo G6C de motores ha cambiado. Ahora tiene asignados los puertos 12, 13 y 16. Los dos primeros no varían respecto a la situación inicial, en cambio, el último se utiliza en lugar del anterior puerto 14 y corresponde al codo del brazo derecho. El puerto 14 así como el 15, que constituyen el puerto Sonar 7 pasan a ser utilizados para ultrasonidos.

Documentación Disponible

Para acceder al programa deseado solo teneis que hacer click en el vínculo y en la página que os direcciona clickear en "Click here to start download". La memoria colgada es una versión provisional a falta de la definitiva.

sábado, 31 de marzo de 2007

26 de Marzo - Software

Durante la jornada de hoy se han desarrollado dos programas, uno escrito en C para el envió de comandos por el puerto RS232 del Coldfire y otro en lenguaje BASIC para la recepción de dichos comandos por el Robonova.
El programa en C para el Coldfire se estructura en tres partes:
La primera se encarga de leer las teclas pulsadas del teclado matricial

//------------------------------------------------------
// char teclado(void)
//
// Descripción:
// Explora el teclado matricial y devuelve la tecla
// pulsada
//------------------------------------------------------
char teclado(void)
{

BYTE fila, columna, fila_mask;
static char teclas[4][4] = {{"123C"},
{"456D"},
{"789E"},
{"A0BF"}};
// Bucle de exploración del teclado
while(TRUE){

// Excitamos una columna
for(columna = NUM_COLS - 1; columna >= 0; columna--){
set_puertoS(EXCIT << style="color: rgb(255, 255, 153);"> // Se envía la excitación de columna
retardo(1150); // Esperamos respuesta de optoacopladores

// Exploramos las filas en busca de respuesta
for(fila = NUM_COLS - 1; fila >= 0; fila--){
fila_mask = EXCIT << style="color: rgb(255, 255, 153);">// Máscara para leer el bit de la fila actual
if(lee_puertoE() & fila_mask){ // Si encuentra tecla pulsada,
while(lee_puertoE() & fila_mask); // Esperamos a que se suelte
retardo(1150); // Retardo antirrebotes
return teclas[fila][columna]; // Devolvemos la tecla pulsada
}
}
// Siguiente columna
}
// Exploración finalizada sin encontrar una tecla pulsada
}
// Reiniciamos exploración
}


La segunda escribe por la pantalla LCD la acción que va a ejecutar el robot

// Situamos el cursor en la posición adecuada
if(teclasEscritas++ >= MAX_TECLAS){ // Si hemos llenado una línea,
if(primeraLinea){ // Si era la línea 1,
LCD_inst(LIN_2LCD); // cambiamos a la línea 2
}else{ // Si no,
LCD_inst(CLR_DISP); // Limpiamos el display
LCD_inst(LIN_1LCD); // y volvemos a la línea 1
}
// Actualizamos variables de estado
primeraLinea = !primeraLinea;
teclasEscritas = 1;
}
LCD_dato(tecla); // Escribimos en el display la tecla pulsada


Y la última se encarga de enviar la tecla pulsada por el puerto RS232


/* ------------------------------------------------------------------------------
Metodo que se encarga de enviar por el puerto serie los datos pasados como
parametro
------------------------------------------------------------------------------- */
void enviaSerie(char* mensaje){
while(*mensaje){ //Mientras haya datos que enviar
//Comprobamos estado del puerto
BYTE estado_tx = mbar_readByte(MCFSIM_USR1);
estado_tx = estado_tx & 0x04;
if(estado_tx != 0x04) continue;
mbar_writeByte(MCFSIM_UTB1,*mensaje++); //enviamos
retardo(RET_3MS);
}
mbar_writeByte(MCFSIM_UTB1,0x0D);

}

El funcionamiento del programa consiste en un bucle que esta a la espera de que se pulse alguna tecla, cuando esto sucede se imprime por la pantalla LCD el mensaje que corresponda con la acción que va a realizar el robot y envía la tecla pulsada por el puerto RS232 del Coldfire volviendo de nuevo a su estado inicial esperando una nueva pulsación. (El código fuente completo de este programa estará disponible en unos días en la sección de programas)
Por otro lado el programa que controla al Robonova esta a la espera de recibir algún comando por el puerto serie del robot, cuando esto sucede identifica la tecla que se ha enviado y dependiendo de esta se ejecuta una acción u otra.

'Definimos teclas
adelante="2"

derecha="6"
izquierda="4"
medida="5"

'Comprobamos datos recibidos y ejecutamos
Retry: ERX 9600,datos,Retry
IF datos=adelante THEN
GOSUB Caminar
END

IF datos=derecha THEN
GOSUB Giro_dch
END

IF datos=izquierda THEN
GOSUB Giro_izq
END

IF datos=izquierda THEN
GOSUB Adquisicion_ultrasonidos
GOSUB envia_medida

No hay comentarios: