Тут явно дело не в соединении, так как скетч для 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);
}