| Ваш IP: 18.206.187.81 | Online(20) - гости: 15, боты: 5 | Загрузка сервера: 0.1 ::::::::::::


Радиомодуль RRD_102v 2.0 на чипе RDA5807M + ИК-модуль VS1838B (Arduino)

На странице https://rcl-radio.ru/?p=53149 был представлен пример работы радиомодуля RRD_102v 2.0 на чипе RDA5807M совместно с Arduino Nano. На этой странице приведен пример использования ИК-модуля VS1838B для управления работой радиомодуля RRD_102v 2.0, регулировка громкости, выбор каналов, автопоиск и др. будет осуществляться при помощи пульта управления.

На рисунке показано изображения пульта под команды которого написан скетч, но пульт можно применить другой, при этом коды кнопок будут соответственно другие. Даже если Вы будете использовать такой же пульт, то вероятней всего коды кнопок будут отличатся. Но в мониторе порта Вы сможете посмотреть коды кнопок и вписать в скетч свои значения.

Технические характеристики ИК-модуля VS1838B:

  • Потребляемый ток: 0,5 мА
  • Рабочая частота: 38 КГц
  • Расстояние приема сигнала: 20 м
  • Эффективный угол приема сигнала: 90˚
  • Рабочее напряжение (приемник): 2,7 — 5,5 В
  • Рабочее напряжение (модуль): 2,7 — 5,5 В

В меню четыре раздела, первый раздел «Громкость», в нем можно регулировать громкость (кнопки < и >) которая имеет 16 уровней, на экран выводится индикатор громкости, при не активности ИК-модуля через 10 сек выводится информация о канале и RDS канала (RDS «Radio Data System» — радиовещательная система для передачи на ультракоротких волнах вместе со звуковым сигналом небольшого количества цифровой информации).

Переход по разделам осуществляется при помощи кнопок «вверх» и «низ».

Второй раздел меню позволяет переключать каналы (кнопки < и >), которые предварительно были занесены в память при помощи третьего раздела меню — «автосканирование». Так же каналы можно переключать при помощи кнопок пульта 0-9.

Раздел «автосканирование» позволяет отсканировать весь диапазон и автоматически выбрать каналы которые имеют достаточно большой уровень сигнала. Для запуска сканирования необходимо нажать кнопку «ОК».

Последний четвертый раздел позволяет в ручном режиме изменить частоту канала, при этом если частота канала была изменена, то через 10 секунд (при не активности ИК-модуля) произойдет сохранение частоты канала в энергонезависимую память.

Все частоты каналов (10 каналов), текущий канал и уровень громкости сохраняются в энергонезависимой памяти через 60 секунд после не активности ИК-модуля.

Кнопка «#» позволяет перейти в раздел «Громкость» из любого раздела, кнопка «*» включает режим MUTE.

#include <IRremote.h>
#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   
IRrecv irrecv(9); // указываем вывод модуля IR приемника
decode_results ir;
RDA5807M radio; 
RADIO_INFO info;
RDSParser rds;
char s[12];
int menu,k,f_scan[10],f,i1=8700;
byte vol,bass,z,w,start,start1,g1,g2,gk1,gk2,gp1,gp2,mute,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<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;
  lcd.begin(16, 2);
  Serial.begin(9600);
  irrecv.enableIRIn(); // запускаем модуль IR
  radio.init();
  radio.debugEnable();
 lcd.createChar(0,a1);
  radio.setBandFrequency(FIX_BAND, f);
  radio.setVolume(vol);
  radio.setMono(false);
  radio.setMute(mute);
  radio.attachReceiveRDS(RDS_process);
  rds.attachServicenNameCallback(DisplayServiceName);
delay(400);
} 
 
void loop() {
  radio.formatFrequency(s, sizeof(s));
  if ( irrecv.decode( &ir )) {delay(200);Serial.print("0x");Serial.println( ir.value,HEX);irrecv.resume();}// IR приемник
 
  if(ir.value==0xFF18E7){menu++;radio.getRadioInfo(&info);cl();if(menu>3){menu=0;}}// меню кнопка вверх 0xFF18E7
  if(ir.value==0xFF4AB5){menu--;radio.getRadioInfo(&info);cl();if(menu<0){menu=3;}}// меню кнопка вниз 0xFF4AB5
 
  if(start==0){radio.setBandFrequency(FIX_BAND, f);delay(400);radio.getRadioInfo(&info);start=1;}
 
 
 if(menu==0){// ГРОМКОСТЬ
   kan();
   if(ir.value==0xFF5AA5){vol++;g1=1;g2=0;if(vol>15){vol=15;}radio.setVolume(vol);cl2();}// кнопка > 0xFF5AA5
   if(ir.value==0xFFFFFFFF and g1==1){vol++;g2=0;if(vol>15){vol=15;}radio.setVolume(vol);cl2();}// кнопка >>>>>>
   if(ir.value==0xFF10EF){vol--;g1=0;g2=1;if(vol>16){vol=0;}radio.setVolume(vol);cl2();}// кнопка < 0xFF10EF
   if(ir.value==0xFFFFFFFF and g2==1){vol--;g1=0;if(vol>16){vol=0;}radio.setVolume(vol);cl2();}// кнопка <<<<<<
    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(ir.value==0xFF5AA5){k++;gk1=1;gk2=0;if(k>9){k=9;}f=f_scan[k];cl();}// кнопка > 0xFF5AA5
    if(ir.value==0xFFFFFFFF and gk1==1){k++;gk2=0;if(k>9){k=9;}f=f_scan[k];cl();}// кнопка >>>>>>
    if(ir.value==0xFF10EF){k--;gk1=0;gk2=1;if(k<0){k=0;}f=f_scan[k];cl();}// кнопка < 0xFF10EF
    if(ir.value==0xFFFFFFFF and gk2==1){k--;gk1=0;if(k>9){k=9;}f=f_scan[k];cl();}// кнопка <<<<<<
    if(start1==0){f=f_scan[k];start=0;start1=1;}
      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(ir.value==0xFF38C7){// кнопка OK 0xFF38C7
      ir.value=0;
    for(int i=0;i<10;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(ir.value==0xFF5AA5){gp1=1;gp2=0;f=f+10;if(f<8700){f=8700;}t=1;cl1();}// кнопка > 0xFF5AA5
    if(ir.value==0xFFFFFFFF and gp1==1){gp2=0;f=f+10;if(f<8700){f=8700;}t=1;cl1();}// кнопка >>>>>>
    if(ir.value==0xFF10EF){gp1=0;gp2=1;f=f-10;if(f>10800){f=10800;}t=1;cl1();}// кнопка < 0xFF10EF
    if(ir.value==0xFFFFFFFF and gp2==1){gp1=0;f=f-10;if(f>10800){f=10800;}t=1;cl1();}// кнопка <<<<<< 
     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();}
 if(ir.value==0xFFB04F){ir.value=0;menu=0;time=millis();lcd.clear();}// кнопка # 0xFFB04F
 
   if(ir.value==0xFF6897){mute++;ir.value=0;delay(200);// кнопка * 0xFF6897
   if(mute>1){mute=0;menu=0;start=0;time=millis();lcd.clear();}
   if(mute==1){menu=-1;radio.setMute(mute);lcd.clear();lcd.setCursor(6,0);lcd.print("MUTE");}}
 
} // LOOP
 
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 kan1(){ir.value=0;delay(200);f=f_scan[k];w=1;time=millis();start=0;lcd.clear();}
void cl(){ir.value=0;time=millis();start=0;w=1;delay(200);lcd.clear();}
void cl1(){ir.value=0;time=millis();start=0;w=1;delay(200);}
void cl2(){ir.value=0;time=millis();w=1;delay(200);lcd.clear();}
void kan(){
   if(ir.value==0xFF9867){k=0;kan1();}// канал 0 кнопка 0 0xFF9867
   if(ir.value==0xFFA25D){k=1;kan1();}// канал 1 кнопка 1 0xFFA25D
   if(ir.value==0xFF629D){k=2;kan1();}// канал 2 кнопка 2 0xFF629D
   if(ir.value==0xFFE21D){k=3;kan1();}// канал 3 кнопка 3 0xFFE21D
   if(ir.value==0xFF22DD){k=4;kan1();}// канал 4 кнопка 4 0xFF22DD
   if(ir.value==0xFF02FD){k=5;kan1();}// канал 5 кнопка 5 0xFF02FD
   if(ir.value==0xFFC23D){k=6;kan1();}// канал 6 кнопка 6 0xFFC23D
   if(ir.value==0xFFE01F){k=7;kan1();}// канал 7 кнопка 7 0xFFE01F
   if(ir.value==0xFFA857){k=8;kan1();}// канал 8 кнопка 8 0xFFA857
   if(ir.value==0xFF906F){k=9;kan1();}// канал 9 кнопка 9 0xFF906F
}

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

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

Случайные статьи

  • TDA7448 — шести канальный регулятор громкости (Arduino)

    TDA7448 — шести канальный регулятор громкости (Arduino)

    ИМС TDA7448 представляет собой шести канальный регулятор громкости, регулировка громкости независимая для каждого канала. Технические характеристики TDA7448: Напряжение питания от 4,75 до 10 В (9 рекомендуемое) Ток потребления 7 мА Максимальное входное напряжение (THD = 0.3%) 2.5 Vrms Отношение сигнал / шум 100 дБ Частотный диапазон от 20 до 20000 …Подробнее...
  • Двухтональная сирена на NE555

    Двухтональная сирена на NE555

    На рисунке показана схема простой двух тональной сирены выполненной на двух таймерах NE555. Работа схемы очень проста, таймеры представляют собой два генератора, низкочастотный генератор (первый слева) управляет работой второго высокочастотного генератора (уменьшая и увеличивая частоту генератора), далее импульсы поступают на усилитель выполненный на транзисторе VT1 к эмиттеру которого подключен 8 …Подробнее...
  • Пайка (видео ролики)

    Пайка микросхем горячим воздухом 08:24   http://video.yandex.ru/users/sales-chip-dip-ru/view/666/ Температурный режим пайки 03:05   http://video.yandex.ru/users/sales-chip-dip-ru/view/363/ Краткий обзор химии для пайки 03:13   http://video.yandex.ru/users/sales-chip-dip-ru/view/51/Подробнее...
  • LM4861 маломощный миниатюрный  моно усилитель 1.1 Вт

    LM4861 маломощный миниатюрный моно усилитель 1.1 Вт

    ИМС LM4861 представляет собой миниатюрный (корпус SOIC) усилитель звуковой частоты с выходной мощностью 1,1 Вт. ИМС имеет тепловую защиту, КНИ не превышает 1% при сопротивлении нагрузки 8 Ом и выходной мощности 1 Вт. Максимальная выходная мощность 1,5 Вт при КНИ 10%. Усилитель снабжен режимом малого энергопотребления (режим отключения усилителя — …Подробнее...
  • НОМЕНКЛАТУРА ЛОГИЧЕСКИХ ЦИФРОВЫХ МИКРОСХЕМ СЕРИИ 74 ШИРОКОГО ПРИМЕНЕНИЯ

    Простые логические микросхемы серии 74 широко распространены в мире и выпускаются многими фирмами. Обычно обозначение этих микросхем содержит в себе ряд элементов. Например, SN74BCT224D состоит из пяти частей: первые две буквы обозначают фирму-производителя: DM . Motorola, CD . Harris, MM . Fairchild Semiconductor, National Semiconductor, SN. Texas Instruments, фирма Philips …Подробнее...