Пытаюсь собрать часы по проекту https://portal-pk.ru/news/256-samodelnye-chasy---pleer-na-arduino-s-sensornym-displeem.html. Использую Arduino UNO и экран NX4832K035. Пока подсоединил только Arduino, экран и часы, Но на экран время не выводится. подскажите в чем может быть причина
Пытаюсь собрать часы по проекту https://portal-pk.ru/news/256-samodelnye-chasy---pleer-na-arduino-s-sensornym-displeem.html. Использую Arduino UNO и экран NX4832K035. Пока подсоединил только Arduino, экран и часы, Но на экран время не выводится. подскажите в чем может быть причина
Данные не предаются с Arduino на дисплей. Проверяйте правильно ли все подключено.
Собрал схему простых часов без плеера все работает. Пробовал собрать с плеером не выводит время. Думал проблема с передачей данных на TX и RX сделал подключение на 8 и 9 пин все равно не работает. помогите в чем может быть еще причина
#include "DFRobotDFPlayerMini.h"
// библиотека для эмуляции Serial порта
#include <SoftwareSerial.h>
// создаём объект Serial и передаём номера управляющих пинов RX и TX
// RX - цифровой вывод 8, необходимо соединить с выводом TX дисплея
// TX - цифровой вывод 9, необходимо соединить с выводом RX дисплея
SoftwareSerial mSerial(8, 9);
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX для плеера DFPlayer Mini
DFRobotDFPlayerMini myDFPlayer;
// uncomment following lines if using rtc (A4 = SDA, A5 = SCL)
#include <DS3232RTC.h> // Библиотека для часов реального времени
#include <Wire.h>
#include <TimeLib.h>
// Init a Time-data structure
time_t time;
/* Дачик температуры */
#include <Wire.h>
#include "Adafruit_SHT31.h"
Adafruit_SHT31 sht31 = Adafruit_SHT31();
/* переменные */
//byte status = 0; // текущий статус
String incStr; // для хронения команд с дисплея
byte pages = 0;
byte flagUp = 1;
int i = 1; // счётчик папок
int folders = 1; // максимальное количество папок
boolean isPlaying = false; // статус воспроизведения/пауза
int volume = 15; // горомкость
boolean flagVolume = true; // статус
boolean randoms = false;
void setup() {
// открываем последовательный порт
mySoftwareSerial.begin(9600);
mSerial.begin(9600);
Serial.begin(9600);
Serial.println(F("GridClock v1..."));
Wire.begin();
// setSyncInterval(30);
setSyncProvider(RTC.get);
//* Дачик температуры *//
if (! sht31.begin(0x44)) { // Set to 0x45 for alternate i2c addr
Serial.println(F("Couldn't find SHT31"));
while (1) delay(1);
}
// uncomment following 2 lines only to set time on rtc when uploading
//setTime(21, 40, 45, 2, 11, 2019); // set clock (24HH,MM,SS,Day,Month,Year)
//RTC.set(now());
delay(1000);
Serial.println();
Serial.println(F("DFPlayer Mini Demo"));
Serial.println(F("Initializing DFPlayer..."));
if (!myDFPlayer.begin(mySoftwareSerial)) {
Serial.println(F("Unable to begin:"));
Serial.println(F("1.Please recheck the connection!"));
Serial.println(F("2.Please insert the SD card!"));
while (true);
}
Serial.println(F("DFPlayer Mini online."));
myDFPlayer.setTimeOut(300);
//----Set volume----
myDFPlayer.volume(volume); //Set volume value (0~30).
//----Set different EQ----
myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);
myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);
while (myDFPlayer.readFileCountsInFolder(folders) > 0) { // считаем сколько у нас папок
folders++;
delay(500);
}
//files = myDFPlayer.readFileCountsInFolder(i); // считаем сколько треков в перкой папке
Serial.println(folders);
}
void loop() {
ReadSerial();
Flash();
Serial.println(F("DFPlayer Mini online."));
delay(100);
}
// читаем монитор порта
void ReadSerial()
{
if (mSerial.available()) {
char inc;
inc = mSerial.read();
incStr += inc;
if (inc == 0x0A) { //конец команды
AnalyseString(); // отправляем команду
incStr = "";
}
}
}
// Разбор команд с дичплея
void AnalyseString() {
/* Упровление на странице настроек часов */
if ((incStr.indexOf("set-up") >= 0)) {
SendInt("setting.bt0.val", 1); //
flagUp = 1;
}
else if ((incStr.indexOf("set-d") >= 0)) {
SendInt("setting.bt1.val", 1); //
flagUp = 0;
}
else if ((incStr.indexOf("set-h") >= 0)) {
if (flagUp)
sTime(1);
else
sTime(2);
SendData("setting.b1.txt", "\"" + String(hours()) + "\""); //
}
else if ((incStr.indexOf("set-min") >= 0)) {
if (flagUp)
sTime(3);
else
sTime(4);
SendData("setting.b2.txt", "\"" + String(mins()) + "\""); //
}
else if ((incStr.indexOf("set-a") >= 0)) {
if (flagUp)
sTime(5);
else
sTime(6);
SendData("setting.b3.txt", "\"" + String(day()) + "\""); //
SendData("setting.b6.txt", "\"" + String(days()) + "\""); //
}
else if ((incStr.indexOf("set-m") >= 0)) {
if (flagUp)
sTime(7);
else
sTime(8);
SendData("setting.b4.txt", "\"" + String(month()) + "\""); //
}
else if ((incStr.indexOf("set-y") >= 0)) {
if (flagUp)
sTime(9);
else
sTime(10);
SendData("setting.b5.txt", "\"" + String(year()) + "\""); //
}
/* Плеер */
else if ((incStr.indexOf("mu-play") >= 0)) {
if (isPlaying) { // если было воспроизведение трека
myDFPlayer.pause(); // пауза
isPlaying = false; // пауза
//Serial.println("Paused..");
SendInt("main.bt1.val", 0); //
} else { // иначе
isPlaying = true; // воспроизводим
myDFPlayer.start(); //запускаем mp3 с паузы
SendInt("main.bt1.val", 1); //
}
}
else if ((incStr.indexOf("mu-prev") >= 0)) {
if (isPlaying) { // если было воспроизведение трека
i--;
if (i > folders - 1)
i = 1;
myDFPlayer.loopFolder(i); //зациклить все mp3 файлы в папке SD: / 05.
SendData("music.g0.txt", "\"" + String(plays(i)) + "\""); //Передаем плей лист
SendData("main.g0.txt", "\"" + String(plays(i)) + "\""); //Передаем плей лист
randoms = false;
SendInt("music.bt2.val", randoms); // случайный трек вкл.
}
}
else if ((incStr.indexOf("mu-next") >= 0)) {
if (isPlaying) { // если было воспроизведение трека
i++;
if (i > folders - 1)
i = 1;
myDFPlayer.loopFolder(i); //зациклить все mp3 файлы в папке SD: / 05.
SendData("music.g0.txt", "\"" + String(plays(i)) + "\""); //Передаем плей лист
SendData("main.g0.txt", "\"" + String(plays(i)) + "\""); //Передаем плей лист
randoms = false;
SendInt("music.bt2.val", randoms); // случайный трек вкл.
}
}
else if ((incStr.indexOf("mu-rend") >= 0)) {
randoms = true;
SendInt("music.bt2.val", randoms); // случайный трек вкл.
myDFPlayer.randomAll(); //Произвольное воспроизведение всех mp3.
i = 0;
SendData("music.g0.txt", "\"" + String(plays(i)) + "\""); //Передаем плей лист
}
else if ((incStr.indexOf("mu-not") >= 0)) {
if (!flagVolume)
{
SendInt("music.bt0.val", 1); //
myDFPlayer.volume(volume); //Set volume value (0~30).
}
if (flagVolume)
{
SendInt("music.bt0.val", 0); //
myDFPlayer.volume(0); //Set volume value (0~30).
}
flagVolume = !flagVolume; // статус
}
else if ((incStr.indexOf("mu-up") >= 0)) {
SendInt("music.bt0.val", 1); //
volume++;
if (volume > 30)
volume = 30;
myDFPlayer.volume(volume); //Set volume value (0~30).
SendInt("music.n0.val", volume); //
}
else if ((incStr.indexOf("mu-down") >= 0)) {
SendInt("music.bt0.val", 1); //
volume --;
if (volume < 0)
volume = 0;
myDFPlayer.volume(volume); //Set volume value (0~30).
SendInt("music.n0.val", volume); //
}
/* Переходы на страницы */
else if ((incStr.indexOf("cl") >= 0)) { // Страница часы ///
SendData("clock.t0.txt", "\"" + String(hours()) + "\""); //Передаем сколько часов
SendData("clock.t1.txt", "\"" + String(mins()) + "\""); //Передаем сколько часов
SendData("clock.t2.txt", "\"" + String(days()) + "\""); //Передаем сколько часов
SendData("clock.t3.txt", "\"" + String(dates()) + "\""); //Передаем сколько часов
pages = 1;
}
else if ((incStr.indexOf("mai") >= 0)) { // Страница меню ///
int t = sht31.readTemperature();
int h = sht31.readHumidity();
SendData("main.t4.txt", "\"" + String(hours()) + "\""); //Передаем сколько часов
SendData("main.t5.txt", "\"" + String(mins()) + "\""); //Передаем сколько часов
SendData("main.t0.txt", "\"" + String(dates()) + "\""); //Передаем сколько часов
SendData("main.t1.txt", "\"" + String(t) + "c" + "\""); //Передаем сколько часов
SendData("main.t2.txt", "\"" + String(h) + "%" + "\""); //Передаем сколько часов
void SendData(String dev, String data)
{
mSerial.print(dev); // Отправляем данные dev(номер экрана, название переменной) на Nextion
mSerial.print("="); // Отправляем данные =(знак равно, далее передаем сами данные) на Nextion
mSerial.print(data); // Отправляем данные data(данные) на Nextion
comandEnd();
dev = ""; // Очищаем переменную
data = ""; // Очищаем переменную
}
// отправка на Nextion (номер экрана, название переменной) + данные
void SendInt(String dev, int data)
{
mSerial.print(dev); // Отправляем данные dev(номер экрана, название переменной) на Nextion
mSerial.print("="); // Отправляем данные =(знак равно, далее передаем сами данные) на Nextion
mSerial.print(data); // Отправляем данные data(данные) на Nextion
comandEnd();
dev = ""; // Очищаем переменную
data = ""; // Очищаем переменную
}
// функция отправки конца команды
// команда поступающая в дисплей должна кончаться символами «0xFF0xFF0xFF»
void comandEnd() {
for (int i = 0; i < 3; i++) {
mSerial.write(0xff);
}
}
String convert(const char* in)
{
String out;
if (in == NULL)
return out;
Вроде правильно все прописал. Но где-то все таки накасячил. Хотелось бы собрать устройство так как это превый опыт работы с плеером и часами. А проект очень интересный.