Для индикации частоты FM радиоприемника я решил применить LED дисплей с чипом TM1637, с ним очень удобно работать, на борту у него 4 семисегментных индикатора и управляется он по I2C, то есть у Ардуины расходуется всего 2 цифровых входа
Модуль LED индикации кстати очень яркий, я выбрал зеленого цвета, а скоро в магазине появятся LED индикаторы и других цветов (Красный, Желтый, Синий, Белый, ну и Зеленый)
Для подключения и работы с данным LED индикатором нам понадобится библиотека TM1637.h
Для управления радиомодулем RRD-102 V 2.0 на чипе RDA5807M вполне подходит встроенная в Ардуино IDE библиотека Wire.h
Собираем FM приемник на Ардуино по схеме ниже:
Ну а затем пишем программу (скетч) для прошивки контроллера Ардуино:
- Код: выделить все
// FM Радио версия 1.0
// http://www.forklg.ru
#include <Wire.h> // I2C-Library для управления радиомодулем RDA5807
// SDA приемника RDA5807 подключаем к аналоговому входу 4
// SCL приемника RDA5807 подключаем к аналоговому входу 5
#include "TM1637.h" // Библиотека для управления LED дисплеем TM1637
#define CLK 4 // вывод CLC дисплея
#define DIO 5 // вывод DIO дисплея
TM1637 disp(CLK,DIO);
double f_ini=100.000;// Стартовая частота настройки приемника RDA5807. (Можно изменить на нужную).
void setup()
{
disp.set(7); // Устанавливаем яркость дисплея на максимум
disp.init(D4056A); // Проводим инициализацию дисплея
Wire.begin(); // Инициализация двухпроводной шины I2C.
setFrequency(f_ini); // Присваиваем значение частоты радиомодулю RDA5807
pinMode(6, INPUT); // вход для подключения кнопки "Частота вниз"
pinMode(7, INPUT);// вход для подключения кнопки "Частота вверх"
}
void loop()
{
float fin1=(f_ini*1000); // производим вычисления для отображения установленной частоты на дисплее
int fin2=fin1/100; // производим вычисления для отображения установленной частоты на дисплее
disp.display(fin2); // выводим значение частоты на дисплей
// проверяем нажатие кнопки "Частота вниз"
if (digitalRead(6) == HIGH){
// если кнопка "Частота вниз" нажата
f_ini=f_ini-0.1; // уменьшаем значение частоты на 0,1 МГц
setFrequency(f_ini); // передаем новое значение частоты радиомодулю
};
// проверяем нажатие кнопки "Частота вверх"
if (digitalRead(7) == HIGH){
// если кнопка "Частота вверх" нажата
f_ini=f_ini+0.1;// увеличиваем значение частоты на 0,1 МГц
setFrequency(f_ini);// передаем новое значение частоты радиомодулю
};
delay(500); // задержка 0,5 сек.
}
void setFrequency(double fmhz) // Функция загрузки частоты настройки в модуль RDA5807.
{
int frequencyB = 4 * (fmhz * 1000000 + 225000) / 32768;
char frequencyH = frequencyB >> 8; // Старший байт.
char frequencyL = frequencyB & 0XFF; // Накладываем маску 0xFF на младший байт.
Wire.beginTransmission(0x60); // Адрес чипа RDA5807M
Wire.write(frequencyH); // Старший байт.
Wire.write(frequencyL); // Младший байт.
Wire.write(0xB8); // 1011 1000 =Стерео
Wire.write(0x10); // 0001 0000
Wire.endTransmission(); // формируем I2C-Stop.
}
Выкладываю скетч и рабочую библиотеку для LED индикатора: