Помогите запустить скетч

Тема в разделе "Arduino & Shields", создана пользователем РМАНQW, 12 апр 2023.

  1. РМАНQW

    РМАНQW Нуб

    Здравствуйте, столкнулся с такой проблемой. Захотел сделать приёмник на чипе RDA5807, Arduino Pro Mini и LCD 1602. Решил для начала проверить дисплей. Подключаю всё как по схеме, прошиваю. Дисплей включается, но на нём белые квадраты, причем периодично моргает строка на экране, в мониторе порта показывается какая-то дичь. Монтаж много раз проверял, проверял другие скетчи для проверки дисплея, и всё работает, пины не перепутал. Скетч и фотографию прикладываю.
    Код (C++):
    #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
    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,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);
      radio.init();
      radio.debugEnable();
      pinMode(12,INPUT);// меню
      pinMode(11,INPUT);// плюс
      pinMode(10,INPUT);// минус
    lcd.createChar(0,a1);
      radio.setBandFrequency(FIX_BAND, f);
      radio.setVolume(vol);
      radio.setMono(false);
      radio.setMute(false);
      radio.attachReceiveRDS(RDS_process);
      rds.attachServiceNameCallback(DisplayServiceName);
    delay(400);
    }
    void loop() {
      radio.formatFrequency(s, sizeof(s));
      if(start==0){radio.setBandFrequency(FIX_BAND, f);delay(400);radio.getRadioInfo(&info);start=1;}
      if(digitalRead(12)==HIGH){menu++;lcd.clear();time=millis();radio.getRadioInfo(&info);start=0;w=1;delay(300);if(menu>3){menu=0;}}
       if(menu==0){// ГРОМКОСТЬ
       if(digitalRead(11)==HIGH){vol++;if(vol>15){vol=15;}w=1;time=millis();radio.setVolume(vol);delay(200);lcd.clear();}
       if(digitalRead(10)==HIGH){vol--;if(vol>16){vol=0;}w=1;time=millis();radio.setVolume(vol);delay(200);lcd.clear();}
        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(start1==0){f=f_scan[k];start=0;start1=1;}
        if(digitalRead(11)==HIGH){k++;if(k>9){k=9;}delay(200);f=f_scan[k];w=1;time=millis();start=0;lcd.clear();}
        if(digitalRead(10)==HIGH){k--;if(k<0){k=0;}delay(200);f=f_scan[k];w=1;time=millis();start=0;lcd.clear();}
          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(digitalRead(11)==HIGH || digitalRead(10)==HIGH){
        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(digitalRead(11)==HIGH){f=f+10;t=1;if(f<8700){f=8700;}start=0;time=millis();delay(200);lcd.clear();}
        if(digitalRead(10)==HIGH){f=f-10;t=1;if(f>10800){f=10800;}start=0;time=millis();delay(200);lcd.clear();}
        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();}
    } // 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);}}

    [​IMG]
     

    Вложения:

    • 2.png
      2.png
      Размер файла:
      94,9 КБ
      Просмотров:
      65
  2. User248

    User248 Гик

    В программе сериал настроен на скорость 9600, а в мониторе порта на 600. Одинаковые скорости должны быть.
     
  3. РМАНQW

    РМАНQW Нуб

    Всё то же самое
     

    Вложения:

    • 5.png
      5.png
      Размер файла:
      101,7 КБ
      Просмотров:
      53
  4. parovoZZ

    parovoZZ Гуру

    Контрастность на дисплее отрегулирована?
     
  5. РМАНQW

    РМАНQW Нуб

    Да, отрегулировал
     
  6. Airbus

    Airbus Радиохулиган Модератор

    Проверил Ваш код в железе. Скомпилил , загрузил. Дисплей мерцает и в Порт инфа летит быстро быстро.Вот она!
    [​IMG]
    Как будто в скетче происходит циклический неуправляемый процесс. Проверяйте код! Вы его сами писали? В этом месте ничего не смущает?
    Код (Text):
    if(digitalRead(11)==HIGH)
    Почему HIGH? Оно там по умолчанию HIGH. Такое чувство что все кнопки зажаты одновременно.
     
  7. Airbus

    Airbus Радиохулиган Модератор

    Еще раз проверил дисплей—в Сетапе прописал тестовую строчку на 5 секунд. Она прекрасно высветилась на 5 секунд а потом пошло снова мерцание
    [​IMG]
    Проблема не в дисплее он все прекрасно показывает—проблема в коде. Код выдает на LCD Ересь он ее и показывает. А приемник то хоть работает?
     
  8. User248

    User248 Гик

    В этом скетче при старте загружается информация из EEPROM, а в EEPROM пусто. Может быть есть связь.
     
  9. Bott

    Bott Гик

    Дак а там и должно быть пусто сначала? Если ничего туда не писали. Нет? Кстати тоже непонятно с
    Ну если конечно кнопки не притянуты к GND
     
  10. User248

    User248 Гик

  11. Airbus

    Airbus Радиохулиган Модератор

  12. РМАНQW

    РМАНQW Нуб

    Если приёмник показывает ересь, то как вы исправили это?
    Скетч писал не я, а автор из видео, которое скидывали
     
    Последнее редактирование: 13 апр 2023
  13. РМАНQW

    РМАНQW Нуб

    И такой вопрос, если я подключил к ардуине только дисплей, то может это и быть причиной неправильной его работы?
    З.Ы: приёмник я также проверил, адреса ардуина видит, при помощи монитор порта регулируются громкость и каналы.
    Проблема в самом скетче
     
    Последнее редактирование: 13 апр 2023
  14. User248

    User248 Гик

    Ну так соберите всё устройство полностью и проверьте.
     
  15. РМАНQW

    РМАНQW Нуб

    Дело в том, что я уже подключил и дисплей, и модуль к ардуине, и мерцание при запуске никуда не исчезает. Честно, я уже в растерянности и не знаю, за что хвататься.
     
  16. Airbus

    Airbus Радиохулиган Модератор

    Там другой скетч с IR управлением. Его дорабатывали?
     
  17. РМАНQW

    РМАНQW Нуб

    ТУт бы одно в порядок привести, а там вообще другой принцип управления...(Сложно будет)
    У вас есть предположения касаемо первого скетча, потому что я уже испробовал все варианты, а экран мерцает и ничего не выводит, даже когда собрал вместе и приёмный модуль и дисплей
     
  18. User248

    User248 Гик

    В симуляторе Wokwi этот скетч вообще не работает. Зависает в районе функции setup и до функции loop даже не доходит.
     
  19. User248

    User248 Гик

    А в скетче по этой ссылке имеется ошибка в конце функции setup.

    http://rcl-radio.ru/?p=53162

    Сейчас так:
    Код (C++):

    rds.attachServicenNameCallback(DisplayServiceName);
     
    А должно быть так:
    Код (C++):

    rds.attachServiceNameCallback(DisplayServiceName);
     
    Не понятно, как это вообще собиралось у автора.
     
  20. РМАНQW

    РМАНQW Нуб

    Я эту ошибку давно исправил, потому что с ней код не компилися.