#include "soc/uart_reg.h"
#define LED 2 // LED conectado ao GPIO 2
char comando[20]; // Armazena comando recebido
int pos=0; // Posição do vetor
void uartEnviar(char c){
while((REG_READ(UART_STATUS_REG(0))>>UART_TXFIFO_CNT_S)&UART_TXFIFO_CNT); // Aguarda espaço na transmissão
REG_WRITE(UART_FIFO_REG(0),c); // Envia caractere
}
void enviarTexto(const char *txt){
while(*txt){
uartEnviar(*txt++); // Envia texto caractere por caractere
}
}
char uartReceber(){
if((REG_READ(UART_STATUS_REG(0))>>UART_RXFIFO_CNT_S)&UART_RXFIFO_CNT) // Verifica se recebeu dado
return REG_READ(UART_FIFO_REG(0)); // Retorna caractere recebido
return 0; // Nenhum dado recebido
}
void processarComando(){
if(strcmp(comando,"ON")==0){ // Comando para ligar LED
digitalWrite(LED,HIGH);
enviarTexto("LED ligado\r\n");
}
else if(strcmp(comando,"OFF")==0){ // Comando para desligar LED
digitalWrite(LED,LOW);
enviarTexto("LED desligado\r\n");
}
else{
enviarTexto("Comando invalido\r\n"); // Resposta para comandos desconhecidos
}
}
void setup(){
pinMode(LED,OUTPUT); // Configura GPIO 2 como saída
REG_WRITE(UART_CONF0_REG(0),0x0000001C); // Configura UART em 8 bits
REG_WRITE(UART_CLKDIV_REG(0),434); // Define baud rate de 115200
enviarTexto("UART OK\r\n"); // Mensagem inicial
enviarTexto("Use ON ou OFF\r\n"); // Instrução ao usuário
}
void loop(){
char c=uartReceber(); // Lê caractere recebido
if(c){
if(c=='\n'){ // Final do comando
comando[pos]='\0'; // Finaliza string
processarComando(); // Executa comando
pos=0; // Reinicia posição
}
else if(c!='\r'){
comando[pos++]=c; // Guarda caractere recebido
if(pos>=19) pos=0; // Evita estouro do vetor
}
}
}