#include <LiquidCrystal_I2C.h> // Biblioteca do LCD
//====================================================================================================
//---Variveis
uint16_t freq = 9990; // Varivel da frequencia inicial
uint8_t rssi = 17; // Varivel de controle do sinal de antena
// Matriz para criao da barra de sinal
byte dialInitial[] = { 0x00, 0x19, 0x19, 0x01, 0x01, 0x19, 0x19, 0x00 }; // Incio da barra
byte dialUpDown[] = { 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00 }; // Parte superior e inferior
byte dialFinal[] = { 0x00, 0x1F, 0x03, 0x03, 0x03, 0x03, 0x1F, 0x00 }; // Final da barra
byte bar[] = { 0x00, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00 }; // Preenchimento da barra
//====================================================================================================
//---Objetos
LiquidCrystal_I2C lcd(0x27, 16, 2); // Define (endero(decimal), nmeros coluna, nmeros linha)
//====================================================================================================
//---Configuraes
void setup()
{
lcd.init(); // Inicia o display LCD
lcd.backlight(); // Liga luz de fundo do LCD
// Criao das partes da barra grfica
lcd.createChar(0, dialUpDown); // (Nome, matriz)
lcd.createChar(1, dialFinal);
lcd.createChar(2, bar);
lcd.createChar(3, dialInitial);
// Mostra as informaes no LCD ao ligar
lcd.setCursor(2, 0); // Posiciona o cursor na coluna 2 e linha 0
lcd.print("Radio DSP FM"); // Escreve no LCD
delay(2000); // Aguarda 2 segundos
lcd.setCursor(3, 1);
lcd.print("SI473X_V1");
delay(2000);
lcd.clear(); // Limpa o LCD
showFrequency(); // Exibe a informao de frequencia no LCD
}
//====================================================================================================
//---Loop infinito
void loop()
{
showRSSI(); // Atualiza o sinal de antena
}
// Formata o valor da frequencia para exibio no LCD
void showFrequency()
{
String freqDisplay;
freqDisplay = String(freq / 100.0, 1); // Formata e converte o valor em string (frequencia, quantidade de casas decimais)
if (freq >= 10000) // Posicionamento do primeiro digito no LCD
{
lcd.setCursor(5, 0); // Posiciona o cursor na coluna 5 e linha 0
lcd.print(freqDisplay); // Escreve o valor da frequencia formatado no LCD
}
else
{
lcd.setCursor(5, 0);
lcd.print(" "); // Apaga o valor na coluna 5
lcd.setCursor(6, 0);
lcd.print(freqDisplay);
}
showStatus(); // Atualiza o status
}
// Exibe informaes fixa
void showStatus()
{
lcd.setCursor(2, 0); // Posiciona o cursor na coluna 2 e linha 0
lcd.print("FM"); // Escreve a banda no LCD
lcd.setCursor(11, 0);
lcd.print("MHz"); // Escreve a faixa da banda no LCD
lcd.setCursor(2, 1);
lcd.print("S"); // Escreve a sigla "S" de sinal
lcd.setCursor(13, 1);
lcd.write(1); // Desenha o final da barra de sinal
lcd.setCursor(3, 1);
lcd.write(3); // Desenha o incio da barra de sinal
}
// Funo que controla a barra de sinal
void showRSSI()
{
int blk = rssi / 4; // Divide o valor do sinal por 4
lcd.setCursor(4, 1);
for (int i = 0; i < 9; i++) // Define o tamanho da barra de acordo com o sinal
{
if (i < blk)
lcd.write(2); // Desenha a barra
else
lcd.write(0); // Desenha o a linha superior e inferior
}
}
//===================================================================================================