Beruflich Dokumente
Kultur Dokumente
Inicialización de puertos
SI
Mostrar en LCD Transmitir carácter
Botón Arriba
“ARRIBA” ‘C’
NO
NO
NO
NO
NO
Código del transmisor
//Declaración de constantes //Prototipo de funciones
#define Centro 0 int Obtener_Boton(void);
#define Arriba 1
#define Abajo 2 //Programa principal
#define Izquierda 3 int main(void)
#define Derecha 4 {
#define Otros 5 //Se habilita las interrupciones globales
sei();
//Libreias a usar
#include <avr/io.h> //Se muestra un mensaje a través del LCD
#include <avr/interrupt.h> PGM_P statetext = PSTR("AVR BUTTERFLY");
#include <avr/pgmspace.h>
#include <avr/delay.h> // Disable Analog Comparator (power save)
#include <inttypes.h> ACSR = (1<<ACD);
//Librerias a usar // Disable Digital input on PF0-2 (power save)
#include <pololu/3pi.h> DIDR0 = (7<<ADC0D);
#include <pololu/orangutan.h>
// Enable pullups
//Librerias a usar que no pertenecen al entorno PORTB = (15<<PB0);
#include "mydefs.h" PORTE = (15<<PE4);
#include "LCD_functions.h"
#include "LCD_driver.h"
#include "button.h"
#include "usart.h"
//Lazo infinito
while (1)
{
// Initialize pin change interrupt on joystick
_delay_ms(50); // TIEMPO MINIMO DE
Button_Init();
RETARDO DEL HM-TR ANTES DE ENVIAR OTRO
DATO
// initialize the LCD if (statetext)
LCD_Init(); {
LCD_puts_f(statetext, 1);
// set Clock Prescaler Change Enable LCD_Colon(0);
CLKPR = (1<<CLKPCE); statetext = NULL;
// set prescaler = 8, Inter RC 8Mhz / 8 = 1Mhz }
CLKPR = (0<<CLKPS1) | (1<<CLKPS0);
//Se espera a que sea presionado un botón
//Configuración del USART a 52= 9600 baudios input = Obtener_Boton();
USART_Init(52);
//Se realiza una determinada acción según el
if (statetext) botón presionado
{ switch (input)
LCD_puts_f(statetext, 1); {
LCD_Colon(0); case Centro: // PRESIONO EL BOTON
statetext = NULL; CENTRO
} statetext = PSTR("CENTRO");
Usart_Tx('S');
break;
case Derecha: // PRESIONO EL BOTON DERECHA /*
statetext = Función que retorna un valor entero correspondiente
PSTR("DERECHA"); al botón
Usart_Tx('R'); presionado en el JoyStick
break; */
case Izquierda: // PRESIONO EL BOTON int Obtener_Boton(void)
IZQUIERDA { int Temp1;
statetext =
PSTR("IZQUIERDA"); //PB4-->O Centro
Usart_Tx('L'); //PB6-->A Arriba
break; //PB7-->B Abajo
case Arriba: // PRESIONO EL BOTON //PE2-->C Izquierda
ARRIBA //PE3-->D Derecha
statetext = PSTR("ARRIBA");
//Centro
Usart_Tx('U'); Temp1=(PINB) & 0b00010000;
break; if(Temp1==0b00000000)
case Abajo: // PRESIONO EL BOTON ABAJO {
statetext = PSTR("ABAJO"); sei();
Usart_Tx('D'); return Centro;
break; }
default:
break; //Arriba
} Temp1=PINB & 0b01000000;
} if(Temp1==0b00000000)
return 0; {
} sei();
return Arriba;
}
//Abajo
Temp1=PINB & 0b10000000;
if(Temp1==0b00000000)
{
sei();
return Abajo;
}
//Izquierda
Temp1=PINE & 0b00000100;
if(Temp1==0b00000000)
{
sei();
return Izquierda;
}
//Derecha
Temp1=PINE & 0b00001000;
if(Temp1==0b00000000)
{
sei();
return Derecha;
}
sei();
return Otros;
}
Diagrama de Bloque del Receptor
Inicio
Inicialización de puertos
SI
Mostrar en LCD
Caracter C’ recibido Mover motores
ADELANTE
NO
SI Mostrar en LCD
Caracter ’a’ recibido Mover motores
“ATRÁS
NO
SI Mostrar en LCD
Caracter ‘I’ recibido Mover motores
IZQUIERDA
NO
SI Mostrar en LCD
Caracter R’ recibido Mover motores
DERECHA
NO
SI Mostrar en LCD
Caracter ‘U’ recibido Detener motores
“CENTER”
NO
set_motors(100,100);
//rutina para el uso del sensor sharp de proximidad, de
acuerdo a las siguientes condiciones como prioriodad //Implementación de procedimiento
Es recomendable que las baterías para que el pololu trabaje este bien
cargadas ya que este puede no permitir grabar bien el programa o más
aun que el programador se queme.
Fijar bien las frecuencias de trabajo para que el buttetfly como para el
pololu pueda transmitir.
Gracias