Форум Arduino проекты

Часы на Arduino с дисплеем Nextion

3 ноября, 2021 - 17:07
Пытаюсь собрать часы по проекту https://portal-pk.ru/news/256-samodelnye-chasy---pleer-na-arduino-s-sensornym-displeem.html. Использую Arduino UNO и экран NX4832K035. Пока подсоединил только Arduino, экран и часы, Но на экран время не выводится. подскажите в чем может быть причина

Будущее за микроконтроллерами
Rogslav Rogslav Зарегистрирован:
3.11.2021
6 ноября, 2021 - 19:32 #1
Rogslav пишет:
Пытаюсь собрать часы по проекту https://portal-pk.ru/news/256-samodelnye-chasy---pleer-na-arduino-s-sensornym-displeem.html. Использую Arduino UNO и экран NX4832K035. Пока подсоединил только Arduino, экран и часы, Но на экран время не выводится. подскажите в чем может быть причина
Данные не предаются с Arduino на дисплей. Проверяйте правильно ли все подключено.

Будущее за микроконтроллерами
Admin Admin Зарегистрирован:
3.07.2018
19 ноября, 2021 - 23:33 #2
Собрал схему простых часов без плеера все работает. Пробовал собрать с плеером не выводит время. Думал проблема с передачей данных  на TX и RX сделал подключение на 8 и 9 пин все равно не работает. помогите в чем может быть еще причина

Вячеслав
Rogslav Rogslav Зарегистрирован:
3.11.2021
19 ноября, 2021 - 23:35 #3
#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);
}

Вячеслав
Rogslav Rogslav Зарегистрирован:
3.11.2021
19 ноября, 2021 - 23:36 #4
// читаем монитор порта
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) + "%" + "\""); //Передаем сколько часов

    SendInt("main.bt1.val", isPlaying);   // пуск\пауза
    SendData("main.g0.txt", "\"" + String(plays(i)) + "\"");  //Передаем плей лист

    pages = 2;
    //Serial.println(hour());
  }
  else if ((incStr.indexOf("set") >= 0)) { // Страница настроек ///

    SendData("setting.b1.txt", "\"" + String(hours()) + "\"");   //
    SendData("setting.b2.txt", "\"" + String(mins()) + "\"");    //
    SendData("setting.b6.txt", "\"" + String(days()) + "\"");   //
    SendData("setting.b3.txt", "\"" + String(day()) + "\"");   //
    SendData("setting.b4.txt", "\"" + String(month()) + "\"");   //
    SendData("setting.b5.txt", "\"" + String(year()) + "\"");   //
    SendInt("setting.bt0.val", 1);   //
    flagUp = 1;
    pages = 0;
    Serial.println(hour());
  }
  else if ((incStr.indexOf("mus") >= 0)) { // Страница музыка ///

    SendInt("music.bt0.val", flagVolume);   // вкл.\выкл. звук
    SendInt("music.bt1.val", isPlaying);   // пуск\пауза
    SendData("music.g0.txt", "\"" + String(plays(i)) + "\"");  //Передаем плей лист

    pages = 0;
  }
}


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;

  uint32_t codepoint = 0;
  while (*in != 0)
  {
    uint8_t ch = (uint8_t) (*in);
    if (ch <= 0x7f)
      codepoint = ch;
    else if (ch <= 0xbf)
      codepoint = (codepoint << 6) | (ch & 0x3f);
    else if (ch <= 0xdf)
      codepoint = ch & 0x1f;
    else if (ch <= 0xef)
      codepoint = ch & 0x0f;
    else
      codepoint = ch & 0x07;
    ++in;
    if (((*in & 0xc0) != 0x80) && (codepoint <= 0x10ffff))
    {
      if (codepoint <= 255)
      {
        out += (char) codepoint;
      }
      else
      {
        if (codepoint > 0x400)
          out += (char) (codepoint - 0x360);
      }
    }
  }
  return out;
}

Вячеслав
Rogslav Rogslav Зарегистрирован:
3.11.2021
19 ноября, 2021 - 23:39 #5
Вроде правильно все прописал. Но где-то все таки накасячил. Хотелось бы собрать устройство так как это превый опыт работы с плеером и часами. А проект очень интересный.

Вячеслав
Rogslav Rogslav Зарегистрирован:
3.11.2021

Войдите или Зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Cлучайные товары

Посмотреть товар в Магазине »

Мы в соц сетях

Подпишись на канал Telegram

Portal-PK (Портал ПК) © 2015 - 2024
Разработка проектов
AT Block
DWIN Box