51

Re: Радио RDA5807M

Управление энкодером здорово.
А можно управлять КПЕ?
Было бы здорово реанимировать советские приемники типа Селги, не меняя внешнего вида.

52

Re: Радио RDA5807M

КПЕ можно заменить на энкодер, другого варианта не вижу.

53

Re: Радио RDA5807M

Привет. Повторил , но у меня ssd1306,
КАК  прописать строку для загрузки данного драйвера ?

54

Re: Радио RDA5807M

U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST);    // Dev 0, Fast I2C / TWI

55

Re: Радио RDA5807M

Спасибо. Проблема была с библиотекой U8glib, Спасибо за содействие.

56 (2023-10-23 17:08:31 отредактировано ddss)

Re: Радио RDA5807M

liman324 пишет:

Тестирование 20 каналов

Добрый вечер!
А больше можно? больше 20 каналов?
Ка это можно сделать?
Cпасибо!

Re: Радио RDA5807M

Здравствуйте! С чем связано максимальное значение колличества станций 10 в основном скетче, можно ли увеличить до 20 , ведь тест на 20 есть. Спасибо.

58

Re: Радио RDA5807M

http://forum.rcl-radio.ru/viewtopic.php?pid=8389#p8389

Re: Радио RDA5807M

Я имел ввиду модернизированный основной скетч на 20 станций, тест на 20 станций проверял, проблем нет. или укажите где надо изменить. заранее спасибо.

60

Re: Радио RDA5807M

Чем отличается http://forum.rcl-radio.ru/viewtopic.php?pid=8389#p8389 от модернизированного основного скетча?

61 (2024-01-17 23:38:53 отредактировано Анатолий78)

Re: Радио RDA5807M

В этом скетче реализовано тестовая авт. настройка на 20 ст. но не подключены кнопки вкл. и меню ,  нет регулировки громкости,  работает только энкодер. нет полной функциональности. . спасибо

62

Re: Радио RDA5807M

На выходных постараюсь поправить скетч.

Re: Радио RDA5807M

спасибо!

64

Re: Радио RDA5807M

Поправил скетч, в железе не проверял

#include <Wire.h>
#include <radio.h>
#include <RDA5807M.h>
#include <LiquidCrystal.h>
#include <EEPROM.h>//#include <EEPROMex.h>
#include <RDSParser.h>
 LiquidCrystal lcd(7, 6, 2, 3, 4, 5);// RS,E,D4,D5,D6,D7
 byte a1[8]={0b00000,0b11011,0b11011,0b11011,0b11011,0b11011,0b11011,0b00000};
#define FIX_BAND    RADIO_BAND_FM   
 
RDA5807M radio; 
RADIO_INFO info;
RDSParser rds;
char s[12];
int menu,k,f_scan[20],f,i1=8700;
byte vol,bass,z,w,start,start1,t;
unsigned long time;
void DisplayServiceName(char *name){lcd.setCursor(0,1);lcd.print("    ");lcd.print(name);lcd.print("           ");} 
void RDS_process(uint16_t block1, uint16_t block2, uint16_t block3, uint16_t block4) {rds.processData(block1, block2, block3, block4);}
 
void setup() {
  vol=EEPROM.read(0);
  for(int c=0;c<20;c++){f_scan[c]=EEPROM.read(10+c)*100+EEPROM.read(100+c);}
  k=EEPROM.read(3);
  f=EEPROM.read(1)*100+EEPROM.read(2);start=0;
  lcd.begin(16, 2);
  Serial.begin(9600);
  radio.init();
  radio.debugEnable();
  pinMode(12,INPUT);// меню
  pinMode(11,INPUT);// плюс
  pinMode(10,INPUT);// минус
 lcd.createChar(0,a1);
  radio.setBandFrequency(FIX_BAND, f);
  radio.setVolume(vol);
  radio.setMono(false);
  radio.setMute(false);
  radio.attachReceiveRDS(RDS_process);
  rds.attachServicenNameCallback(DisplayServiceName);
delay(400);
} 
 
void loop() {
  radio.formatFrequency(s, sizeof(s));
 
  if(start==0){radio.setBandFrequency(FIX_BAND, f);delay(400);radio.getRadioInfo(&info);start=1;}
  if(digitalRead(12)==HIGH){menu++;lcd.clear();time=millis();radio.getRadioInfo(&info);start=0;w=1;delay(300);if(menu>3){menu=0;}}
 
   if(menu==0){// ГРОМКОСТЬ
   if(digitalRead(11)==HIGH){vol++;if(vol>15){vol=15;}w=1;time=millis();radio.setVolume(vol);delay(200);lcd.clear();}
   if(digitalRead(10)==HIGH){vol--;if(vol>16){vol=0;}w=1;time=millis();radio.setVolume(vol);delay(200);lcd.clear();}
    lcd.setCursor(0,0);lcd.print("   ");lcd.print(s);
    lcd.setCursor(0,1);
  if(millis()-time<5000){for(z=0;z<=vol;z++){lcd.setCursor(z,1);lcd.write((uint8_t)0);}}
  if(millis()-time>5000 and millis()-time<10000){
    lcd.print(info.tuned  ? "  TUNED"  : "  -----");
    lcd.print(info.stereo ? " STEREO  " : "  MONO   ");}
  if(millis()-time>10000){radio.checkRDS();}  // RDS
   }
 
   if(menu==1){// КАНАЛЫ
       if(start1==0){f=f_scan[k];start=0;start1=1;}
    if(digitalRead(11)==HIGH){k++;if(k>19){k=19;}delay(200);f=f_scan[k];w=1;time=millis();start=0;lcd.clear();}
    if(digitalRead(10)==HIGH){k--;if(k<0){k=0;}delay(200);f=f_scan[k];w=1;time=millis();start=0;lcd.clear();}
      lcd.setCursor(0,0);lcd.print("K");lcd.print(k);
    if(f_scan[k]!=0){lcd.print(" ");lcd.print((float)f_scan[k]/100);lcd.print(" MHz   ");}else{lcd.print(" N/A            ");}
      radio.getRadioInfo(&info);
      lcd.setCursor(0,1);lcd.print(info.tuned  ? "TUNED"  : "-----");
      lcd.print("  SIGNAL ");lcd.print(info.rssi);
   }   
 
    if(menu==2){// АВТО ПОИСК КАНАЛОВ
      lcd.setCursor(0,0);lcd.print("AUTOSCAN");  
    if(digitalRead(11)==HIGH || digitalRead(10)==HIGH){
    for(int i=0;i<20;i++){
    for(i1;i1<=10800;i1=i1+10){
      radio.setBandFrequency(FIX_BAND, i1);delay(300);
      radio.getRadioInfo(&info);delay(500);
    if(info.tuned==1 and info.rssi>26){f_scan[i]=i1;i1=f_scan[i]+10;if(i1>=10800){f_scan[i]=0;}break;} 
      lcd.setCursor(9,0); lcd.print((float)i1/100);
  }
 lcd.setCursor(0,1);lcd.print(i);lcd.print(" ");lcd.print((float)f_scan[i]/100);lcd.print(" MHz   ");
  }delay(1000);time=millis();i1=8700;eeprom();k=0;start1=0;menu=1;}}   
 
 
  if(menu==3){// ПОДСТРОЙКА ЧАСТОТЫ КАНАЛА
    if(digitalRead(11)==HIGH){f=f+10;t=1;if(f<8700){f=8700;}start=0;time=millis();delay(200);lcd.clear();}
    if(digitalRead(10)==HIGH){f=f-10;t=1;if(f>10800){f=10800;}start=0;time=millis();delay(200);lcd.clear();}
    lcd.setCursor(0,0);lcd.print("<  ");lcd.print((float)f/100);lcd.print(" MHz  >");
    radio.getRadioInfo(&info);
    lcd.setCursor(0,1);lcd.print(info.tuned  ? "TUNED"  : "-----");
    lcd.print("  SIGNAL ");lcd.print(info.rssi);
    if(millis()-time>10000 and t==1){f_scan[k]=f;t=0;EEPROM.update(10+k,f_scan[k]/100);EEPROM.update(100+k,f_scan[k]-(f_scan[k]/100)*100);
    if(millis()-time<11000){lcd.setCursor(0,1);lcd.print("      SAVE      ");delay(1000);}}
  }
 
 if(millis()-time>60000 && w==1){EEPROM.update(0,vol);EEPROM.update(3,k);EEPROM.update(1,f_scan[k]/100);EEPROM.update(2,f_scan[k]-(f_scan[k]/100)*100);w=0;}
 if(millis()-time>10000 and menu==1){menu=0;time=millis();lcd.clear();}
 
} // LOOP
 
void eeprom(){for(int b=0;b<20;b++){EEPROM.update(10+b,f_scan[b]/100);EEPROM.update(100+b,f_scan[b]-(f_scan[b]/100)*100);}}

65 (2024-01-20 22:39:41 отредактировано Анатолий78)

Re: Радио RDA5807M

Вы модернизировали скетч на LCD, он входит в цикл настройки по кругу без остановки. Меня интересовал скетч на OLED 1.3.

Re: Радио RDA5807M

И еще, предложенный скетч на LCD не записывает данные каналов в регистры RDA5807M, остается что было от другого скетча.

67

Re: Радио RDA5807M

Опубликуйте скетч

68 (2024-01-21 11:24:32 отредактировано Анатолий78)

Re: Радио RDA5807M

Проверял скетч из вашего  поста 64,  он под LCD  сразу включает автонастройку и циклит. Сейчас у меня стоит скетч из Вашей основной статьи с OLED 1.3, в своей функциональности он устраивает, только желательно иметь возможность автонастройки до 20 станций, 10 маловато. спасибо.

69

Re: Радио RDA5807M

#define FIX_BAND    RADIO_BAND_FM  
#define RSS 25
#define DELAY_CH 500

#include <Wire.h>
#include <radio.h>             // http://rcl-radio.ru/wp-content/uploads/2023/08/radio.zip
#include <RDA5807M.h>          // http://rcl-radio.ru/wp-content/uploads/2023/08/RDA5807-master.zip
#include <RDSParser.h>         // >> radio.h
#include <MsTimer2.h>          // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip 
#include <Encoder.h>           // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip 
#include <U8glib.h>            // https://github.com/olikraus/u8glib/
#include <EEPROM.h>

RDA5807M radio; 
RADIO_INFO info;
U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST);  // Dev 0, Fast I2C / TWI
Encoder myEnc(9, 8);// DT, CLK

int v_pos,menu,vol,f0,f_scan[20],k,i1=8700,i;
float f;
long oldPosition  = -999,newPosition, times, times1;
bool w,w2,t, power;
byte start1,start;
int z;


void setup(){
  delay(300);
  Wire.begin();
  if(EEPROM.read(300)!=0){for(int i=0;i<301;i++){EEPROM.update(i,0);}}
  vol=EEPROM.read(0);
  for(int c=0;c<20;c++){f_scan[c]=EEPROM.read(10+c)*100+EEPROM.read(100+c);}
  k=EEPROM.read(3);
  f=EEPROM.read(1)*100+EEPROM.read(2);start=0;
  pinMode(10,INPUT);        // encoder SW
  pinMode(2,INPUT_PULLUP); // КНОПКА SET 
  pinMode(3,INPUT_PULLUP); // КНОПКА POWER  
  pinMode(4,OUTPUT);       // OUT STANDBY
  MsTimer2::set(1, to_Timer);MsTimer2::start();
  Serial.begin(9600);
  radio.init();
  radio.debugEnable();
  radio.setBandFrequency(FIX_BAND, f);
  radio.setVolume(vol);
  radio.setMono(false);
  radio.setMute(false);
  u8g.firstPage();do {u8g.setFont(u8g_font_profont12r);
  u8g.drawStr(40,20,"RDA5807M");
  u8g.drawStr(40,50,"RADIO FM");
  } 
  while( u8g.nextPage() );
  delay(1000);
  }

void loop(){
  if(start==0){radio.setBandFrequency(FIX_BAND, f);delay(100);radio.getRadioInfo(&info);start=1;}
//////////////////////////////////////////////////////////////////////////////////////////////////  
if(power==0){
  if(digitalRead(10)==LOW && menu<2){menu++;if(menu>1){menu=0;}w=1;w2=1;delay(200);}
  if(digitalRead(2)==LOW && menu<2){menu=2;times=millis();w=1;w2=1;delay(200);}
  if(digitalRead(2)==LOW && menu==2){menu=3;times=millis();times1=millis()-10000;w=1;w2=1;delay(200);}
  if(digitalRead(2)==LOW && menu==3){menu=0;times=millis();w=1;w2=1;delay(200);}
}
  if(digitalRead(3)==LOW && power==0){power=1;radio.setMute(true);digitalWrite(4,LOW);
    u8g.firstPage();do {u8g.setFont(u8g_font_profont12r);u8g.drawStr(40,30,"POWER OFF");}
    while( u8g.nextPage() );menu=100;delay(1000);u8g.firstPage();do {} while( u8g.nextPage() );}
  if(digitalRead(3)==LOW && power==1){power=0;radio.setMute(false);menu=0;digitalWrite(4,HIGH);delay(200);}
  
//////////////////////////////////////////////////////////////////////////////////////////////////   
  if(menu==0){ // ГРОМКОСТЬ
   if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
    vol=vol+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;if(vol>15){vol=15;}if(vol<0){vol=0;}radio.setVolume(vol);Serial.println(vol);}
 
    u8g.firstPage();do {
    u8g.setFont(u8g_font_profont29r);u8g.setPrintPos(5, 20);u8g.print(f/100);  
    u8g.setFont(u8g_font_profont12r);u8g.drawStr(110,20,"MHz"); 
    u8g.drawLine(0, 25, 128, 25);  
    u8g.drawStr(0,40,"VOLUME");for(int v_pos=0; v_pos<vol*4+1;v_pos+=4){u8g.drawBox(v_pos+53,32, 2, 8);}
    u8g.drawLine(0, 46, 128, 46); 
    radio.getRadioInfo(&info);
    u8g.setPrintPos(0, 60);u8g.print(info.rssi);u8g.drawStr(15,60,"dBm |");
    u8g.drawStr(50,60,info.tuned  ? "TUNED"  : "-----");
    u8g.drawStr(80,60,info.stereo ? " STEREO  " : "  MONO   ");
    }
  while( u8g.nextPage() );
    }
////////////////////////////////////////////////////////////////////////////////////////
   if(menu==1){ // КАНАЛЫ 
    if(start1==0){f=f_scan[k];start=0;start1=1;radio.setBandFrequency(FIX_BAND, f);}
    if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
      k=k+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;if(k>19){k=19;}if(k<0){k=0;}times=millis();start=0;f=f_scan[k];}
    
    u8g.firstPage();do { 
    if(f_scan[k]!=0){u8g.setFont(u8g_font_profont29r);u8g.setPrintPos(5, 20);u8g.print((float)f_scan[k]/100); 
      u8g.setFont(u8g_font_profont12r);u8g.drawStr(110,20,"MHz");}
        else{u8g.setFont(u8g_font_profont17r);u8g.drawStr(45, 18,"N/A");}
    u8g.drawLine(0, 25, 128, 25);  u8g.setFont(u8g_font_profont12r);
    u8g.drawStr(0,40,"CHANNEL");u8g.setPrintPos(80, 40);u8g.print(k+1); 
    u8g.drawLine(0, 46, 128, 46); 
    radio.getRadioInfo(&info);
    u8g.setPrintPos(0, 60);u8g.print(info.rssi);u8g.drawStr(15,60,"dBm |");
    u8g.drawStr(50,60,info.tuned  ? "TUNED"  : "-----");
    u8g.drawStr(80,60,info.stereo ? " STEREO  " : "  MONO   ");
    }
  while( u8g.nextPage() );
   }   
/////////////////////////////////////////////////////////////////////////////////////////
    if(menu==2){// АВТО ПОИСК КАНАЛОВ
     if(digitalRead(10)==LOW){
     for(int i=10;i<301;i++){EEPROM.update(i,0);}
     for(int c=0;c<20;c++){f_scan[c]=EEPROM.read(10+c)*100+EEPROM.read(100+c);}
     for(i=0;i<20;i++){
     for(i1;i1<=10800;i1=i1+10){
      radio.setBandFrequency(FIX_BAND, i1);delay(DELAY_CH);
      radio.getRadioInfo(&info);
    if(info.tuned==1 and info.rssi>RSS){f_scan[i]=i1;f0=f_scan[i];i1=f_scan[i]+10;
    EEPROM.update(10+i,f_scan[i]/100);EEPROM.update(100+i,f_scan[i]-(f_scan[i]/100)*100);
    if(i1>=10800){f_scan[i]=0;}break;}  
    u8g.firstPage();do {  
    u8g.setFont(u8g_font_profont29r);u8g.setPrintPos(5, 20);u8g.print((float)i1/100);  
    u8g.setFont(u8g_font_profont12r);u8g.drawStr(110,20,"MHz");
    u8g.drawLine(0, 25, 128, 25);
    u8g.drawStr(5,40,"CH");u8g.setPrintPos(20, 40);u8g.print(i); 
    u8g.setFont(u8g_font_profont12r);u8g.setPrintPos(50, 40);u8g.print((float)f0/100);u8g.drawStr(110,40,"MHz");
    u8g.drawLine(0, 46, 128, 46); 
    u8g.setPrintPos(0, 60);u8g.print(info.rssi);u8g.drawStr(15,60,"dBm |");
    u8g.drawStr(50,60,info.tuned  ? "TUNED"  : "-----");
    u8g.drawStr(80,60,info.stereo ? " STEREO  " : "  MONO   ");
      }
 while( u8g.nextPage() );
  }}
 delay(1000);times=millis();i1=8700;k=0;start1=0;menu=1;}
    u8g.firstPage();do {  
    u8g.setFont(u8g_font_profont12r);
    u8g.drawStr(40,20,"AUTOSCAN");
    u8g.drawStr(30,40,"PRESS BUTTON");
    }while( u8g.nextPage() );
}     
////////////////////////////////////////////////////////////////////////////////////////// 
 if(menu==3){// ПОДСТРОЙКА ЧАСТОТЫ КАНАЛА
    if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
      f=f+newPosition*10;myEnc.write(0);newPosition=0;times=millis();t=1;w=1;w2=1;if(f<8700){f=8700;}if(f>10800){f=10800;}times1=millis();start=0;}
    u8g.firstPage();do {  
    u8g.setFont(u8g_font_profont29r);u8g.setPrintPos(5, 20);u8g.print(f/100);  
    u8g.setFont(u8g_font_profont12r);u8g.drawStr(110,20,"MHz"); 
    u8g.drawLine(0, 25, 128, 25);  
    if(millis()-times1<1000){u8g.drawStr(50,40,"SAVE");}
      else{u8g.drawStr(15,40,"FREQUENCY TUNING");}
    u8g.drawLine(0, 46, 128, 46); 
    u8g.setPrintPos(0, 60);u8g.print(info.rssi);u8g.drawStr(15,60,"dBm |");
    u8g.drawStr(50,60,info.tuned  ? "TUNED"  : "-----");
    u8g.drawStr(80,60,info.stereo ? " STEREO  " : "  MONO   ");
    if(t==1){f_scan[k]=f;t=0;EEPROM.update(10+k,f_scan[k]/100);EEPROM.update(100+k,f_scan[k]-(f_scan[k]/100)*100);}
      }
 while( u8g.nextPage() );
  }
  
 delay(10);
 if(millis()-times>5000 && w==1){EEPROM.update(0,vol);EEPROM.update(3,k);EEPROM.update(1,f_scan[k]/100);EEPROM.update(2,f_scan[k]-(f_scan[k]/100)*100);w=0;}
 }  
 
void to_Timer(){newPosition = myEnc.read()/4;} 

Re: Радио RDA5807M

Спасибо за изменения, проверил все как я хотел. ( в последней строке не дописана фраза я у себя изменил. замените в своем скетче) еще раз спасибо. сейчас начал делать корпус закончу, покажу, если интересно тогда могу выложить коды для ЧПУ.

71

Re: Радио RDA5807M

Теперь библиотеки для дисплеев обзывются - U8g2_Arduino-master.zip и 8glib_Arduino-master.zip.

72 (2024-04-03 12:20:28 отредактировано Chudo-Judo)

Re: Радио RDA5807M

Все скетчи перепробовал. Будто бы роман читал. КРУТО !  Особенно последний скетч в посте 64. Буду его использовать.
И еще - можно ли увеличить количество станций до 30 или это предел для RDA5807M ?
Спасибо, автор.

73

Re: Радио RDA5807M

На шину i2c подтягивающие резисторы нужны?

74

Re: Радио RDA5807M

Попробуйте сначала без них.

75

Re: Радио RDA5807M

goi4s пишет:

На шину i2c подтягивающие резисторы нужны?

Пробовал и с подтяжкой и без. Работает. Но ловит только одну станцию "авторадио" и то при ручном поиске. Уровень сигнала показывает 10 Дб. Антенна автомобильная длина 60 см. Изменил #define RSS на 5 стало ловить этот канал автопоиском.