Добрый день, собираю радио приёмник на модуле RDA5807 и OLED дисплее SSD1306. Возникла проблема в скетче. Модуль fm и дисплей работают по шине I2C, адрес у fm модуля (0x10), у экрана (0x3C). Для работы с дисплеем я использую библиотеку OLED_I2C.h (поскольку она проста в использовании, и в ней очень красивые шрифты). Но возник вопрос как в этой библиотеке указать адрес I2C дисплея. Поскольку если его не указывать дисплей не запускается . Тестовый скетч:
#include <Wire.h>
#include <radio.h>
#include <RDA5807M.h>
RADIO_FREQ preset[] = {8840,9020,9060,9120,9160,9500,9540,9620,9920,10060,10130,10200,10260,10320,10370,10410,10450,10490,10560,10630,10680,10720};
char* STATION_NAME[]={"ENERGY", "RADIO DACH", "VESTI FM", "RUSSIA FM", "LOVE RADIO",
"DETSKOE", "DOROJNOE", "RETRO FM", "RUSSIAN HIT", "RECORD", "RUSSKOE", "EVROPA PLUS",
"HIT FM", "MAYAK FM","NEW RADIO","AVTORADIO","VANYA","START FM","HUMOR FM","MILICEYSKAY","DFM","RADIO MIR","MONTE CARLO"};
uint8_t i_sidx = 0;
RDA5807M radio;
uint8_t v = 5;
uint8_t prog=1;
#include <OLED_I2C.h>
OLED myOLED(SDA, SCL);
extern uint8_t SmallFont[];
extern uint8_t MediumNumbers[];
extern uint8_t BigNumbers[];
void setup() {
myOLED.begin();
pinMode(A2, INPUT_PULLUP);
pinMode(A1, INPUT_PULLUP);
radio.init();
radio.debugEnable();
radio.setBandFrequency(RADIO_BAND_FM, preset[i_sidx]); // и без него
radio.setMono(false);
radio.setMute(false);
radio.setVolume(5);
}
void loop() {
boolean CANAL_UPP = !digitalRead(A2);
boolean CANAL_DOWNN = !digitalRead(A1);
// Переключение каналов
if (digitalRead(CANAL_UPP) == 1) {
// next preset
if (i_sidx < (sizeof(preset) / sizeof(RADIO_FREQ)) - 1) {
i_sidx++; radio.setFrequency(preset[i_sidx]);STATION_NAME[i_sidx];
delay(500);
}
} else if (digitalRead(CANAL_DOWNN) == 1) {
if (i_sidx > 0) {
i_sidx--;
radio.setFrequency(preset[i_sidx]);
delay(500);
}
}
myOLED.setFont(SmallFont);
myOLED.print((STATION_NAME[i_sidx]), CENTER, 40);
myOLED.update();
myOLED.clrScr();
}
String utf8rus(String source)
{
int i,k;
String target;
unsigned char n;
char m[2] = { '0', '\0' };
k = source.length(); i = 0;
while (i < k) {
n = source[i]; i++;
if (n >= 0xC0) {
switch (n) {
case 0xD0: {
n = source[i]; i++;
if (n == 0x81) { n = 0xA8; break; }
if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
break;
}
case 0xD1: {
n = source[i]; i++;
if (n == 0x91) { n = 0xB8; break; }
if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
break;
}
}
}
m[0] = n; target = target + String(m);
}
return target;
}