SAMD21 + Nextion LCD
- Войдите на сайт для отправки комментариев
Есть задача связать ардуинку и дисплей, для дисплея написал небольшую прогу с часами, собственно это начало. Загрузил в уно код для работы с дисплеем, ну все вродебы нормально, только смущает что уно всю задачу не потянет(слабовата она), 2560-я ардуинка слишком большая вот и было принято решение реализовать задачу на 32 битной плате(ну была такая вот и пал выбор), ресурсов должно хватить. Потренеровался на протеньких програмках типа мигалка и пр. Ну посчитал что освоился и перекинул код проги под новую плату, вообщем библиотеки под nextion(#include "NexButton.h", #include "NexText.h",
#include "RTCLib.h", #include "NexPage.h" ) компилятор принимать никак не хочет, даже часы и те никак не принимает(надо попробовать подсунуть другие библы). Может кто работал с подобным набором и подскажет есть какие ньюансы, может какие есть настройки подкорректировать?
возмите такую мегу
https://www.ebay.com/itm/New-Small-Meduino-Mega2560-R3-Pro-Mini-ATMEGA16U2-Arduino-Mega2560-Compatible-/162593120251
А что там работать с тем Nextion-то? Знай себе пихай по UART пакеты данных в правильном формате (он простейший, к слову). Ну и принимай пакеты данных, анализируй их и делай, что хочешь. Никакие такие особые "библиотеки" для этого не нужны, собственно. Например, чтобы установить текст на компоненте t0, достаточно написать:
Serial.print("t0.txt=\"bla-bla\""); Serial.write(0xFF); Serial.write(0xFF); Serial.write(0xFF);И... ВСЁ! Для этого уже нужна "библиотека"?
DIYMan, пожалуй что вы правы, можно писать все ручками без библиотек, от привычки знаетели отказаться трудновато ;( А если серьезно, хотел проконсультиться как пишут проги под SAMD21, неужели отказываютя от библиотек? Может необходимо отредактировать библиокеку и все? Обратил внимание на стыковку nexstion + arduino uno и nexstion + arduino 2560 необходимо править библиотеку под каждую ардуинку. Вот я и надеялся на подобный подход в моем случае.
DIYMan, пожалуй что вы правы, можно писать все ручками без библиотек, от привычки знаетели отказаться трудновато ;( А если серьезно, хотел проконсультиться как пишут проги под SAMD21, неужели отказываютя от библиотек? Может необходимо отредактировать библиокеку и все? Обратил внимание на стыковку nexstion + arduino uno и nexstion + arduino 2560 необходимо править библиотеку под каждую ардуинку. Вот я и надеялся на подобный подход в моем случае.
У меня свой набор классов для работы с Nextion, компилируется под любую платформу, т.к. там нет ничего платформно-зависимого. Подкорректировать ваши библиотеки - безусловно, можно, для этого надо взять - и корректировать: анализировать ошибки компиляции, и поправлять.
С точки зрения Wiring - SAMD21 ничем не отличается от других плат, если не лезть в специфику: установленное для этой платы ядро предоставляет те же digitalWrite и пр. всем известный набор, входящий в Wiring.
Ещё раз повторюсь, что каких-то там специфических библиотек для работы с Nextion - не нужно. Удобство, конечно, хорошо, но для большинства хоббийных проектов для работы с Nextion достаточно всего ДВУХ функций: одна отправляет пакет, другая - разбирает пришедший пакет. Реализуются - ну минут за 10 где-то.
Посмотрите тут пример аналогового вольтметра на 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); }