Re: Радио RDA5807M
Уважаемый автор! Ткните, пожалуйста, носом в скетч с дисплеем 1,3 Олед 1306. Запутался в трех соснах!
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
forum.rcl-radio.ru → Тестирование скетчей → Радио RDA5807M
Уважаемый автор! Ткните, пожалуйста, носом в скетч с дисплеем 1,3 Олед 1306. Запутался в трех соснах!
нет такого скетча
1306 это 0,96'
SH1106 это 1.3'
Уважаемый автор! Ткните, пожалуйста, носом в актуальный скетч с дисплеем 1,3 Олед 1106.
Re: Радио RDA5807M Добрый день. А можно выложить схему радио с подключением энкодера? А то собрал, опираясь на скетч, а энкодер работает не корректно. Спасибо!
Проверьте наличие 3-х подтягивающих резисторов по 10кОм на платке энкодера.
liman324 Спасибо! Резисторы есть, разобрался. Нашёл схему. Не к тем пинам подключал. Разбираюсь с настройками.
Собрал на макетке.Всё работает. Только на экране слева вертикальные мерцающие точки. может кто подскажет, как их убрать. Спасибо!
Что за дисплей? 1.3 или 0.96 дюйма?
0.96
Может в скетче что то поменять нужно?
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST); // Fast I2C / TWI
liman324 Вы гений! Спасибо, всё получилось! Буду воплощать проект в раритетной радиоточке.
Подскажите пожалуйста, куда нужно подключать выход с 4 пина "out standby" для отключения усилителя? Спасибо!
Усилитель должен иметь вход управления standby
Понял. Большое спасибо.
Привет! Пытаюсь перезалить скетч отсюда http://rcl-radio.ru/?p=53162 Получаю ошибку. Что можно посмотреть?
Arduino: 1.8.19 (Windows 10), Плата:"Arduino Nano, ATmega328P (Old Bootloader)"
C:\Users\User\Documents\Arduino\sketch_oct24a\sketch_oct24a.ino: In function 'void setup()':
sketch_oct24a:39:7: error: 'class RDSParser' has no member named 'attachServicenNameCallback'; did you mean 'attachServiceNameCallback'?
rds.attachServicenNameCallback(DisplayServiceName);
^~~~~~~~~~~~~~~~~~~~~~~~~~
attachServiceNameCallback
C:\Users\User\Documents\Arduino\sketch_oct24a\sketch_oct24a.ino: In function 'void setup()':
sketch_oct24a:102:129: error: redefinition of 'void setup()'
void eeprom(){for(int b=0;b<10;b++){EEPROM.update(10+b,f_scan[b]/100);EEPROM.update(100+b,f_scan[b]-(f_scan[b]/100)*100);}}void setup() {
^~~~~
C:\Users\User\Documents\Arduino\sketch_oct24a\sketch_oct24a.ino:21:6: note: 'void setup()' previously defined here
void setup() {
^~~~~
C:\Users\User\Documents\Arduino\sketch_oct24a\sketch_oct24a.ino: In function 'void loop()':
sketch_oct24a:107:6: error: redefinition of 'void loop()'
void loop() {
^~~~
C:\Users\User\Documents\Arduino\sketch_oct24a\sketch_oct24a.ino:43:6: note: 'void loop()' previously defined here
void loop() {
^~~~
exit status 1
'class RDSParser' has no member named 'attachServicenNameCallback'; did you mean 'attachServiceNameCallback'?
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
У меня компиляция проходит нормально
Скетч использует 20032 байт (62%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 1412 байт (68%) динамической памяти, оставляя 636 байт для локальных переменных. Максимум: 2048 байт.
Тогда Х.З.! Попробовал на другом ПК- ошибка та же самая.
Возможно не те версии библиотек, вот те что я использую, загрузите их -
Данный контент доступен только зарегистрированным пользователям.
Данный контент доступен только зарегистрированным пользователям.
Спасибо, с этими библиотеками все залилось!
а у меня всё компилируется и загружается без ошибок! и на UNO и на NANO но так ничего и не работает, радио не шипит а на мониторе просто точки 50\50 заполняют
ух....все работает радио играет, пришлось правда частоту поменять ,громкость регулируется ....хотя мне громкость надо просто раз выставить и все ....остальное будет идти через аудио проц,а заместо шкалы громкости можно рдс пустить,ну или предусмотреть в прошивке строчку с выставлением начальной громкости, если кому надо,можно использовать или то или то,в идеале нужны примерно такие менюшки, допустим
1. меню..... частота станции, уровень сигнала,в общем как счас есть только шкала регулировки громкости с заменой на рдс бегущей строкой через допустим 10сек бездействия.
остальные меню оставить как было в пред. версии ну или что то подобное той версия которая только с IR приемником,с автонастройкой и ручной настройкой, мне очень понравилась по функционалу ,и менюшки автоматом возвращаются на 1 меню через какое то время,еще желательно сделать IR приемник для пульта,хотя бы просто листание станций.
liman324, спасибо за интересный проект! С Новым годом!
С удовольствием повторил этот проект с упором на мобильность и автономность (пока только на макетной плате). Экран 0,96' (отдельное спасибо за дополнения про настройки экрана), добавил резистор на энкодер (на форуме, кстати, тоже описано, без подтягивающего резистора не работает).
Добавил несколько деталей на схему:
1. На входе антенны разместил колебательный контур C=24pF, L=0,1uH, это заметно увеличило уровень сигнала;
2. В качестве антенны подключил общий провод наушников;
3. На аудио выходе наушников добавил катушки 1uH и заменил конденсаторы на 100uF.
Убрал несколько деталей со схемы:
1. Сначала сделал аппаратную обвязку кнопок для борьбы с дребезгом: C=103, R=10K, но в итоге вообще отказался от кнопок. Всё управление сделал на одном энкодере.
Для этого пришлось немного изменить код. Общий перечень изменений:
1. Немного снизил значение переменной RSS, до 23, что бы автосканом сохранялось больше станций.
2. Немного увеличил массив для хранения станций - до 25, это почти все станции у нас.
3. Убрал кнопки на 2 и 3 пинах и режим standby. Мне это не нужно. После отладки убрал работу с монитором порта.
4. Слегка доработал работу с кнопкой энкодера. Теперь схема стала совсем простой. Работа с меню будет выглядеть так:
- Короткое нажатие в режиме Громкость или Каналы переключает между режимами, поворот энкодера добавляет/убавляет значения.
- Длинные нажатия больше 500 миллисекунд переключают между Громкость/Ручная подстройка/Автоскан. Запуск автоскана - короткое нажатие на кнопку энкодера.
Что буду доделывать - питание от аккумулятора 3,7В. Нужно будет:
1. Аккумулятор.
2. Модуль dd05cvsa.
3. Какой-нибудь USB разъём для зарядки.
4. Два резистора 10K для измерительной линии на аналоговые входы контроллера.
5. Добавить в код обработку измерений и вывод состояния батареи (но и без этого п.4 и 5 будет работать).
6. Включение/выключение ползунковым выключателем. С кнопкой на цифровом входе мне не нравится, что контроллер всё время включен, это расходует заряд батареи.
Скетч на текущий момент выглядит так. Отдаю "как есть".
#define FIX_BAND RADIO_BAND_FM
#define RSS 23
#define DELAY_CH 500
#include <Wire.h>
#include <radio.h> // [url]http://rcl-radio.ru/wp-content/uploads/2023/08/radio.zip[/url]
#include <RDA5807M.h> // [url]http://rcl-radio.ru/wp-content/uploads/2023/08/RDA5807-master.zip[/url]
#include <RDSParser.h> // >> radio.h
#include <MsTimer2.h> // [url]http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip[/url]
#include <Encoder.h> // [url]http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip[/url]
#include <U8glib.h> // [url]https://github.com/olikraus/u8glib/[/url]
#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
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST);
Encoder myEnc(9, 8);// DT, CLK
int v_pos, menu, vol, f0, f_scan[25], k, i1=8700, i;
float f;
long oldPosition = -999, newPosition, times, times1;
bool w, w2, t, lngbtn, shtbtn, autoscan;
byte start1, start;
int z;
const int buttonEncPin = 10; // Пин для кнопки энкодера
const int LONG_PRESS_TIME = 500; // 500 milliseconds время длинного нажатия
int lastState = HIGH;
int currentState;
unsigned long pressedTime = 0;
unsigned long releasedTime = 0;
unsigned long countTime = 0;
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<25;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(buttonEncPin,INPUT_PULLUP); // encoder SW
pinMode(2,INPUT_PULLUP); // КНОПКА SET
MsTimer2::set(1, to_Timer);MsTimer2::start();
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(2000);
}
void loop(){
if(start==0){radio.setBandFrequency(FIX_BAND, f);delay(100);radio.getRadioInfo(&info);start=1;}
//////////////////////////////////////////////////////////////////////////////////////////////////
autoscan = 0;
currentState = digitalRead(buttonEncPin);
if (currentState == LOW && lastState == HIGH) {
pressedTime = millis();
while (digitalRead(buttonEncPin) == LOW) {
countTime = countTime + 5;
delay(5);
if(countTime >= LONG_PRESS_TIME) {
break;
}
}
releasedTime = millis();
long pressDuration = releasedTime - pressedTime;
if( pressDuration < LONG_PRESS_TIME ) {
shtbtn = 1;
lngbtn = 0;
}
if( pressDuration > LONG_PRESS_TIME ) {
shtbtn = 0;
lngbtn = 1;
}
}
lastState = digitalRead(buttonEncPin);
countTime = 0;
if(shtbtn == 1 && menu<2){menu++;if(menu>1){menu=0;}w=1;w2=1;lngbtn=0;shtbtn=0;delay(200);}
if(shtbtn == 1 && menu==2){autoscan=1;lngbtn=0;shtbtn=0;delay(200);}
if(lngbtn == 1 && menu<2){menu=2;times=millis();w=1;w2=1;lngbtn=0;shtbtn=0;delay(200);}
if(lngbtn == 1 && menu==2){menu=3;times=millis();times1=millis()-10000;w=1;w2=1;lngbtn=0;shtbtn=0;delay(200);}
if(lngbtn == 1 && menu==3){menu=0;times=millis();w=1;w2=1;lngbtn=0;shtbtn=0;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);
}
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>24){k=24;}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 && autoscan){// АВТО ПОИСК КАНАЛОВ
for(int i=10;i<301;i++){EEPROM.update(i,0);}
for(int c=0;c<25;c++){f_scan[c]=EEPROM.read(10+c)*100+EEPROM.read(100+c);}
for(i=0;i<25;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;
}
if(menu == 2 && !autoscan) {
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;}
Если кому понадобится вариант скетча под ESP32-C3 (без режима stendby, но можно вернуть)
#define FIX_BAND RADIO_BAND_FM
#define RSS 25
#define DELAY_CH 500
#define sizeL 21
#include <Arduino.h>
#include <U8g2lib.h> // https://github.com/olikraus/U8g2_Arduino
#include <Wire.h>
#include <SPI.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 <Encoder.h> // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip
#include <EEPROM.h>
RDA5807M radio;
RADIO_INFO info;
U8G2_SH1106_128X64_NONAME_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 4, /* data=*/ 6, /* cs=*/ 7, /* dc=*/ 2, /* reset=*/ 0);
Encoder myEnc(21, 20);// DT, CLK
int v_pos,menu,vol,f0,f_scan[10],k,i1=8700,i;
float f;
long oldPosition = -999,newPosition, times, times1;
bool w,w2,t;
byte start1,start;
int z;
void setup(){
delay(300);
Wire.begin(8,9);//SDA SCL
u8g2.begin();
u8g2.firstPage();do {u8g2.setFont(u8g_font_profont12r);
u8g2.drawStr(40,20,"STARTING");
}
while( u8g2.nextPage() );
EEPROM.begin(301);
if(EEPROM.read(300)!=0){for(int i=0;i<301;i++){EEPROM.write(i,0);};EEPROM.commit();}
vol=EEPROM.read(0);
for(int c=0;c<10;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(3,INPUT_PULLUP); // КНОПКА SET
Serial.begin(9600);
radio.init();
radio.debugEnable();
radio.setBandFrequency(FIX_BAND, f);
radio.setVolume(vol);
radio.setMono(false);
radio.setMute(false);
u8g2.firstPage();do {u8g2.setFont(u8g_font_profont12r);
u8g2.drawStr(40,20,"RDA5807M");
u8g2.drawStr(40,50,"RADIO FM");
}
while( u8g2.nextPage() );
menu=0;delay(1000);
}
void loop(){newPosition = myEnc.read()/4;
if(start==0){radio.setBandFrequency(FIX_BAND, f);delay(100);radio.getRadioInfo(&info);start=1;}
//////////////////////////////////////////////////////////////////////////////////////////////////
if(digitalRead(10)==LOW && menu<2){menu++;if(menu>1){menu=0;}w=1;w2=1;delay(200);}
if(digitalRead(3)==LOW && menu<2){menu=2;times=millis();w=1;w2=1;delay(200);}
if(digitalRead(3)==LOW && menu==2){menu=3;times=millis();times1=millis()-10000;w=1;w2=1;delay(200);}
if(digitalRead(3)==LOW && menu==3){menu=0;times=millis();w=1;w2=1;delay(200);}
//////////////////////////////////////////////////////////////////////////////////////////////////
if(menu==0){ // КАНАЛЫ
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>9){k=9;}if(k<0){k=0;}times=millis();start=0;f=f_scan[k];}
u8g2.firstPage();do {
if(f_scan[k]!=0){u8g2.setFont(u8g_font_profont29r);u8g2.setCursor(5, 20);u8g2.print((float)f_scan[k]/100);
u8g2.setFont(u8g_font_profont12r);u8g2.drawStr(110,20,"MHz");}
else{u8g2.setFont(u8g_font_profont17r);u8g2.drawStr(45, 18,"N/A");}
u8g2.drawLine(0, 25, 128, 25); u8g2.setFont(u8g_font_profont12r);
u8g2.drawStr(0,36,"CHANNEL");u8g2.setCursor(48, 36);u8g2.print(k+1);
u8g2.drawLine(0, 52, 128, 52);
radio.getRadioInfo(&info);
u8g2.setCursor(0, 64);u8g2.print(info.rssi);u8g2.drawStr(15,64,"dBm |");
u8g2.drawStr(50,64,info.tuned ? "TUNED" : "-----");
u8g2.drawStr(80,64,info.stereo ? " STEREO " : " MONO ");
}
while( u8g2.nextPage() );
}
////////////////////////////////////////////////////////////////////////////////////////
if(menu==1){ // ГРОМКОСТЬ
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);}
u8g2.firstPage();do {
u8g2.setFont(u8g_font_profont29r);u8g2.setCursor(5, 20);u8g2.print(f/100);
u8g2.setFont(u8g_font_profont12r);u8g2.drawStr(110,20,"MHz");
u8g2.drawLine(0, 25, 128, 25);
u8g2.drawStr(0,36,"VOLUME");for(int v_pos=0; v_pos<vol*4+1;v_pos+=4){u8g2.drawBox(v_pos+53,28, 2, 8);}
u8g2.drawLine(0, 52, 128, 52);
radio.getRadioInfo(&info);
u8g2.setCursor(0, 64);u8g2.print(info.rssi);u8g2.drawStr(15,64,"dBm |");
u8g2.drawStr(50,64,info.tuned ? "TUNED" : "-----");
u8g2.drawStr(80,64,info.stereo ? " STEREO " : " MONO ");
}
while( u8g2.nextPage() );
}
/////////////////////////////////////////////////////////////////////////////////////////
if(menu==2){// АВТО ПОИСК КАНАЛОВ
if(digitalRead(10)==LOW){
for(int i=10;i<301;i++){EEPROM.write(i,0);EEPROM.commit();}
for(int c=0;c<10;c++){f_scan[c]=EEPROM.read(10+c)*100+EEPROM.read(100+c);}
for(i=0;i<10;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.write(10+i,f_scan[i]/100);
EEPROM.write(100+i,f_scan[i]-(f_scan[i]/100)*100);if(i1>=10800){f_scan[i]=0;}break;}
u8g2.firstPage();do {
u8g2.setFont(u8g_font_profont29r);u8g2.setCursor(5, 20);u8g2.print((float)i1/100);
u8g2.setFont(u8g_font_profont12r);u8g2.drawStr(110,20,"MHz");
u8g2.drawLine(0, 25, 128, 25);
u8g2.drawStr(5,36,"CH");u8g2.setCursor(20, 36);u8g2.print(i);
u8g2.setFont(u8g_font_profont12r);u8g2.setCursor(50, 36);u8g2.print((float)f0/100);u8g2.drawStr(110,36,"MHz");
u8g2.drawLine(0, 52, 128, 52);
u8g2.setCursor(0, 64);u8g2.print(info.rssi);u8g2.drawStr(15,64,"dBm |");
u8g2.drawStr(50,64,info.tuned ? "TUNED" : "-----");
u8g2.drawStr(80,64,info.stereo ? " STEREO " : " MONO ");
}
while( u8g2.nextPage() );
}}
delay(1000);times=millis();i1=8700;k=0;start1=0;menu=1;}
u8g2.firstPage();do {
u8g2.setFont(u8g_font_profont12r);
u8g2.drawStr(40,20,"AUTOSCAN");
u8g2.drawStr(30,40,"PRESS BUTTON");
}while( u8g2.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;}
u8g2.firstPage();do {
u8g2.setFont(u8g_font_profont29r);u8g2.setCursor(5, 20);u8g2.print(f/100);
u8g2.setFont(u8g_font_profont12r);u8g2.drawStr(110,20,"MHz");
u8g2.drawLine(0, 25, 128, 25);
if(millis()-times1<1000){u8g2.drawStr(50,36,"SAVE");}
else{u8g2.drawStr(15,36,"FREQUENCY TUNING");}
u8g2.drawLine(0, 52, 128, 52);
u8g2.setCursor(0, 64);u8g2.print(info.rssi);u8g2.drawStr(15,64,"dBm |");
u8g2.drawStr(50,64,info.tuned ? "TUNED" : "-----");
u8g2.drawStr(80,64,info.stereo ? " STEREO " : " MONO ");
if(t==1){f_scan[k]=f;t=0;EEPROM.write(10+k,f_scan[k]/100);EEPROM.write(100+k,f_scan[k]-(f_scan[k]/100)*100);EEPROM.commit();}
}
while( u8g2.nextPage() );
}
delay(10);
if(millis()-times>5000 && w==1){EEPROM.write(0,vol);EEPROM.write(3,k);EEPROM.write(1,f_scan[k]/100);
EEPROM.write(2,f_scan[k]-(f_scan[k]/100)*100);EEPROM.commit();w=0;}
}
forum.rcl-radio.ru → Тестирование скетчей → Радио RDA5807M
Форум работает на PunBB, при поддержке Informer Technologies, Inc
|