Модуль Si4703 представляет собой FM-радиоприёмник (УКВ от 76 МГц до 108 МГц) с цифровым управлением (I2C) и функцией RDS. Так же модуль содержит маломощный усилитель мощности звуковой частоты TPA6111A2, позволяющий подключать наушники к модулю используя разъем 3,5 мм, при этом подключенные наушники используются в качестве антенны.
Используя платформу Arduino можно собрать простое радио с функцией RDS. Ниже представлен скетч который позволяет переключать каналы радио (частоты радио станций должны быть вписаны в скетч) и менять уровень громкости от 0 до 15 шагов. Вся информация выводится на дисплей LCD1602(I2C) (на базе контроллера HD44780).
#include <Wire.h> #include <LiquidCrystal_I2C.h> #include <SparkFunSi4703.h> // sparkfunsi4703arduinolibrarymaster.zip #include <EEPROM.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1 LiquidCrystal_I2C lcd(0x27,16,2); // Устанавливаем дисплей Si4703_Breakout radio(2, A4, A5, 3);// RST,SDIO,SCLK,SEN - подключение int vol=1; int channel[11]{1010,1015,1019,1030,1035,1039,1044,1062,1068,1073}; char rdsBuffer[20]; int w,c,i; void setup(){ lcd.init();lcd.backlight();// Включаем подсветку дисплея pinMode(12,INPUT);// Cannel + pinMode(11,INPUT);// Cannel - pinMode(10,INPUT);// Volume + pinMode(9,INPUT); // Volume - c = EEPROM.read(0);vol = EEPROM.read(1); radio.powerOn(); radio.setVolume(vol); radio.setChannel(channel[c]); } void loop(){ radio.readRDS(rdsBuffer); if(digitalRead(12)==HIGH){w=1;delay(200);} if(digitalRead(11)==HIGH){w=2;delay(200);} if(digitalRead(10)==HIGH){w=3;delay(200);} if(digitalRead(9)==HIGH){w=4;delay(200);} if(w==1){c++;if(c>9){c=9;}radio.setChannel(channel[c]);cl();radio.setChannel(channel[c]);EEPROM.update(0,c);} if(w==2){c--;if(c<0){c=0;}radio.setChannel(channel[c]);cl();radio.setChannel(channel[c]);EEPROM.update(0,c);} if(w==3){vol++;if(vol>15){vol=15;}radio.setVolume(vol);cl1();EEPROM.update(1,vol);} if(w==4){vol--;if(vol<0){vol=0;}radio.setVolume(vol);cl1();EEPROM.update(1,vol);} lcd.setCursor(0, 0); lcd.print((float)channel[c]/10,1);lcd.print(" MHz ");lcd.print("VOL ");lcd.print(vol);lcd.print(" "); lcd.setCursor(0, 1);lcd.print("C"); lcd.print(c+1);lcd.print(" "); lcd.setCursor(6, 1); lcd.print(rdsBuffer); } void cl(){delay(100);w=0;lcd.clear();for(i=0;i<20;i++){rdsBuffer[i]=NULL;}} void cl1(){delay(100);w=0;}
Перед заливкой скетча отредактируйте строку:
int channel[11]{1010,1015,1019,1030,1035,1039,1044,1062,1068,1073};
Впишите в нее частоты радиостанций в формате 1015 = 101,5 МГц