SAMD21 + Nextion LCD

faworit20
Offline
Зарегистрирован: 18.07.2017

Есть задача связать ардуинку и дисплей, для дисплея написал небольшую прогу с часами, собственно это начало. Загрузил в уно код для работы с дисплеем, ну все вродебы нормально, только смущает что уно всю задачу не потянет(слабовата она), 2560-я ардуинка слишком большая вот и было принято решение реализовать задачу на 32 битной плате(ну была такая вот и пал выбор), ресурсов должно хватить. Потренеровался на протеньких програмках  типа мигалка и пр. Ну посчитал что освоился и перекинул код проги под новую плату, вообщем библиотеки под nextion(#include "NexButton.h", #include "NexText.h",
#include "RTCLib.h", #include "NexPage.h" ) компилятор принимать никак не хочет, даже часы и те никак не принимает(надо попробовать подсунуть другие библы). Может кто работал с подобным набором и подскажет есть какие ньюансы, может какие есть настройки подкорректировать?

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

А что там работать с тем Nextion-то? Знай себе пихай по UART пакеты данных в правильном формате (он простейший, к слову). Ну и принимай пакеты данных, анализируй их и делай, что хочешь. Никакие такие особые "библиотеки" для этого не нужны, собственно. Например, чтобы установить текст на компоненте t0, достаточно написать:

Serial.print("t0.txt=\"bla-bla\"");
Serial.write(0xFF);
Serial.write(0xFF);
Serial.write(0xFF);

И... ВСЁ! Для этого уже нужна "библиотека"?

faworit20
Offline
Зарегистрирован: 18.07.2017

DIYMan, пожалуй что вы правы, можно писать все ручками без библиотек, от привычки знаетели отказаться трудновато ;( А если серьезно, хотел проконсультиться как пишут проги под SAMD21, неужели отказываютя от библиотек? Может необходимо отредактировать библиокеку и все? Обратил внимание на стыковку nexstion + arduino uno и  nexstion + arduino 2560 необходимо править библиотеку под каждую ардуинку. Вот я и надеялся на подобный подход в моем случае.

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

faworit20 пишет:

DIYMan, пожалуй что вы правы, можно писать все ручками без библиотек, от привычки знаетели отказаться трудновато ;( А если серьезно, хотел проконсультиться как пишут проги под SAMD21, неужели отказываютя от библиотек? Может необходимо отредактировать библиокеку и все? Обратил внимание на стыковку nexstion + arduino uno и  nexstion + arduino 2560 необходимо править библиотеку под каждую ардуинку. Вот я и надеялся на подобный подход в моем случае.

У меня свой набор классов для работы с Nextion, компилируется под любую платформу, т.к. там нет ничего платформно-зависимого. Подкорректировать ваши библиотеки - безусловно, можно, для этого надо взять - и корректировать: анализировать ошибки компиляции, и поправлять.

С точки зрения Wiring - SAMD21 ничем не отличается от других плат, если не лезть в специфику: установленное для этой платы ядро предоставляет те же digitalWrite и пр. всем известный набор, входящий в Wiring.

Ещё раз повторюсь, что каких-то там специфических библиотек для работы с Nextion - не нужно. Удобство, конечно, хорошо, но для большинства хоббийных проектов для работы с Nextion достаточно всего ДВУХ функций: одна отправляет пакет, другая - разбирает пришедший пакет. Реализуются - ну минут за 10 где-то.

nikolaki
nikolaki аватар
Offline
Зарегистрирован: 14.02.2013

Посмотрите тут пример аналогового вольтметра на Nextion и ардуино,без библиотек . Все просто.Это то о чем вам говорит DIYMan

 

#include <SoftwareSerial.h>

const int len = 185;        // total length of the needle
const float rad = PI/2048;  // smallest fraction of angle
int input = 0;              
int last_input = 1;         
int volt = 0;               // value for digital voltage display
float a = 0;                // the actual angle in rad
int x = 0;                  // x coordinate of needle tip
int y = 0;                  // y coordinate of needle tip
char cmd[30];               // buffer for Nextion commands - change size if you work with longer commands
SoftwareSerial nextion(2, 3);

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

void loop() {
  input = analogRead(A0);
  if(input != last_input){  // if nothing has changed, do nothing 
    last_input = input; 
    set_meters();      
  }
  delay(25); // refresh rate, change to your needs
}

void set_meters(){   
  a = ((float)input-512.0) * rad; // calculate angle
  volt = (int)((float)input * 2.93); // scale input value to 3000 max.
  x = len * sin(a);  
  y = len * cos(a);       
  set_vars(); // send x, y and volt to the display
}

void set_vars(){
  nx("x.val=%d", x);  
  nx("y.val=%d", y); 
  nx( "volt.val=%d", volt); 
}

/*  a little helper function to make sending commands easier */
void nx(char* s, int v){   
  int len = sprintf(cmd, s, v);  
nextion.write(cmd, len);  
nextion.write(0xff);
nextion.write(0xff);
nextion.write(0xff);
}