Помогите запустить дисплей 1602

Здравствуйте, столкнулся с такой проблемой. Имеется у меня в наличии экран 1602, Arduino Pro Mini и модуль приёмника Rda5807. Решил для начала проверить работу экрана: загрузил прошивку, а на экране белые квадраты. Монтаж проверил много раз, никаких ошибок программа не пишет, с проверочного скетча(Hello World) символы показывает. Скетч прилагается:

#include <Wire.h>
#include <radio.h>
#include <RDA5807M.h>
#include <LiquidCrystal.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[50],f=9290,i1=8800;
int var, af, fo;
byte vol,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=2;
var=0;
af=0;
fo=0;
for(int c=0;c<50;c++)
  {f_scan[c]=0;}
  start=0;
  lcd.begin(16, 2);
  Serial.begin(9600);
  radio.init();
  radio.debugEnable();
  pinMode(8,INPUT);// menu
  pinMode(7,INPUT);// plus
  pinMode(6,INPUT);// minus
  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(8)==HIGH){menu++;lcd.clear();time=millis();radio.getRadioInfo(&info);start=0;w=1;delay(300);if(menu>5){menu=0;}}
 
   if(menu==0) // volume
   {

   if(digitalRead(7)==HIGH){vol++;if(vol>15){vol=15;}w=1;time=millis();radio.setVolume(vol);delay(200);lcd.clear();}
   if(digitalRead(6)==HIGH){vol--;if(vol>16){vol=0;}w=1;time=millis();radio.setVolume(vol);delay(200);lcd.clear();}
    lcd.setCursor(0,0);lcd.print(s); radio.getRadioInfo(&info); lcd.print(info.tuned  ? " t"  : " -"); lcd.print(info.rssi);
        if(fo==0)
           lcd.print(info.stereo ? "S" : "M");
        else
           lcd.print("M"); 

        if(var==0)
           lcd.print("n");
        else
           lcd.print("b"); 
    
    lcd.setCursor(0,1);
  if(millis()-time<3000){for(z=0;z<=vol;z++){lcd.setCursor(z,1);lcd.write((uint8_t)0);}}
 
  if(millis()-time>3000){radio.checkRDS();}  // RDS
   }

   
 
   if(menu==1) //access of memorized stations
   {
    
    if(af==0)
     { 
       lcd.setCursor(0,0);lcd.print("Push UP or DOWN ");
       lcd.setCursor(0,1);lcd.print("to access memory");
     }
    
    
    if(start1==0){f=f_scan[k];start=0;start1=1;}

    if(digitalRead(7)==HIGH){k++;if(k>49){k=0;}delay(200);f=f_scan[k];w=1;time=millis();start=0;lcd.clear();
      lcd.setCursor(0,0);lcd.print("M");lcd.print(k+1);af=1;}
    if(digitalRead(6)==HIGH){k--;if(k<0){k=49;}delay(200);f=f_scan[k];w=1;time=millis();start=0;lcd.clear();
      lcd.setCursor(0,0);lcd.print("M");lcd.print(k+1);af=2;}
    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);
      if(af>0)
      {
      lcd.setCursor(0,1);lcd.print(info.tuned  ? "TUNED"  : "-----");
      lcd.print("  SIGNAL ");lcd.print(info.rssi);
      }
   }   
 
    if(millis()-time>5000 and menu==1){menu=0;time=millis();lcd.clear();}
    
    
    
    
    if(menu==2)// auto scan for stations
    {
      lcd.setCursor(0,0);lcd.print("AUTOSCAN if you");
      lcd.setCursor(0,1);lcd.print("push UP or DOWN");  
    if(digitalRead(7)==HIGH || digitalRead(6)==HIGH){
    for(int i=0;i<50;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>20){f_scan[i]=i1;i1=f_scan[i]+10;if(i1>=10800){f_scan[i]=0;}break;} 
      lcd.setCursor(0,0); lcd.print("AUTOSCAN"); lcd.setCursor(9,0); lcd.print((float)i1/100);
  }
 lcd.clear(); lcd.print("AUTOSCAN"); lcd.setCursor(9,0); lcd.print((float)i1/100);
 lcd.setCursor(0,1);lcd.print(i+1);lcd.print(" ");lcd.print((float)f_scan[i]/100);lcd.print(" MHz   "); 
  }delay(1000);time=millis();i1=8800;

  k=0;start1=0;menu=1;}}   
 
 if(millis()-time>5000 and menu==2){menu=0;time=millis();lcd.clear();}
 
  if(menu==3)// manual adjustment of frequencies
  {
      
      radio.getRadioInfo(&info);
      if(f<8800){f=8800;}; if(f>10800){f=10800;}
      
      lcd.setCursor(0,1);lcd.print(info.tuned  ? "TUNED"  : "-----");
      lcd.print("  SIGNAL ");lcd.print(info.rssi);
      
      if(digitalRead(7)==HIGH)
          {start=0;
          f=f+10;t=1;
          if(f>10800){f=8800;}
          time=millis();
          delay(300);
          
                if(digitalRead(7)==HIGH)
                    {start=0;
                     f=f+90;t=1;
                     if(f>10800){f=10800;}
                     time=millis();
                     delay(300);
                    }
          lcd.setCursor(0,0);lcd.print("manual ");lcd.print((float)f/100);lcd.print("MHz");
          }
    
    if(digitalRead(6)==HIGH)
          {start=0;
          f=f-10;t=1;
          if(f<8800){f=8800;}
          time=millis();
          delay(300);
 
                if(digitalRead(6)==HIGH)
                    {start=0;
                     f=f-90;t=1;
                     if(f<8800){f=8800;}
                     time=millis();
                     delay(300);
                    }
          lcd.setCursor(0,0);lcd.print("manual ");lcd.print((float)f/100);lcd.print("MHz");
       
          }
    
     lcd.setCursor(0,0);lcd.print("manual ");lcd.print((float)f/100);lcd.print("MHz");
    
  }
 
 if(millis()-time>5000 and menu==3){menu=0;time=millis();lcd.clear();}



   if(menu==4)// bass boost
   {
    lcd.setCursor(0,0);lcd.print("Bass Boost");
    lcd.setCursor(0,1); 
    if(var==0)lcd.print("           OFF");
    if(var==1)lcd.print("           ON ");
       if(digitalRead(7)==HIGH) 
           {
           radio.setBassBoost(true);
           var=1; 
           lcd.setCursor(0,1);
           lcd.print("           ON ");
           }
       if(digitalRead(6)==HIGH)
           { 
           radio.setBassBoost(false);
           var=0;
           lcd.setCursor(0,1);
           lcd.print("           OFF");
           }
   } 
   
if(millis()-time>5000 and menu==4){menu=0;time=millis();lcd.clear();}

    if(menu==5)// force mono
   {       
    lcd.setCursor(0,0);lcd.print("Force MONO");
    lcd.setCursor(0,1); 
    if(fo==1)lcd.print("           ON ");
    if(fo==0)lcd.print("           OFF");
       if(digitalRead(7)==HIGH) 
           {
           time=millis(); radio.setMono(true); delay(200);
           fo=1; 
           lcd.setCursor(0,1);
           lcd.print("           ON ");
           }
       if(digitalRead(6)==HIGH)
           { 
           time=millis(); radio.setMono(false); delay(200);
           fo=0;
           lcd.setCursor(0,1);
           lcd.print("           OFF");
           }
   } 
   
if(millis()-time>5000 and menu==5){lcd.clear(); menu=0; time=millis();}
 
} // LOOP

Это означает, что дисплей не инициализирован. Скорее всего из-за неверно подключенного дисплея. Проверим?

А в “Hello World!” соединения такие:

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);  // 12, 11, 5, 4, 3, 2

Сравниваем: 7, 6, 2, 3, 4, 5 и 12, 11, 5, 4, 3, 2 - вообще и рядом не одно и тоже.
Меняй либо в скетче номера пинов либо соединения в схеме.

В Hello World я поменял пины также на 7 6 2 3 4 5 и дисплей показывал символы. А в этом скетче он и с правильными пинами почему-то не инициализируется. Может быть ошибка содержится где-то внизу?

Ну если так, то смотрим ниже и… в низу бардак…

pinMode(7, INPUT); // plus
pinMode(6, INPUT); // minus

Зачем это? Ведь пины 7 и 6 уже задействованы в работе с дисплеем.
За комментируй строки 35 и 36 и попробуй загрузить код в ардуино. О результате сообщи.

ЗЫ: Со схемой было бы проще…

Судя по стилю кода - проще два пина дисплея перекинуть на свободные, чем наоборот…

Спасибо за советы, вечером проверю и потом отпишусь.

Короче, проверил: в скетче сменил пины кнопок на свободные, но реакция та же самая. А вот схема.

ты скетч выложи, там много где надо менять номера пинов

А вот это я для кого писал?

Перекинь два пина дисплея и будет тебе счастье.

Прошу прощения, я недопонял, какие именно два пина дисплея нужно переставить?

те что совпадают с кнопками, очевидно…

А вообще это отличный пример, почему не стоит писать пины цифрами в коде. Были бы они у вас в виде переменных или констатнт - поправили саму константу и все.

1 лайк

Сделай так:

LiquidCrystal lcd(8, 9, 2, 3, 4, 5);// RS,E,D4,D5,D6,D7

А кнопки назад на 7 и 6 верни.

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

Тогда нужно двигаться от простого к сложному. Для начала вот так работает?

#include <Wire.h>
#include <radio.h>
#include <RDA5807M.h>
#include <LiquidCrystal.h>
#include <RDSParser.h>

LiquidCrystal lcd(8, 9, 2, 3, 4, 5);// RS,E,D4,D5,D6,D7

void setup() {

  lcd.begin(16, 2);
  lcd.print("I'm alive !");  
}

loop () {}

[Вылезает такая ошибка

Думаешь я что-то вижу? Скопируй ошибку как текст.

ЗЫ: Блин, а 8й пин тоже оказывается на кнопке был…

C:\Users\RSh\AppData\Local\Temp.arduinoIDE-unsaved2023312-6460-43mgcu.32y8l\sketch_apr12b\sketch_apr12b.ino:7:1: error: ‘LiquidCrystal’ does not name a type
LiquidCrystal lcd(8, 9, 2, 3, 4, 5);// RS,E,D4,D5,D6,D7
^~~~~~~~~~~~~
C:\Users\RSh\AppData\Local\Temp.arduinoIDE-unsaved2023312-6460-43mgcu.32y8l\sketch_apr12b\sketch_apr12b.ino:15:8: error: expected constructor, destructor, or type conversion before ‘;’ token
loop () {}
^
C:\Users\RSh\AppData\Local\Temp.arduinoIDE-unsaved2023312-6460-43mgcu.32y8l\sketch_apr12b\sketch_apr12b.ino: In function ‘void setup()’:
C:\Users\RSh\AppData\Local\Temp.arduinoIDE-unsaved2023312-6460-43mgcu.32y8l\sketch_apr12b\sketch_apr12b.ino:11:3: error: ‘lcd’ was not declared in this scope
lcd.begin(16, 2);
^~~
C:\Users\RSh\AppData\Local\Temp.arduinoIDE-unsaved2023312-6460-43mgcu.32y8l\sketch_apr12b\sketch_apr12b.ino: In function ‘int loop()’:
C:\Users\RSh\AppData\Local\Temp.arduinoIDE-unsaved2023312-6460-43mgcu.32y8l\sketch_apr12b\sketch_apr12b.ino:15:1: error: ambiguating new declaration of ‘int loop()’
loop () {}
^~~~
In file included from C:\Users\RSh\AppData\Local\Temp\arduino-sketch-C1608F138C7BF45E7346D23D2037A52E\sketch\sketch_apr12b.ino.cpp:1:0:
C:\Users\RSh\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino/Arduino.h:155:6: note: old declaration ‘void loop()’
void loop(void);
^~~~

exit status 1

Compilation error: ‘LiquidCrystal’ does not name a type

Я и 8 пин на 10 поменял.

Это как это так? Точно библиотеку подключил?

Да. Первая находится в папке ДОКУМЕНТЫ с остальными библиотеками