#define F_CPU 16000000
#define USART_BAUDRATE 9600
#define UBRR_VALUE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)
char RX_Data;
int tiempo=500;
void setup(){
pinMode(13,OUTPUT);
UCSR0A = 0x00; // Limpia las banderas de la UART
UBRR0H = (uint8_t)(UBRR_VALUE >> 8); // Configura baudios
UBRR0L = (uint8_t)UBRR_VALUE;
UCSR0C |= (1 << UCSZ00) | (1 << USBS0); // Datos en 8-bits con 1 bit de stop
UCSR0B |= (1 << RXEN0) | (1 << TXEN0) | (1 << RXCIE0); // Activa TX,RX y INT
interrupts(); // Las interrupciones están activadas
}
void loop() {
if(RX_Data=='h'){tiempo=100;}
if(RX_Data=='l'){tiempo=1000;}
if(RX_Data=='n'){tiempo=500;}
digitalWrite(13,1);
delay(tiempo);
digitalWrite(13,0);
delay(tiempo);
sendSeriaData("HOLA MUNDO\n");
}
ISR(USART_RX_vect){
char RX_Byte = UDR0; // Guarda el carácter recibido
RX_Data=RX_Byte;
UDR0 = RX_Byte; // Envía el carácter nuevamente
}
void sendSeriaData(char ar[]){
while (( UCSR0A & (1<<UDRE0)) == 0){};
for ( int i = 0; i < strlen(ar); i++){
while (( UCSR0A & (1<<UDRE0)) == 0){};
UDR0 = ar[i];
}
}