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

Тут явно дело не в соединении, так как скетч для TEA5767 работает

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

void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.println("Я не тупой!");
  delay(3000);
}

Зачем же так грубо! Я уже два дня копошусь с этим скетчем и до сих пор не могу понять, почему на экран не выводится никакой текст, который в этом скетче прописан.

это я про себя, расслабься, так что там в мониторе порта?

Лучше латиницей написать…

Теперь добавляем:

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

LiquidCrystal lcd(9, 10, 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);
  lcd.print("Run?");
  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(2000);  // Ждем 2 секунды
  lcd.setCursor(0, 1);
  lcd.print("Good?");
}

void loop () { }

Да, работает, экран выводит слово Run

А “Good?” выводит (58 строка)?
И модуль “radio” (RDA5807M) сейчас подключен к плате?

ЗЫ: 2-3 секунды ждешь?

Слово good не выводилось

Я так понимаю, без подключенного модуля радио скетч не так будет работать?

как он может что то выводить?

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

а теперь глянь на фотку, я лично не вижу проводов на 9,10

Я для проверки пины дисплея кинул на 7 6 2 3 4 5, а пины кнопок на 10 11 12
Дисплей показывает run, но через 2-3 секунды не показывает good

теперь начинайте со строки 55 комментировать строчки, двигаясь назад. То есть сначала 55-ую, потом 54-ую и так далее… И после каждой запускайте код и смотрите, появится ли надпись GOOD

Согласен с b707, но что-то мне подсказывает, что без подключенного этого модуля ничего работать не будет. У меня нет такой библиотеки, но предполагаю там где-то стоит проверка, что мол “если связи с модулем нет - уходим в бесконечный цикл”…

Ок, сегодня вечером всё проверю, потом отпишусь

Короче, подключил я модуль приёмника согласно схеме - реакция та же самая. В скетче я закомментировал строки:

//radio.init();
и
//radio.setBandFrequency(FIX_BAND, f);
И на дисплей начало появляться GOOD.

З.Ы: Должны ли в скетче быть указаны пины приёмного модуля, как на дисплее?

Согласно схеме - модуль подключается по I2C, а для его подключения используются только пины А4 и А5. Если ничего не перепутано в подключении, то все должно работать. Где-то должен указываться адрес этого модуля (например, 0x3D).

ЗЫ: Смотрю модуль питается от 3.3.В, значит в разрыв проводников SDA и SCL надо поставить резисторы по 1кОм (не известно толерантны ли пины модуля к 5В ? Могут пины модуля погореть.).

ЗЫ2: Можно загрузить в ардуино скетч I2C-сканера и он должен определить адрес модуля (если он “жив” и отвечает).

I2C-сканер
#include <Wire.h>
 
void setup(){
    Wire.begin();    
 
    Serial.begin(9600);
    while (!Serial);
    Serial.println("\nI2C Scanner");
} 
 
void loop(){
    byte error, address;
    int nDevices;
 
    Serial.println("Scanning...");
 
    nDevices = 0;
    for(address = 8; address < 127; address++ ){
        Wire.beginTransmission(address);
        error = Wire.endTransmission();
 
        if (error == 0){
            Serial.print("I2C device found at address 0x");
            if (address<16)
                Serial.print("0");
            Serial.print(address,HEX);
            Serial.println(" !");
 
            nDevices++;
        }
        else if (error==4) {
            Serial.print("Unknow error at address 0x");
            if (address<16)
                Serial.print("0");
            Serial.println(address,HEX);
        } 
    }
    if (nDevices == 0)
        Serial.println("No I2C devices found\n");
    else
        Serial.println("done\n");
 
    delay(5000);
}


Отлично, адреса он находит.
Блин, тогда что вызывает эту неисправность?