//===========================================================================================================
//---Bibliotecas
#include <LiquidCrystal_PCF8574.h>
//===========================================================================================================
//---Variáveis
long elapsedRSSI = millis();
unsigned char buf[5] = {1, 1, 1, 250, 1}; // Buffer
double f_new = 99.9; // Frequencia inicial
boolean mute = false; // MUTE flag
boolean mode; // Modo
byte counter = 0; // Contagem do encoder
byte count; // Contagem para Medidor de sinal
byte sm_buf; // Buffer do Medidor de sinal
byte sm_p; // Medidor de Sinal
byte stereo = 0; // Auxiliar do estereo
// Arrays do simbolo para s-meter
byte graph [8][8] =
{
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00}, // 1 linha
{0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x00}, // 2 linhas
{0x00, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x1F, 0x00}, // 3 linhas
{0x00, 0x00, 0x00, 0x1F, 0x1F, 0x1F, 0x1F, 0x00}, // 4 linhas
{0x00, 0x00, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00}, // 5 linhas
{0x00, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00}, // 6 linhas
{0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00}, // 7 linhas
{0x1F, 0x1F, 0x1B, 0x11, 0x1B, 0x1F, 0x1F, 0x00} // Sinal +
};
//===========================================================================================================
//---Instancias
LiquidCrystal_PCF8574 lcd(0x27); // Nome e configurção para LCD (endereço)
//===========================================================================================================
//---Setup
void setup()
{
//Inicia o LCD
lcd.begin(16, 2); // Define a quantidades de colunas e linhas
lcd.setBacklight(1); // Liga a luz de fundo
lcd.print("Radio..."); // Escreve no LCD
delay(1000); // Aguarda 1 segundo
lcd.clear(); // Limpa o LCD
for (int k = 0; k < 8; k++) // Laço para criação do desenho sinal
lcd.createChar(k, graph[k]); // Cria o desenho na memória
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("FM");
lcd.setCursor(9, 0);
lcd.print("MHz");
showStatus();
showFrequency();
}
//===========================================================================================================
//---Lupe Infinito
void loop()
{
}
//===========================================================================================================
// Função para exibição da frequencia
void showFrequency()
{
String freqDisplay; // Variável local para formatação
freqDisplay = String(f_new, 1); // Formata e converte o valor em string (frequencia, quantidade de casas decimais)
//informação de frequencia
lcd.setCursor(3, 0);
if (f_new < 100) // Posicionamento do primeiro digito no LCD
{
lcd.print(" "); // Apaga o valor na coluna 5
lcd.setCursor(4, 0);
}
lcd.print(freqDisplay); // Escreve a frequencia
tune_mode();
}
// Função para implementação da EEPROM
void tune_mode()
{
if (mode) // Verifica se modo está em Tune ou Preset
{
lcd.setCursor(0, 1);
if (count < 10)
lcd.print('0');
lcd.print(count); // Escreve o numero salvo da estação
lcd.print(' ');
}
else
{
lcd.setCursor(0, 1);
lcd.print("TU "); // Escreve "TU" para modo tune
}
}
// Função para exibição do status
void showStatus()
{
// Seta o indicador STEREO/MONO
lcd.setCursor(13, 0);
if (!mute) // Verifica se o mute está desligado
if (buf[2] & 0x80 != stereo) // Verifica se o buffer é diferente de estereo
lcd.print("[S]"); // Escreve "S" se for estereo
else
lcd.print("[M]"); // Escreve "M" se for mono
else
lcd.print("[-]"); // Escreve "-" se estiver em mute
// Desenha a barra do indicardor de sinal
lcd.setCursor(3, 1);
sm_buf = (buf[3] >> 4); // Desloca o valor em 4
sm_p = byte(0.6 * sm_buf); // Calcula o valor do sinal
for (int j = 0; j < sm_p; j++) // Laço para posicionamento do cursor
{
lcd.setCursor(3 + j, 1); // Posiciona o cursor
if (j < 6)
lcd.write(byte(j)); // Escreve o desenho da barra
else if (j < 7)
lcd.write(byte(6));
else
lcd.write(byte(7));
}
for (int j = sm_p; j < 10; j++) // Espaços brancos a direita
lcd.print(' ');
lcd.setCursor(13, 1);
lcd.print('[');
lcd.print(sm_p); // Numero do imdicador de sinal
lcd.print(']');
}
//===========================================================================================================