Карманное FM Радио на RDA5807, IIC Oled 0.96" и Arduino Pro Mini

b707
Онлайн
Зарегистрирован: 26.05.2017

otrazhenie пишет:

b707 пишет:

ребята, вы о массивах вовсе ничего не слыхали? уберите эти кейсы из кода, не позорьтесь

не нравится код? а покажи свой " правильный"

тогда и посмотрим чей код лучше....авторский  код работает...а вот Ваш....под вопросом пока

похоже и правда не слыхали....

 

GhostLion
GhostLion аватар
Offline
Зарегистрирован: 30.07.2018

Версия 1.7

1. Добавил функцию уровня сигнала.

2. Оптимизировал код.

//FM Radio OLED Copyright by GhostLion v1.7 GOLD

#include <EEPROM.h>
#include <radio.h>
#include <RDA5807M.h>

#include "U8glib.h"
#include "rus6x10.h"
#include "MyDigitsHelveticaBold24.h"

#define Pin_DOWN 4   // левая кнопка 
#define Pin_UP 2     // правая кнопка 
#define Pin_SET 3    // центральная кнопка
#define FIX_BAND 1

const uint8_t Radio [] U8G_PROGMEM = {0x3F, 0xFF, 0xFF, 0xFF, 0xFC, 0x40, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0xC0, 0x01, 0x80,0x00, 0x00, 0xC0, 0x01, 0x8E, 0x88, 0x00, 0xC0, 0x01, 0x88, 0xD8, 0x00, 
0xC0, 0x01, 0x88, 0xA8,0x00, 0xC0, 0x01, 0x8C, 0xA8, 0x00, 0xC0, 0x01, 0x88, 0xA8, 0x00, 0xC0, 0x01, 0x80, 0x00, 0x00,0xC0, 0x01, 0x80, 0x00, 0x00, 0x00, 0x01, 0x81, 0x04, 0x10, 0x41, 0x05, 0x81, 0x04, 0x10, 
0x41,0x05, 0x95, 0x55, 0x55, 0x55, 0x55, 0x95, 0x55, 0x55, 0x55, 0x55, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x01, 0x80,0x00, 0x00, 
0xF8, 0x01, 0x80, 0x00, 0x03, 0xFE, 0x01, 0x80, 0x00, 0x07, 0x03, 0x01, 0x80, 0x00,0x0C, 0x01, 0x81, 0x80, 0x60, 0x18, 0x00, 0xC1, 0x81, 0xF8, 0x18, 0x00, 0x41, 0x83, 0x9C, 0x10,0x00, 0x61, 0x83, 0x0C, 0x30, 
0x00, 0x61, 0x83, 0x0C, 0x30, 0x00, 0x61, 0x83, 0x0C, 0x30, 0x00,0x61, 0x83, 0x9C, 0x10, 0x00, 0x61, 0x81, 0xF8, 0x18, 0x00, 0x41, 0x80, 0x60, 0x18, 0x00, 0xC1,0x80, 0x00, 0x0C, 0x01, 0x81, 0x80, 0x00, 0x07, 
0x03, 0x01, 0x80, 0x00, 0x03, 0xFE, 0x01, 0x80,0x00, 0x00, 0xF8, 0x01, 0x80, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00,0x00, 0x00, 0x02, 0x3F, 0xFF, 0xFF, 0xFF, 0xFC};

const uint8_t Bass[] U8G_PROGMEM = {0x7F, 0xFE, 0x80, 0x01, 0x9B, 0x8D, 0xA2, 0x51, 0xA3, 0x91, 0x9A, 0x4D, 0x8A, 0x45, 0xB3, 0x99,0x80, 0x01, 0x7F, 0xFE};
const uint8_t Stereo[] U8G_PROGMEM = {0x7F, 0xFE, 0x80, 0x01, 0x9B, 0xB9, 0xA1, 0x25, 0xA1, 0x39, 0x99, 0x31, 0x89, 0x29, 0xB1, 0x25,0x80, 0x01, 0x7F, 0xFE};
const uint8_t SM[] U8G_PROGMEM = {0x7F, 0xFE, 0x80, 0x01, 0x8C, 0x51, 0x90, 0xA9, 0x90, 0xA9, 0x8C, 0xA9, 0x84, 0xA9, 0x98, 0x89,0x80, 0x01, 0x7F, 0xFE};

const uint8_t Bat1[] U8G_PROGMEM = {0x7F, 0xFC, 0x80, 0x02, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01,0x80, 0x02, 0x7F, 0xFC};
const uint8_t Bat2[] U8G_PROGMEM = {0x7F, 0xFC, 0x80, 0x02, 0xA0, 0x01, 0xA0, 0x01, 0xA0, 0x01, 0xA0, 0x01, 0xA0, 0x01, 0xA0, 0x01,0x80, 0x02, 0x7F, 0xFC};
const uint8_t Bat3[] U8G_PROGMEM = {0x7F, 0xFC, 0x80, 0x02, 0xA8, 0x01, 0xA8, 0x01, 0xA8, 0x01, 0xA8, 0x01, 0xA8, 0x01, 0xA8, 0x01,0x80, 0x02, 0x7F, 0xFC};
const uint8_t Bat4[] U8G_PROGMEM = {0x7F, 0xFC, 0x80, 0x02, 0xAA, 0x01, 0xAA, 0x01, 0xAA, 0x01, 0xAA, 0x01, 0xAA, 0x01, 0xAA, 0x01,0x80, 0x02, 0x7F, 0xFC};
const uint8_t Bat5[] U8G_PROGMEM = {0x7F, 0xFC, 0x80, 0x02, 0xAA, 0x81, 0xAA, 0x81, 0xAA, 0x81, 0xAA, 0x81, 0xAA, 0x81, 0xAA, 0x81,0x80, 0x02, 0x7F, 0xFC};
const uint8_t Bat6[] U8G_PROGMEM = {0x7F, 0xFC, 0x80, 0x02, 0xAA, 0xA1, 0xAA, 0xA1, 0xAA, 0xA1, 0xAA, 0xA1, 0xAA, 0xA1, 0xAA, 0xA1,0x80, 0x02, 0x7F, 0xFC};
const uint8_t Bat7[] U8G_PROGMEM = {0x7F, 0xFC, 0x80, 0x02, 0xAA, 0xA9, 0xAA, 0xAD, 0xAA, 0xAD, 0xAA, 0xAD, 0xAA, 0xAD, 0xAA, 0xA9,0x80, 0x02, 0x7F, 0xFC};

const uint8_t Vol1[] U8G_PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x60, 0x00, 0x60, 0x00};
const uint8_t Vol2[] U8G_PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x0C, 0x00,0x6C, 0x00, 0x6C, 0x00};
const uint8_t Vol3[] U8G_PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x01, 0x80, 0x0D, 0x80, 0x0D, 0x80,0x6D, 0x80, 0x6D, 0x80};
const uint8_t Vol4[] U8G_PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x01, 0xB0, 0x01, 0xB0, 0x0D, 0xB0, 0x0D, 0xB0,0x6D, 0xB0, 0x6D, 0xB0};
const uint8_t Vol5[] U8G_PROGMEM = {0x00, 0x06, 0x00, 0x06, 0x00, 0x36, 0x00, 0x36, 0x01, 0xB6, 0x01, 0xB6, 0x0D, 0xB6, 0x0D, 0xB6,0x6D, 0xB6, 0x6D, 0xB6};

const uint8_t L1 [] U8G_PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18};
const uint8_t L2 [] U8G_PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x18};
const uint8_t L3 [] U8G_PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x18, 0x00, 0x18, 0x18};
const uint8_t L4 [] U8G_PROGMEM = {0x00, 0x00, 0x7E, 0x00, 0x3C, 0x00, 0x18, 0x00, 0x18, 0x18};
const uint8_t L5 [] U8G_PROGMEM = {0xFF, 0x00, 0x7E, 0x00, 0x3C, 0x00, 0x18, 0x00, 0x18, 0x18};

const unsigned int Station[] = {8750,9240,9370,9410,9620,9740,9800,9840,9890,9950,10040,10120,10170,10210,10250,10290,10370,10460,10510,10570,10620,10710,10790};
byte NK = 23; // количество каналов


byte v,k,m,rs, flag1=1,flag2=0,flag3=0;
int Voltage;
unsigned int s,s2;
boolean b,ms,sm,flag=1,MODE=1;
long TimeOut;

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);
RDA5807M radio; 

void setup()
{
pinMode(Pin_DOWN,INPUT_PULLUP);
pinMode(Pin_UP,INPUT_PULLUP);
pinMode(Pin_SET,INPUT_PULLUP); 

Inicial();
}

void loop()
{
Parsing();
Menu();
Energy();  
}
//==============================================
void Inicial()
{
 u8g.firstPage();  
do {
  u8g.drawBitmapP (5, 16, 5, 40, Radio);
  u8g.setFont(rus6x10);
  u8g.setPrintPos(40,11);u8g.print(F("FM РАДИО"));
  u8g.setPrintPos(55,45);u8g.print(F("v 1.7 GOLD"));
  u8g.setPrintPos(55,55);u8g.print(F("By GhostLion"));  
   }
while( u8g.nextPage() );

delay(1500);
if (EEPROM[0]!=1)
    {
     EEPROM[0]=1;
     EEPROM[1]=5;
     EEPROM[2]=9; // здесь установить номер текущего канала (моя частота 98.90 "Русское радио") (или 0)
     EEPROM[3]=1;
     EEPROM[4]=1;
     EEPROM[5]=0;
     EEPROM[6]=98;  // частота текущей радиостанции
     EEPROM[7]=90;  // "Русское радио"
     EEPROM[8]=1;
    }
v  = EEPROM[1];               // громкость
k  = EEPROM[2];               // текущий канал
m  = EEPROM[3];               // текущее меню
b  = EEPROM[4];               // супербасс
ms = EEPROM[5];               // моно/стерео
s  = EEPROM[6]*100+EEPROM[7]; // текущая частота
sm = EEPROM[8];               // softmute
s2=s;
radio.init();
radio.setVolume(v);
radio.setMono(ms);
radio.setMute(false);
radio.setBassBoost(b);
radio.setSoftMute(sm);  
radio.setBandFrequency(FIX_BAND, s);
readVcc();
}
//================================================
void Parsing()
{
boolean SET=digitalRead(Pin_SET);
boolean UP=digitalRead(Pin_UP);
boolean DOWN=digitalRead(Pin_DOWN);

if(SET==HIGH && flag1==0)
  {
    flag1=1;
  }
if(SET==LOW && flag1==1)
  {
    flag1=0;
    TimeOut=millis();
    if(MODE==1) {m++; flag=1; if(m>7) m=1;}
  }
  
 if(UP==LOW && flag2==1)
  {
    flag2=0;
  }
   if(UP==HIGH && flag2==0)
   {
    if(MODE==1)
    {
    switch(m)
      {
        case 1:{ (v==15?0:v++); radio.setVolume(v); break; }
        case 2:{ b = 1; radio.setBassBoost(b); radio.setBandFrequency(FIX_BAND,s); break; }
        case 3:{ ms = 0; radio.setMono(ms); radio.setBandFrequency(FIX_BAND,s); break; }
        case 4:{sm = 1; radio.setSoftMute(true);radio.setBandFrequency(FIX_BAND,s); break;}
        case 5:{ radio.seekUp(true); delay(3000); s = radio.getFrequency(); Kanal(); break; }
        case 6:{ s=s+10; if (s > 10800) s = 8700; delay(100); radio.setBandFrequency(FIX_BAND,s);Kanal(); break; }
        case 7:{ k++; if (k>NK) k=1; s = Station[k-1]; radio.setBandFrequency(FIX_BAND,s); break;}
      }
   flag=1;
   TimeOut=millis();
    }
   else {(v==15?0:v++);radio.setVolume(v);}
   flag2=1;
   }
   if(DOWN==LOW && flag3==1)
  {
    flag3=0;
  }
   if(DOWN==HIGH && flag3==0)
   {
    if(MODE==1)
    {
    switch(m)
      {
        case 1:{ (v==0?15:v--); radio.setVolume(v); break; }
        case 2:{ b = 0; radio.setBassBoost(b); radio.setBandFrequency(FIX_BAND,s); break; }
        case 3:{ ms = 1; radio.setMono(ms); radio.setBandFrequency(FIX_BAND,s); break; }
        case 4:{sm = 0; radio.setSoftMute(false);radio.setBandFrequency(FIX_BAND,s); break;}
        case 5:{ radio.seekDown(true); delay(3000); s=radio.getFrequency(); Kanal(); break; }
        case 6:{ s=s-10; if (s<8700) s=10800; delay(100); radio.setBandFrequency(FIX_BAND,s); Kanal(); break; }
        case 7:{ k--; if (k<1) k=NK; s = Station[k-1]; radio.setBandFrequency(FIX_BAND,s); break;}
      }
   flag=1;
   TimeOut=millis();
   }
   else {(v==0?15:v--);radio.setVolume(v);}
   flag3=1;
  }
}
//================================================
void Menu()
{
float ch;
if(flag==1 && MODE==1)
{
rs = radio.getRSSI();   
ch=float(s)/100; 
u8g.firstPage();  
do {
u8g.setDefaultForegroundColor();
if(Voltage>85) u8g.drawBitmapP (110, 0, 2, 10, Bat7);
  else if(Voltage>70) u8g.drawBitmapP (110, 0, 2, 10, Bat6);
  else if(Voltage>55) u8g.drawBitmapP (110, 0, 2, 10, Bat5);
  else if(Voltage>40) u8g.drawBitmapP (110, 0, 2, 10, Bat4);
  else if(Voltage>25) u8g.drawBitmapP (110, 0, 2, 10, Bat3);
  else if(Voltage>10) u8g.drawBitmapP (110, 0, 2, 10, Bat2);
  else u8g.drawBitmapP (110, 0, 2, 10, Bat1);
if(v<3) u8g.drawBitmapP (13, 0, 2, 10, Vol1);
  else if(v<7) u8g.drawBitmapP (13, 0, 2, 10, Vol2);
  else if(v<10) u8g.drawBitmapP (13, 0, 2, 10, Vol3);
  else if(v<13) u8g.drawBitmapP (13, 0, 2, 10, Vol4);
  else u8g.drawBitmapP (13, 0, 2, 10, Vol5);
if(ms==0) u8g.drawBitmapP (55, 0, 2, 10, Stereo);
if(b==1) u8g.drawBitmapP (75, 0, 2, 10, Bass);
if(sm==1) u8g.drawBitmapP (35, 0, 2, 10, SM);

u8g.setFont(MyDigitsHelveticaBold24);
if(ch<100) u8g.setPrintPos(30,43); else u8g.setPrintPos(23,43);
u8g.print(ch,1);
u8g.setFont(rus6x10);
u8g.print(" MHz");
if (rs>50) u8g.drawBitmapP (0, 0, 1, 10, L5);
  else if(rs>40)  u8g.drawBitmapP (0, 0, 1, 10, L4);
  else if(rs>30)  u8g.drawBitmapP (0, 0, 1, 10, L3);
  else if(rs>20)  u8g.drawBitmapP (0, 0, 1, 10, L2);
  else u8g.drawBitmapP (0, 0, 1, 10, L1);
if(k!=0){
    u8g.drawRFrame (0,32,18,13,2);
    u8g.setPrintPos(3,42);
    if(k<10) u8g.print("0");
    u8g.print(k);
        }
u8g.drawRFrame (0,51,127,12,3);
u8g.setPrintPos(13,61);
 switch(m)
 {
  case 1: {u8g.print(F("- < ГРОМКОСТЬ > +"));break;}
  case 2: {u8g.print(F(" НЕТ < БАСС > ДА"));break;}
  case 3: {u8g.print(F("НЕТ < СТЕРЕО > ДА"));break;}
  case 4: {u8g.print(F("НЕТ < S.MUTE > ДА"));break;}
  case 5: {u8g.print(F(" <  АВТОПОИСК  >"));break;}
  case 6: {u8g.print(F("<  РУЧ. ПОИСК  >"));break;}
  case 7: {u8g.print(F("  <  КАНАЛЫ  >"));break;}
 
 }


}
while( u8g.nextPage() );     
  flag=0;    
}
}
//================================================
void Energy()
{
 if(MODE==1 && millis()-TimeOut>2000) flag=1;
 if(MODE==1 && millis()-TimeOut>8000)
  {
    u8g.sleepOn(); 
    MODE=0;
    if(v!= EEPROM[1]) EEPROM[1] = v;
    if(k!= EEPROM[2]) EEPROM[2] = k;
    if(m!= EEPROM[3]) EEPROM[3] = m;
    if(b!= EEPROM[4]) EEPROM[4] = b;
    if(ms!=EEPROM[5]) EEPROM[5] = ms;
    if(s2!=s){s2=s;   EEPROM[6] = int(s/100); 
                      EEPROM[7] = s%100;
             }
    if(sm!=EEPROM[8]) EEPROM[8] = sm;         
  }
  if(MODE==0 && millis()-TimeOut<500)
  {
    u8g.sleepOff(); 
    readVcc();
    MODE = 1; 
    flag = 1; 
    m = 7;
  }
}
//===================================================
void readVcc() 
{
#if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
  ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
#else
  ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
#endif
  delay(2); // Wait for Vref to settle
  ADCSRA |= _BV(ADSC); // Start conversion
  while (bit_is_set(ADCSRA, ADSC)); // measuring
  uint8_t low  = ADCL; // must read ADCL first - it then locks ADCH
  uint8_t high = ADCH; // unlocks both
  long result = (high << 8) | low;

  result = 1.080 * 1023 * 1000 / result; // расчёт реального VCC
  Voltage = int(result);
  Voltage = map(Voltage, 3200, 4200, 0, 100);
  Voltage = constrain(Voltage, 0, 100);
}
//=======================================================
void Kanal()
{
  k = 0;
  for(int x = 0; x < NK; x ++)
    {
      if(s == Station[x]) {k = (x+1); break;}
    }   
}

 

aleksandr1612
aleksandr1612 аватар
Offline
Зарегистрирован: 18.12.2017

GhostLion пишет:
Версия 1.7

Огромное спасибо, компилируется на ура, причем любой ваш код, на рождественских праздниках обязательно соберу, с праздниками и еще раз спасибо!

Zummer
Онлайн
Зарегистрирован: 25.11.2019

Заинтересовал проект,в среде ардуино несложно выбрать другой экран,у меня есть ili9341,сложно ли переделать программу?если не сложно то переписывать буду сам

b707
Онлайн
Зарегистрирован: 26.05.2017

Zummer пишет:

Заинтересовал проект,в среде ардуино несложно выбрать другой экран,у меня есть ili9341,сложно ли переделать программу?если не сложно то переписывать буду сам

код перед вами, в нем всего 300 строк. Загляните и оцените, "сложно" это для вас или нет.

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

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Проще будет такой экран купить, как в праэкте

Zummer
Онлайн
Зарегистрирован: 25.11.2019

DetSimen  Зачем мне его покупать если SSD1306 у меня 2 шт и еще одна 32*128,но они мелкие

b707 Насчет программирования-опыт кое какой есть,на уровне новичка, я же просто спросил-можно переделать на другой или нет, я просто не знаю библиотека U2Glib поддерживает ILI9341 или нет,видимо и вам это неизвестно иначе бы просто ответили-"это возможно" либо "это невозможно"

начал соединять ардуино и дисплей,сделаю сам

b707
Онлайн
Зарегистрирован: 26.05.2017

Zummer пишет:

я же просто спросил-можно переделать на другой или нет

 можно

Цитата:
просто не знаю библиотека U2Glib поддерживает ILI9341 или нет

а причем тут это? Возможность переделать скетч от этого не зависит.

Я еще раз повторю - судя по задаваемым вопросам, вам до этого еще очень далеко.

 

Zummer
Онлайн
Зарегистрирован: 25.11.2019

Когда то и вам до этого было далеко но тем не менее вы этого достигли-не так ли? ))) вы же не с пеленок знали ардуино,сами когда-то учились

Ну раз можно буду делать сам,спасибо за ответ,вечерком займусь платой,библиотеку с тачем нашел http://arduino.ru/forum/apparatnye-voprosy/displei-na-ili9341#top но это уже не по вашей теме и здесь лучше не писать,открыть новую тему боюсь-вдруг такая тема уже была (rda5807+ili9341+ds1307+ds18b20) и прикроют мой профиль навсегда хозяева сайта за дублирование темы...

 

Удачи вам и развития проекта!

b707
Онлайн
Зарегистрирован: 26.05.2017

Zummer пишет:

открыть новую тему боюсь-вдруг такая тема уже была - и прикроют мой профиль навсегда хозяева сайта за дублирование темы...

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

aleksandr1612
aleksandr1612 аватар
Offline
Зарегистрирован: 18.12.2017

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

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

aleksandr1612 пишет:

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

пропробуй написать

110 radio.setVolume(15);

 

aleksandr1612
aleksandr1612 аватар
Offline
Зарегистрирован: 18.12.2017

DetSimen пишет:

пропробуй написать

110 radio.setVolume(15);

спасибо помогло, осталось только индикатор подправить и всё ))

СЕРГЕЙ557
Offline
Зарегистрирован: 25.01.2020

подскажите как сделать чтоб экран  все время работал.

 

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

СЕРГЕЙ557 пишет:

подскажите как сделать чтоб экран  все время работал.

Не отключать его, да и всё.  

СЕРГЕЙ557
Offline
Зарегистрирован: 25.01.2020

нет чтобы не тух через 8секунд .как отключить 

 

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Убрать из кода строчки, отключающие экран через 8 секунд. 

СЕРГЕЙ557
Offline
Зарегистрирован: 25.01.2020

подскажите какая строка

Zummer
Онлайн
Зарегистрирован: 25.11.2019

254  u8g.sleepOn();
.............................

268   u8g.sleepOff();

в исходнике http://arduino.ru/forum/proekty/karmannoe-fm-radio-na-rda5807-iic-oled-096-i-arduino-pro-mini?page=1#comment-498933

СЕРГЕЙ557
Offline
Зарегистрирован: 25.01.2020

спосибо ьольшое