#5 Програмування Arduino » Помогите сделать многоуровневое меню на енкодере. » 2016-07-28 08:24:05

electronhic
відповідей: 1

Помогите сделать многоуровневое меню на енкодере.

Хочу собрать радио на RDA5807M + екран 1602 + енкодер с кнопкой.

Как я хочу чтоб оно работало:

1)крутим енкодер в лево-уменьшается громкость
2)крутим енкодер в право-увеличивается громкость
3)нажали отпустили кнопку-произошол автопоиск следующего канала
4)нажали и держим кнопку-попадаем в меню настроек
5)ничего не трогаем в меню-происходит автовыход с меню

Коды и2с для RDA5807M с ними у меня проблем нет.Немогу осилить написать структуру и алгоритм меню

P.S.: в меню хочу сделать все настройки которые только есть у етого радио в даташите(примерно 40 пунктов меню).Не комерция.Помогите кто чем может big_smile

#7 Програмування Arduino » RDA5807M ПОМОГИТЕ =) » 2016-03-23 15:50:53

electronhic
відповідей: 8

RDA5807M
   
I2C Scanner
Scanning...
I2C device found at address 0x10 !
I2C device found at address 0x11 !
I2C device found at address 0x60 !
done

RDA5807M_datasheet_v1.1.pdf

// Programm: fm_radio_module_em5807m_rev100.ino
// Language: Arduinio C++
// Hardware: Arduino Nano 3.0 + EM5807M module with RDA5807M Chip.
// Version:  1.00
// Autor:    www.5v.ru
// Link:     www.5v.ru/start/em5807m-arduino-nano-30.htm

// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

#include <Wire.h>               // I2C-Library

double f_ini=115;             // Стартовая частота настройки приемника. (Изменяем на нужную).

void setup()                    // Инициализация.
{
    // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  Wire.begin();                 // Инициализация двухпроводной шины I2C.
  setFrequency(f_ini);          // Вызываем фукнкцию загрузки частоты настройки в модуль EM5807M.
}

void loop()                     // Основной цикл программы
{
  // Здесь можем написать нашу самую лучшую программу, которая будет работать так как нам нужно.
  
  f_ini = 91.0;
  setFrequency(f_ini);
  delay(10000);

  f_ini = 91.4;
  setFrequency(f_ini);
  delay(10000);

  f_ini = 92.1;
  setFrequency(f_ini);
  delay(10000);

  f_ini = 100.2;
  setFrequency(f_ini);
  delay(10000);

  f_ini = 101.0;
  setFrequency(f_ini);
  delay(10000);

  f_ini = 101.6;
  setFrequency(f_ini);
  delay(10000);

  f_ini = 102.4;
  setFrequency(f_ini);
  delay(10000);

  f_ini = 102.9;
  setFrequency(f_ini);
  delay(10000);

  f_ini = 103.3;
  setFrequency(f_ini);
  delay(10000);

  f_ini = 103.7;
  setFrequency(f_ini);
  delay(10000);

  f_ini = 104.1;
  setFrequency(f_ini);
  delay(10000);

  f_ini = 104.5;
  setFrequency(f_ini);
  delay(10000);

  f_ini = 105.0;
  setFrequency(f_ini);
  delay(10000);

  f_ini = 106.1;
  setFrequency(f_ini);
  delay(10000);

  f_ini = 107.1;
  setFrequency(f_ini);
  delay(10000);

  f_ini = 107.5;
  setFrequency(f_ini);
  delay(10000);
}
  

void setFrequency(double fmhz)  // Функция загрузки частоты настройки в модуль EM5807M.
{
  int  frequencyB = 4 * (fmhz * 1000000 + 225000) / 32768;
  char frequencyH = frequencyB >> 8;     // Старший байт.
  char frequencyL = frequencyB & 0XFF;   // Накладываем маску 0xFF на младший байт.
  Wire.beginTransmission(0x60);          // Адрес чипа RDA5807M
  Wire.write(frequencyH);                // Старший байт.
  Wire.write(frequencyL);                // Младший байт.
  Wire.write(0xB8);                      // 1011 1000     =Стерео
  Wire.write(0x10);                      // 0001 0000
  Wire.write((byte)0x00);                // 
  Wire.endTransmission();                // формируем I2C-Stop.
  lcd.clear();
  lcd.print(f_ini);
  lcd.print("MHz");
}

Кто поможет освоить етот модуль?Интересует регулировка громкости и т д.всё что есть в даташите.

Підвал форуму