-
20.09.2019, 14:53 #1
- Регистрация
- 10.10.2016
- Возраст
- 69
- Сообщений
- 9
- Поблагодарили
- 1
- Поблагодарил
- 1
ARDUINO & RDA5807 скетч
Здравствуйте,
Нужна ваша помощ.Сделал FM радио на Arduino и RDA5807.
Всё работает отлично.Можно ходить по заранее запрограмированным частотам
при помощи валкодера.
Но хочется,чтобы частота последней станции заносилась в
память EEPROM,и при следующем включении радио запускалась эта последняя станция.
Подправте пожалста мой скетч чтобы заработал EEPROM.
Я в програмировании совсем неразбираюсь,поэтому прошу вашей помощи.
Скетч прилагаю.
#include <EEPROM.h>
#include <Wire.h>
#include <radio.h>
#include <rda5807M.h>
//Set Station frequences
RADIO_FREQ preset[24] = {
8810,9030,9100,9190,9240,9440,9620,9710,9760,9800,9850,10040,10210,
10250,10290,10350,10410,10450,10490,10540,10590,10660,10710,10760
};
const int pin_A = 8;
const int pin_B = 9;
unsigned char encoder_A;
unsigned char encoder_B;
unsigned char encoder_A_prev=0;
int i_sidx=8;
int i_smax=23;
RDA5807M radio;
void setup() {
Serial.begin(57600);
Wire.begin();
pinMode(pin_A, INPUT);
pinMode(pin_B, INPUT);
radio.init();
radio.setBandFrequency(RADIO_BAND_FM, preset[i_sidx]);
radio.setMono(false);
radio.setMute(false);
radio.setVolume(10);
}
void loop()
{
encoder_A = digitalRead(pin_A);
encoder_B = digitalRead(pin_B);
if(!encoder_A && encoder_A_prev)
{
if(encoder_B)
{
i_sidx++;
if (i_sidx>i_smax){i_sidx=0;}
radio.setFrequency(preset[i_sidx]);
delay(100);
}
else
{
i_sidx--;
if (i_sidx<0){i_sidx=i_smax;}
radio.setFrequency(preset[i_sidx]);
delay(100);
}
}
encoder_A_prev = encoder_A;
}Arvydas/LY2F
-
21.09.2019, 23:17 #2
- Регистрация
- 18.03.2013
- Адрес
- Москва (TM)
- Возраст
- 58
- Сообщений
- 838
- Поблагодарили
- 194
- Поблагодарил
- 58
Arduino имеет flash-память с ограниченным количеством циклов перезаписи (около 100 тысяч). Если при каждом переключении на другую станцию ее писать в энергонезависимую память, то она достаточно быстро перестанет сохранять данные.
В вашем случае проще и правильнее записывать частоты настройки (массив preset) в память EEPROM, а для того, чтобы текущую частоту сохраненной для восстановления при включении сделать отдельную кнопку с этой функцией.
Если нужно автоматически это делать, то придется повесить перезапись EEPROM на кнопку отключения питания: сохраняете частоту и выключаете Arduino, но придется
добавить электронное или электромагнитное реле для отключения питания.
Как использовать EEPROM: на любом сайте любителей arduino все показано и разжевано (arduino.ru или arduinoplus.ru).
EEPROM.write и EEPROM.read, а если есть функция EEPROM.update - еще лучше.Последний раз редактировалось RX3AKF; 22.09.2019 в 11:53.
Василий (RX3AKF)
-
21.09.2019, 23:57 #3
- Регистрация
- 03.09.2006
- Адрес
- Челябинск, Россия
- Возраст
- 44
- Сообщений
- 2,290
- Поблагодарили
- 1738
- Поблагодарил
- 6279
--- Теория без практики - ничто! 73 DE R9AAA Александр, к.т.н.
http://radio-wave.ru/ Клуб "РадиоВолна"
http://rn9ape.narod.ru/
|
Социальные закладки