Радио на Si4703 (Arduino)

Модуль 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 МГц

Форум — http://forum.rcl-radio.ru/viewtopic.php?id=124

Добавить комментарий

Войти с помощью: