Доброго времени суток! у меня такая проблема, изучаю ардуино + экран nextion , в итоге столкнулся с препядствием. дано: ардуино уно, экран nextion , потенциометр. кручу потенциометр, показания отображаются в текстовом поле, в номерном поле и двигается Gauge(это для проверки, что данные идут) , а картинка которая должна менять параметр PIC не меняется. вернее всё, что я могу сделать, это заставить ее меняться по нажатию кнопки перезагрузки ардуино. Код (C++): #include <SoftwareSerial.h> #include <Nextion.h> SoftwareSerial nextion(2, 3); Nextion myNextion(nextion, 9600); int potPin = 0; void setup() { Serial.begin(9600); myNextion.init(); } void loop() { int val = map(analogRead(potPin),0,1023,0,6000); int mal = map(analogRead(potPin),0,1023,0,180); Serial.println(val); Serial.println(mal); float h = val; float t = mal; //myNextion.setComponentText("t3", String(t)); delay(5); myNextion.setComponentText("t15", String(h)); myNextion.setComponentValue("n0",h); myNextion.setComponentValue("z0",t); delay(5); }
Ну видимо добавить в главный цикл команду на смену картинки. Естественно, чтоб Ардуина не слала эту команду каждый оборот цикла - ввести проверку на "диапазон" входных значений - находимся в том же "коридоре" как и в предыдущий раз ? - уже посылали ? - больше не шлем. А сейчас у вас команда myNextion.init() видимо выполняет эту работу. ПС. Загрузил библиотеку Nextion, но Ардуино не компилирует ваш скетч. Выдает ошибки.
Вот варварское решение через инициализацию дисплея - пример. Код (C++): #include <SoftwareSerial.h> #include <Nextion.h> SoftwareSerial nextion(2, 3); Nextion myNextion(nextion, 9600); int potPin = 0; int OldVal = 0; // int OldMal = 0; int Delta = 100; void setup() { Serial.begin(9600); myNextion.init(); OldVal = map(analogRead(potPin),0,1023,0,6000); // OldMal = map(analogRead(potPin),0,1023,0,180); } void loop() { int val = map(analogRead(potPin),0,1023,0,6000); int mal = map(analogRead(potPin),0,1023,0,180); Serial.println(val); Serial.println(mal); If (abs(val - OldVal) > Delta) { float h = val; float t = mal; //myNextion.setComponentText("t3", String(t)); delay(5); myNextion.setComponentText("t15", String(h)); myNextion.setComponentValue("n0",h); myNextion.setComponentValue("z0",t); //OldVal = val; myNextion.init(); OldVal = val; } delay(5); } Я не работал с Некстион, не нахожу описания функций библиотеки, а та что есть - не компилируется. Потому, кроме как подсказать логику, помочь не берусь. Если разберусь с библой - напишу. Ждите ответов гуру.
С Некстион надо работать без библиотеки. Все это рассказано в соответствующей теме еще три года назад.
спасибо! я нашел решение моей задачи по другому. вот мой код, он примного большой , пока не знаю как его упростить. даже сюда не входит))))
щас вопрос в другом на ардуино нано и уно потенциометр посылает в порт изменчивые показания в зависимости от его положения , а вот такой же скетч уже на меге посылает полько 255 Код (C++): #define pot A6 void setup() { Serial.begin(9600); pinMode(pot, INPUT); } void loop() { int x; x = analogRead(pot) / 4; Serial.println(x); } . в чем может быть проблема?
Может как-то так ? Код (C++): #define pot A6 void setup() { int x = 0; Serial.begin(9600); pinMode(pot, INPUT); } void loop() { x = (analogRead(pot) / 4); Serial.println(x); delay(100); } ПС. Для аналогового ввода надо бы указывать источник референсного напряжения. А другие входы пробовали ?
void setup() { int x = 0; analogReference(DEFAULT); ... Ну не знаю. Ищите, вы там правильно компилятору модель платы указываете ? Правильно потенциометр к входам подключаете ? GND потенциометра не в обрыве ? Может АЦП палёный ? Заблудиться в одной сосне вроде невозможно.
Перенеси int x = 0; выше, она в setup объявлена в loop видна не будет. В первом варианте было правильно. Не поможет тогда попробуйте сменить пин, например на A0. И резистор 100ом включите на всякий случай между А6 и резистором.
и так перенес иначе компилятор ругался. и пины менял . всю голову сломал уже. перывй опыт, плата недавна пришла. даже не знаю, что и делать?