Nextion Дисплеи

alex_r61
Offline
Зарегистрирован: 20.06.2012

В часах используется pcf8563 - все вопросы к нему. За  этот год ни разу не корректировал, отстали чуть более минуты, хотя я их точно стазу не выставлял. С ёмкостным тачем не должно быть проблем, он обрабатывается в МК Nextion мы уже получаем факт нажатия.

Каримов
Каримов аватар
Offline
Зарегистрирован: 24.05.2017

а как же с много тактильностью? Как обрабатывается несколько касаний?

alex_r61
Offline
Зарегистрирован: 20.06.2012

Это уже надо у них на форуме спрашивать. У них сначала железо, потом софт допиливают. (

Каримов
Каримов аватар
Offline
Зарегистрирован: 24.05.2017

Заманчивая штука! Но придется обождать.

alex_r61
Offline
Зарегистрирован: 20.06.2012

Тоже облизнулся но ... цена останавливает. Да и для мелких деталек на экране резистивный лучше. Я свой старый GloFiIsh иногда использую именно из за тача и стилуса. Небольшие заметки удобно делать, в Ведроиде пальцами тыкать запаришься.

Каримов
Каримов аватар
Offline
Зарегистрирован: 24.05.2017

У меня уже 3-4 проекта на стадии завершения. Решил выкинуть DS3231(модуль с памятью). Потренеруюсь в часами и памятью дисплея...

А ценник- я бы не сказал, что КУСАЧИЙ... Смотря для какого проекта.

Жду 9 дюймовый...

Morroc
Offline
Зарегистрирован: 24.10.2016

alex_r61 пишет:
Да и для мелких деталек на экране резистивный лучше.

Ну разве что для мелких. Зато пальцем по кнопкам... после смартфона резистивный тач очень напрягает :)

alex_r61
Offline
Зарегистрирован: 20.06.2012

Morroc пишет:

 Зато пальцем по кнопкам...

Какие нах пальцы и кнопки... берёшь стилус и пишешь. )))

d_tramp
Offline
Зарегистрирован: 15.05.2017

Каримов: "У меня уже 3-4 проекта на стадии завершения. Решил выкинуть DS3231(модуль с памятью). Потренеруюсь в часами и памятью дисплея..."

Как время с дисплея на Ардуино передать? все не могу разобраться...

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

Подскажите кто знает есть дисплей все на нем настройл отправка по ID. как без библиотеки работать с ним не могу понял. Подключил к аппаратному сериалу и он кидает в него квадратики((9 Скорост ьвыставлена на нем не могу понял. херь какая то отправлю команду на него типа t1.txt='123' ничего не происходит. херь какая то((( инфу рыл рыл да не нарыл. Если можно строчку кода или ссылку путевую. спс

alex_r61
Offline
Зарегистрирован: 20.06.2012

Охренеть! Тут вся тема в ссылках и коде.

void Nextion::sendText(uint8_t id, String t)
{
  Serial.print(String("t") + id + ".txt=\"" + t + "\"");
  sendFFF();
}

void Nextion::sendFFF()
{
  Serial.write(0xFF);
  Serial.write(0xFF);
  Serial.write(0xFF);
}

 

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

Ну этот код я видал((( он у меня чет то работает то нет((( но это же пол беды мне больше важно получать данные от трех клавиш. И я вижу что он отправляет только квадратики билн фигян какая то.

stambylov
stambylov аватар
Offline
Зарегистрирован: 10.05.2012

Seltvik пишет:

Подскажите кто знает есть дисплей все на нем настройл отправка по ID. как без библиотеки работать с ним не могу понял. Подключил к аппаратному сериалу и он кидает в него квадратики((9 Скорост ьвыставлена на нем не могу понял. херь какая то отправлю команду на него типа t1.txt='123' ничего не происходит. херь какая то((( инфу рыл рыл да не нарыл. Если можно строчку кода или ссылку путевую. спс

Вот код для отправки данных

// Arduino Mega
// Разработал stambylov@ya.ru для новичков


//ПОдключение Nextion к Arduino Mega (используем порт №2 для Serial, т.к. порт №1 может понадобится для наладки программы)
//Nextion     Arduino
// tx           rx(pin19)
// rx           tx(pin18)

String temp = ""; // переменная, хранящая все что угодно

void setup()
{
  
}


void loop() {
  Serial1.begin(9600);  // Открываем порт Сериал для Nextion
  GenerateNewData();        // переходим в функцию отправки данных
  delay(5000);          // Ждем 5 секунд
}


// Отправка данных на Nextion
void GenerateNewData()
{
  temp = "123";                                 //данные 123
  SendData("page1.t1.txt", "\"" + temp + "\""); //Передаем данные для отправки на Nextion в функцию SendData
  temp = "";                                    // Очищаем переменную
}

// отправка на Nextion (номер экрана, название переменной) + данные
void SendData(String dev, String data)
{
  Serial1.print(dev);   // Отправляем данные dev(номер экрана, название переменной) на Nextion
  Serial1.print("=");   // Отправляем данные =(знак равно, далее передаем сами данные) на Nextion 
  Serial1.print(data);  // Отправляем данные data(данные) на Nextion
  Serial1.write(0xff);  // Отправляем данные 0xff(значение показывающее Nextion конец передачи) на Nextion
  Serial1.write(0xff);  // Отправляем данные 0xff(значение показывающее Nextion конец передачи) на Nextion
  Serial1.write(0xff);  // Отправляем данные 0xff(значение показывающее Nextion конец передачи) на Nextion
  dev = "";    // Очищаем переменную
  data = "";   // Очищаем переменную
}

 

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

А как принять данные корректно? у меня в ком порту квадратики при нажатии! скорость выставлена одинаковая в чем подвох?

stambylov
stambylov аватар
Offline
Зарегистрирован: 10.05.2012

Seltvik пишет:

А как принять данные корректно? у меня в ком порту квадратики при нажатии! скорость выставлена одинаковая в чем подвох?

вот посмотри обработку данных с nextoin

// Arduino Mega
// Разработал stambylov@ya.ru для новичков


//ПОдключение Nextion к Arduino Mega (используем порт №2 для Serial, т.к. порт №1 может понадобится для наладки программы)
//Nextion     Arduino
// tx           rx(pin19)
// rx           tx(pin18)

String temp = ""; // переменная, хранящая все что угодно

// переменная для хранения сообщения полученного с nextion
String incStr;


void setup()
{
  Serial.begin(9600);             // Открываем порт для отладки программы
  Serial.println("Start System"); // Выводим начало старта
  Serial1.begin(9600);            // Открываем порт Сериал для Nextion
}


void loop() {
  
  // Читаем полученные данные с Nextion
    if (Serial1.available()) {
    char inc;
    inc = Serial1.read();
    incStr += inc;
    if (inc == 0x23) {
      incStr = "";
    }
    if (inc == 0x0A) {
      Serial.println("Nextion: ");
      Serial.println(incStr);
      AnalyseString(incStr);         // Переходим в функцию для обработки данных
      incStr = "";
      inc = "";
    }
  }
  
  GenerateNewData();        // переходим в функцию отправки данных
  delay(5000);          // Ждем 5 секунд
}


// Отправка данных на Nextion
void GenerateNewData()
{
  temp = "123";                                 //данные 123
  SendData("page1.t1.txt", "\"" + temp + "\""); //Передаем данные для отправки на Nextion в функцию SendData
  temp = "";                                    // Очищаем переменную
}

// отправка на Nextion (номер экрана, название переменной) + данные
void SendData(String dev, String data)
{
  Serial1.print(dev);   // Отправляем данные dev(номер экрана, название переменной) на Nextion
  Serial1.print("=");   // Отправляем данные =(знак равно, далее передаем сами данные) на Nextion 
  Serial1.print(data);  // Отправляем данные data(данные) на Nextion
  Serial1.write(0xff);  // Отправляем данные 0xff(значение показывающее Nextion конец передачи) на Nextion
  Serial1.write(0xff);  // Отправляем данные 0xff(значение показывающее Nextion конец передачи) на Nextion
  Serial1.write(0xff);  // Отправляем данные 0xff(значение показывающее Nextion конец передачи) на Nextion
  dev = "";    // Очищаем переменную
  data = "";   // Очищаем переменную
}

// Смотрим что получили
void AnalyseString(String incStr) {
  if (incStr.indexOf("Data1") >= 0) {
    // выполняем действие которое надо
  }
    incStr = "";
  }

 

stambylov
stambylov аватар
Offline
Зарегистрирован: 10.05.2012

Seltvik пишет:

А как принять данные корректно? у меня в ком порту квадратики при нажатии! скорость выставлена одинаковая в чем подвох?

Простой Проект с кнопкой и текстовым полем на Nextion ссылка

Код для работы с проектом:

// Arduino Mega
// Разработал stambylov@ya.ru для новичков


//ПОдключение Nextion к Arduino Mega (используем порт №2 для Serial, т.к. порт №1 может понадобится для наладки программы)
//Nextion     Arduino
// tx           rx(pin19)
// rx           tx(pin18)

String temp = ""; // переменная, хранящая все что угодно

// переменная для хранения сообщения полученного с nextion
String incStr;


void setup()
{
  Serial.begin(9600);             // Открываем порт для отладки программы
  Serial.println("Start System"); // Выводим начало старта
  Serial1.begin(9600);            // Открываем порт Сериал для Nextion
}


void loop() {
  
  // Читаем полученные данные с Nextion
    if (Serial1.available()) {
    char inc;
    inc = Serial1.read();
    incStr += inc;
    if (inc == 0x23) {
      incStr = "";
    }
    if (inc == 0x0A) {
      Serial.println("Nextion: ");
      Serial.println(incStr);
      AnalyseString(incStr);         // Переходим в функцию для обработки данных
      incStr = "";
      inc = "";
    }
  }
  
  
}



// отправка на Nextion (номер экрана, название переменной) + данные
void SendData(String dev, String data)
{
  Serial1.print(dev);   // Отправляем данные dev(номер экрана, название переменной) на Nextion
  Serial1.print("=");   // Отправляем данные =(знак равно, далее передаем сами данные) на Nextion 
  Serial1.print(data);  // Отправляем данные data(данные) на Nextion
  Serial1.write(0xff);  // Отправляем данные 0xff(значение показывающее Nextion конец передачи) на Nextion
  Serial1.write(0xff);  // Отправляем данные 0xff(значение показывающее Nextion конец передачи) на Nextion
  Serial1.write(0xff);  // Отправляем данные 0xff(значение показывающее Nextion конец передачи) на Nextion
  dev = "";    // Очищаем переменную
  data = "";   // Очищаем переменную
}

// Смотрим что получили
void AnalyseString(String incStr) {
  if (incStr.indexOf("Data1") >= 0) {
    // отправляем на Nextion
    temp = "Hello,123";                                 //данные Hello,123
    SendData("page0.t1.txt", "\"" + temp + "\""); //Передаем данные для отправки на Nextion в функцию SendData
    temp = "";                                    // Очищаем переменную
  }
    incStr = "";
  }

 

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

Да это я видел. А проще никак крч да? Печаль( А что думаете про мои квадратики в ком порту? Я как их увидел голову сломал. Во многих постах сразу видно код если по ID передача идет а у меня квадратики.

stambylov
stambylov аватар
Offline
Зарегистрирован: 10.05.2012

Seltvik пишет:

Да это я видел. А проще никак крч да? Печаль( А что думаете про мои квадратики в ком порту? Я как их увидел голову сломал. Во многих постах сразу видно код если по ID передача идет а у меня квадратики.

Проще забыть про Nextion и Arduino!

alex_r61
Offline
Зарегистрирован: 20.06.2012

Какие квадратики, чем смотрите?

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

Ком портом в Arduino IDE. завтра скрин залью че за херня не пойму( все работало раньше а щас фигня какая то. может что то упустил

alex_r61
Offline
Зарегистрирован: 20.06.2012

А в нормальной терминалке посмотреть не судьба?

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

Вот как работает ваш и другие коды на получение данных от экрана. Вот о чем я говорю. Причем так везде! т.е. и в CoolTerm и в Arduino IDE ппц не могу понять. как будто скорости разные хотя я выставлял в экране скорость.

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

А вот просто напрямую подключен через адаптер.

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

С принятием данных разобрался. Теперь осталось понят ь почему он не хочет хавать даже жестко такую строчку page0.t2.txt="31"0xff0xff0xff. Пытаюсь банально руками изменить компанент t0. никакой реакции(((

Каримов
Каримов аватар
Offline
Зарегистрирован: 24.05.2017

page0 не нужно! Т.к. дисплей разумеет что работа ведется именно с этой страницей! ИЗМЕНЕНИЯ чего либо на "НЕ АКТИВНОЙ" странице НЕ ПРОКАТИТ!

stambylov
stambylov аватар
Offline
Зарегистрирован: 10.05.2012

Каримов пишет:

page0 не нужно! Т.к. дисплей разумеет что работа ведется именно с этой страницей! ИЗМЕНЕНИЯ чего либо на "НЕ АКТИВНОЙ" странице НЕ ПРОКАТИТ!

Если в проекте много страниц, то нужно, т.к. например открыта страница page1, а данные нужно кинуть на page0 в переменную, чтоб при переходе данные отобразились сразу и те которые именно сейчас.

stambylov
stambylov аватар
Offline
Зарегистрирован: 10.05.2012

Каримов пишет:

page0 не нужно! Т.к. дисплей разумеет что работа ведется именно с этой страницей! ИЗМЕНЕНИЯ чего либо на "НЕ АКТИВНОЙ" странице НЕ ПРОКАТИТ!

Если в проекте много страниц, то нужно, т.к. например открыта страница page1, а данные нужно кинуть на page0 в переменную, чтоб при переходе данные отобразились сразу и те которые именно сейчас.

stambylov
stambylov аватар
Offline
Зарегистрирован: 10.05.2012

Посмотрите пост от меня выше с предложенным кодом для Arduino и прикрепленным файлом для Nextion

Каримов
Каримов аватар
Offline
Зарегистрирован: 24.05.2017

может объявить GLOBAL?

stambylov
stambylov аватар
Offline
Зарегистрирован: 10.05.2012

Каримов пишет:

может объявить GLOBAL?

Обявление GLOBAL дает возможность использовать данные, например переменной t0.txt на других страницах, если это надо.

Dr_grizzly
Dr_grizzly аватар
Offline
Зарегистрирован: 07.12.2015

Сегодня закончил свой первый проект с уно плюс nextion благодаря этой теме ))) Квадратики в порту - это числовое значение так отображает ардуино-монитор. Вот мой пример - на главном экране брошен компонент Number, стоит тип Global, т.к с нескольких экранов передаю данные. Наименование компонента NumSetVal. в обработке на событие нажатия пишу:

  print "delay.val="   - это то что оправит в порт
  print NumSetVal.val  - значение
  printh 0d 0a - Добавляю конец строки и перенос на новую

в ардуине ловлю:

char cmd[100];
int au16data[6]={0,0,0,0,0,0};
...
void SendData(String dev, String data)
  {
    nextion.print(dev);   // Отправляем данные dev(номер экрана, название переменной) на Nextion
    nextion.print("=");   // Отправляем данные =(знак равно, далее передаем сами данные) на Nextion
    nextion.print(data);  // Отправляем данные data(данные) на Nextion
    nextion.write(0xff);  // Отправляем данные 0xff(значение показывающее Nextion конец передачи) на Nextion
    nextion.write(0xff);  // Отправляем данные 0xff(значение показывающее Nextion конец передачи) на Nextion
    nextion.write(0xff);  // Отправляем данные 0xff(значение показывающее Nextion конец передачи) на Nextion
    dev = "";    // Очищаем переменную
    data = "";   // Очищаем переменную
    delay(50);
  }
...
loop() {

String stringVar =  String(au16data[0], DEC);
SendData("MainM.NumSetVal.val",stringVar);


if (nextion.available()>0) {
 
 char _end = 0x0a;  
 int countEnd = 0;
 while (nextion.available() > 0) {
  delay(10);
   char txt = nextion.read();
      
      cmd[countEnd++]=txt;  
              
      if (txt=='\r') {        
        break;
      }
      if (countEnd > 99) {
        break;
      }
  }

char *s;
if (NULL != ( s = strstr(cmd, "delay.val="))) {
    int result = atoi(s + 10);  
    au16data[0]=result; 
}

clean_buffer(cmd,100);
}
....
}

Вот как-то так )) а отправку с ардуины в экран я воспользовался примером для новичков из этого топика
P.S. да кстати никаких библиотек по экрану не подключал. Все с нуля

stambylov
stambylov аватар
Offline
Зарегистрирован: 10.05.2012

Вот измененный код обработки данных, намного проще


#include <SoftwareSerial.h>

#define nextion_TX_PIN 53
#define nextion_RX_PIN 52
SoftwareSerial nextion(nextion_TX_PIN,nextion_RX_PIN);
String incStr;
int temp = 0;

void setup() {
  nextion.begin(9600); // Сериал для Nextion
}
void loop() {

  // Читаем полученные данные с Nextion
  if (nextion.available()) {
    char inc;
    inc = nextion.read();
    incStr += inc;
    if (inc == 0x23) {
      incStr = "";
    }
    if (inc == 0x0A) {
      incStr = "";
      inc = "";
    }
  }
  //Обрабатываем данные
  if (incStr.indexOf("delay.val=") >= 0) {
    //delay.val=500
    //0123456789111
    //          012
    temp = (incStr[10]-48)*100 + (incStr[11]-48*10) + (incStr[12]-48);
    delay(temp);// например переданная переменная содержит число задержки
    incStr = ""; //обязательно чистим переменную
  }

}

 

Dr_grizzly
Dr_grizzly аватар
Offline
Зарегистрирован: 07.12.2015

Метод обработки входящих значений хорош если мы знаем разрядность числа

stambylov
stambylov аватар
Offline
Зарегистрирован: 10.05.2012

Dr_grizzly пишет:
Метод обработки входящих значений хорош если мы знаем разрядность числа

 

Допустим, что число к нам приходит от 0 до 9999

Можно также сделать отдельную функцию для обработки

Код снизу:

#include <SoftwareSerial.h>

#define nextion_TX_PIN 53
#define nextion_RX_PIN 52
SoftwareSerial nextion(nextion_TX_PIN,nextion_RX_PIN);
String incStr;
int temp = 0;
int delayCH1 = 0;
int delayCH2 = 0;
int delayCH3 = 0;
int delayCH4 = 0;

void setup() {
  nextion.begin(9600); // Сериал для Nextion
}
void loop() {

  // Читаем полученные данные с Nextion
  if (nextion.available()) {
    char inc;
    inc = nextion.read();
    incStr += inc;
    if (inc == 0x23) {
      incStr = "";
    }
    if (inc == 0x0A) {
      incStr = "";
      inc = "";
    }
  }
  //Обрабатываем данные
  if (incStr.indexOf("delay.val=") >= 0) {
    // Допустим, что число к нам приходит от 0 до 9999
    //delay.val=5000
    //01234567891111
    //          0123
    //Проверяем первое число
    if ((incStr[10]-48) >= 0 && (incStr[10]-48) <= 9){
      delayCH1 = 1;
    }else delayCH1 = 0;
    //Проверяем второе число
    if ((incStr[11]-48) >= 0 && (incStr[11]-48) <= 9){
      delayCH2 = 1;
    }else delayCH2 = 0;
    //Проверяем третье число
    if ((incStr[12]-48) >= 0 && (incStr[12]-48) <= 9){
      delayCH3 = 1;
    }else delayCH3 = 0;
    //Проверяем четвертое число
    if ((incStr[13]-48) >= 0 && (incStr[13]-48) <= 9){
      delayCH4 = 1;
    }else delayCH4 = 0;

    // СОбираем число
    if (delayCH1 == 1){
      temp = (incStr[10]-48);
    }
    if (delayCH1 == 1 || delayCH2 == 1){
      temp = (incStr[10]-48)*10 + (incStr[11]-48);
    }
    if (delayCH1 == 1 || delayCH3 == 1){
      temp = (incStr[10]-48)*100 + (incStr[11]-48*10) + (incStr[12]-48);
    }
    if (delayCH1 == 1 || delayCH4 == 1){
      temp = (incStr[10]-48)*1000 + (incStr[11]-48*100) + (incStr[12]-48*10) + (incStr[13]-48);
    } 
    
    delay(temp);// например переданная переменная содержит число задержки
    temp = 0;
    incStr = ""; //обязательно чистим переменную
  }

}

 

Каримов
Каримов аватар
Offline
Зарегистрирован: 24.05.2017

d_tramp:
"Как время с дисплея на Ардуино передать? все не могу разобраться..."
Я пишу на BASCOMe.

Bukmop
Offline
Зарегистрирован: 22.10.2017

День добрый уважаемые форумчане. Собственно глупый вопрос от новичка в програмировании. С недавнего времени я стал углубляться в програмирование ардуинки, пересмотрев кучу видосов и прочитав часть информации с форумов, но все сразу не запомнишь, вот поэтому решил начать с тестового проекта который у меня в голове, и поэлементно я пытаюсь понять что означает каждая строчка кода (сразу повторюсь, я до этого вообще не увлекался програмированием, вот и прошу не судите строго). К теме. У меня ардуинка UNO и дисплей Nextion 3,5 NX4832T035_011 (как я понимаю обычная версия). СОбственно часть проекта проста, нажатие кнопки на дисплее, которая передает код кнопки на ардуинку и адрдуинка включает реле. Собственно все работает, но я использовал библиотеку nextion-master. Кода дошло время организовать на дисплее время и дату, все темы которые я находил ссылались на библиотеку ITEADLIB_Arduino_Nextion-master. После установки данноый библиотеки и удаления той, начались танцы с бубнами а точнее:

в моем коде той библиотеки использовались строчки

#include <SoftwareSerial.h>
#include <Nextion.h>  
SoftwareSerial nextion(2, 3);
Nextion myNextion(nextion, 9600);

void setup()
{
  Serial.begin(9600);
  myNextion.init(); 

void loop()
{
  String message = myNextion.listen();
  if(message == "65 0 1 1 ffff ffff ffff")

вот и после смены библиотеки он стал ругаться на эти строки

Nextion myNextion(nextion, 9600);
myNextion.init(); 
String message = myNextion.listen();
  if(message == "65 0 1 1 ffff ffff ffff")

Это просто куски из скетча, но я каждую строку понимал. После прочтения этой темы я нашел инструкцию для новичка в которой нашел

void loop() {
  
  // Читаем полученные данные с Nextion
    if (Serial1.available()) {
    char inc;
    inc = Serial1.read();
    incStr += inc;
    if (inc == 0x23) {
      incStr = "";
    }
    if (inc == 0x0A) {
      Serial.println("Nextion: ");
      Serial.println(incStr);
      AnalyseString(incStr);         // Переходим в функцию для обработки данных
      incStr = "";
      inc = "";
    }
  }

где каждую из строчек я вообще понять не могу, не говоря уже о том, что бы это реализовать в моем прошлом коде с библиотекой nextion-master под библиотеку ITEADLIB_Arduino_Nextion-master. В примерах этой библиотеки я копался, там есть пример с кнопкой, но мне кажется что там все обрабатывает ардуинка, в каком то из примеров помойму даже страницы дисплея переключает ардуинка, хотя это прекрасно можно сделать и в самом дисплее. А кода еще прочел вот это руководстово https://www.itead.cc/ru/blog/%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE-%D0%BF%D0%BE-%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B8-nextion-arduino, я вробще встал в ступор (когда хотел реализовать часы). вообще не мог понять зачем использовать char buffer[10] = {0}; для кнопоки и что делает вот этот код

* @param ptr - the parameter was transmitted to pop event function pointer. 
 * 
 */
void b0PopCallback(void *ptr)
{
    NexButton *btn = (NexButton *)ptr;
    memset(buffer, 0, sizeof(buffer));
    btn->getText(buffer, sizeof(buffer));
    if (strcmp(buffer,"ON"))
    {
        digitalWrite(9, HIGH);
        strcpy(buffer, "ON");
    }
    else
    {
        digitalWrite(9, LOW);
        strcpy(buffer, "OFF");
    }
    btn->setText(buffer);

Ребят, может кому не лень будет объяснить человеку каждые строки, который на код смотрит как баран на новые ворота. На крайний случай можено и в личке, да бы тему не засорять моими тупыми вопросами.

И кстати в чем вообще разница этих библиотек?

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

Скажу так. Сам втыкался. И понял что библиотеки для экрана тупость) как по мне так удобнее делат ьвсе без них. и как раз развебершься. Даже не совсем понял по какому куску ты хочешь чтобы тебе пояснение дали.

vvadim
Offline
Зарегистрирован: 23.05.2012

ваша и авторская библиотеки две разные вещи и код с одной на другой не пойдёт.

сам я пользовался упрощённой (мне пока достаточно).

но для более серьёзных вещей с полным использованием возможностей дисплея надо или авторскую (от ITED) использовать или самому разбираться.

Bukmop
Offline
Зарегистрирован: 22.10.2017

этот кусок из авторской библиотеки

void loop() {
  
  // Читаем полученные данные с Nextion
    if (Serial1.available()) {
    char inc;
    inc = Serial1.read();
    incStr += inc;
    if (inc == 0x23) {
      incStr = "";
    }
    if (inc == 0x0A) {
      Serial.println("Nextion: ");
      Serial.println(incStr);
      AnalyseString(incStr);         // Переходим в функцию для обработки данных
      incStr = "";
      inc = "";
    }
  }

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

void loop()
{
  String message = myNextion.listen();
  if(message == "65 0 1 1 ffff ffff ffff")

да бы ардуинка поняла код кнопки и соответственно включила реле.

Seltvik, а вообще вариант без использования библиотек дисплея меня больше устраивает, если я его правильно конечно понимаю, то есть часть информации с кодом будет обрабатваться самим дисплеем, часть ардуинкой, но соответственно код будет еще больше? Только вот нужно понять в какую литиратуру мне лезть за знаниями). Я понимаю что уже много прошу, но на этом куске примера можно реализовать что бы ардуина поняля код кнопки и включила реле, без использования библиотек с пояснением каждой строки?

void loop() 
{
  String message = myNextion.listen(); 
  if(message == "65 0 1 1 ffff ffff ffff")
  {
    digitalWrite(relay2, LOW);
 }
        

 

ProstoAlex
Offline
Зарегистрирован: 21.01.2015

я давал раньше кусочек кода, который использую я - без библиотеки.

повторю с небольшими изменениями:

в дисплее в нужный момент даю значение переменной:  get t102.val или get "zzzz"или printh d0 a0
 
 в ардуино:
// READ NEXTION PORT : 113 ** ..... - прислали темп для котла, 112 122 .... - пришло нажатие для бипера, 208 160 .... - нажали на часы
 
i = 0; lbyte = 0; hbyte=0;
  while (Serial2.available()) { i = i + 1; ch = Serial2.read(); if (i==1) {lbyte = byte(ch);}  if (i==2) {hbyte = byte(ch);} } //Serial2.clear();
  Serial.print("L BYTE="); Serial.print(lbyte); Serial.print("H BYTE="); Serial.println(hbyte);
   if ( lbyte == 112 )  {Serial.println("beeeep");  tone(7,4830,70);   }
   if ( lbyte == 113 )  {tone(7,4830,1500);  if ( hbyte >= 100 ) { SetTemp2 = hbyte-100;  servoPulse(); }  else { SetTemp = hbyte; }
   if ( PultTemp != SetTemp ) PressButton();
   Serial.print("SetTemp,SetTemp2="); Serial.print(SetTemp); Serial.print(","); Serial.println(SetTemp2); 
          EEPROM.write(11, SetTemp); EEPROM.write(12, SetTemp2);
      }
   if ( lbyte == 208 )  {i = SetSettings ();}

времени объяснять нет, уж извини.

Но по идее разберешься, все прост даже для меня )

Barmaley67
Offline
Зарегистрирован: 25.12.2015

Bukmop пишет:
Только вот нужно понять в какую литиратуру мне лезть за знаниями

https://www.itead.cc/wiki/Nextion_Instruction_Set

https://www.arduino.cc/reference/en/

вот и все что Вам нужно. Разберетесь сами - запомните навсегда. Прочитаете расписанное по строчкам - через день забудете. ИМХО, конечно.

Bukmop
Offline
Зарегистрирован: 22.10.2017

В общем пришел я к выводу, буду учиться без использования библиотек. С подключенной бибилиотекой от автора, динамической памяти ардуинки съедается 53% что как я понимаю не есть хорошо, с любительской - 28%, но а без бибилиотеки около 13%. Только вот все же интересует вопрос, например те же самые часы реального времени с настройкой времени и даты возможно реализовать без библиотеки?

Встрял я пока в переделовании этого куска

void loop() 
{
  String message = myNextion.listen(); 
  if(message == "65 0 1 1 ffff ffff ffff")
  {
    digitalWrite(relay2, LOW);
 }
        

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

Dr_grizzly
Dr_grizzly аватар
Offline
Зарегистрирован: 07.12.2015

Не понимаю зачем вам эти библиотеки, когда общение между экраном и арду достаточно тривиально,чтобы сделать это обычным опросом serial порта, а на экране при нажатии на конопку происходило событие print "but1" и какой-нибудь символ означающий конец строки.

Алгоритм простой:

На экране:

1) Нажали кнопку

2) Послали кодовое слово в порт

3) Закончили кодовое слово опознаваемым символом (конец строки или перенос каретки или и то и другое)

На арду :

1) В цикле опрашиваем порт

2) Собираем полученные данные в какую-то переменную и ждем нашего опознаваемого символа

3) Символ появился тогда разбираем полученное слово, и от его значения выполняем те или иные действия в основной программе(включили/выключили порт/реле).

Пример в коде:

Экран:

print "start" // наше кодовое слово
printh 0a  // опознаваемый символ

В арду:

char NexCmd[100];

loop ...

if (Serial.available()>0) {
 
 char end1 = 0x0a;  
 int countEnd = 0;
 while (nextion.available() > 0) {
  delay(10);
   char txt = Serial.read();     
      NexCmd[countEnd++]=txt;                
      if (txt==end1) {        
        break;
      }
      if (countEnd > 99) {
        break;
      }
  }

...

if (NULL != (strstr(NexCmd, "start"))) {

Наше действие на нажатие кнопки на экране

}

P.S. пояснения по коду более подробные нужны?

 

stambylov
stambylov аватар
Offline
Зарегистрирован: 10.05.2012

Bukmop пишет:

В общем пришел я к выводу, буду учиться без использования библиотек. С подключенной бибилиотекой от автора, динамической памяти ардуинки съедается 53% что как я понимаю не есть хорошо, с любительской - 28%, но а без бибилиотеки около 13%. Только вот все же интересует вопрос, например те же самые часы реального времени с настройкой времени и даты возможно реализовать без библиотеки?

Встрял я пока в переделовании этого куска

void loop() 
{
  String message = myNextion.listen(); 
  if(message == "65 0 1 1 ffff ffff ffff")
  {
    digitalWrite(relay2, LOW);
 }
        

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

 

смотри посты с #282

Каримов
Каримов аватар
Offline
Зарегистрирован: 24.05.2017

ВМЕСТО FF FF FF в конце Пробуй "конец строки"+"возврат коретки"

Bukmop
Offline
Зарегистрирован: 22.10.2017

Всем спасибо, сегодня на ночь опять буду читать.

Dr_grizzly

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

Я видел в некоторых примерах char NexCmd[100], но что означает цифра в квадратных скобках, причем она разная бывает, я не знаю. Так же как и "конец строки или перенос каретки или и то и другое" для меня это пока ничего не значит, вот сегодня буду искать информацию по этому.

ТАк же вот нтересует вопрос по поводу библиотеки SoftwareSerial.h. В каких то прмиерах она есть, в каких то нету, она вообще нужна?

Ребят, я еще раз прошу прощения за мои незнания, но только так я смогу более углубиться во все.

p.s. да бы не засорять тем моими вопросами, можно перейти на лс, я просто напишу совю почту может появиться желающий терпеть мои вопросы Bukmop.BY@gmail.com, а там уже обменяться любым месенджером

Efendis
Efendis аватар
Offline
Зарегистрирован: 25.01.2017

Ребят, кто пробовал, знает, подскажите как сделать:
Есть всего одна страница, на ней нужно выводить соответственно две картинки, плохо или хорошо. То есть ардуина шлёт плохо Nextion показывает одну картинку, хорошо, другую. Поделитесь куском кода кто так делал, что нужно отправлять ардуина и какой код нужно прописать в дисплее на картинки. На форуме всё не то, везде в основном обработка кода присылаемого дисплеем в ардуина от кнопок. А мне нужно чтоб ардуина управляла двумя картинками. Спасибо!

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

https://www.itead.cc/wiki/Nextion_Instruction_Set#vis:_Hide.2Fshow_compo... - в этом разделе описано. Хинт - на странице два компонента с картинками, одна картинка перекрывает другую. Ардуина просит, в зависимости от чего-либо - показать одну и скрыть другую. Это самое простое решение в лоб.

Efendis
Efendis аватар
Offline
Зарегистрирован: 25.01.2017

Какой хинт?

Efendis
Efendis аватар
Offline
Зарегистрирован: 25.01.2017

Там для меня не понятно, мне бы пример куска кода ардуина и дисплея. А не ломать голову гугл переводчиком.