Пиковый индикатор на ардуино и nextion

AlexZR
Offline
Зарегистрирован: 08.02.2016

закажу пиковый индикатор на ардуино и дисплее nextion

b707
Offline
Зарегистрирован: 26.05.2017

AlexZR пишет:

закажу пиковый индикатор на ардуино и дисплее nextion

можно подробнее? Пики чего будем мерить?

И еще не вполне ясно - если это индикатор - зачем Некстион, проще и раз в 5-7 дешевле взять обычный TFT экран

AlexZR
Offline
Зарегистрирован: 08.02.2016

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

https://www.youtube.com/watch?v=58X76ik41oY

 

 

b707
Offline
Зарегистрирован: 26.05.2017

AlexZR пишет:

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

только на видео не Некстион, если вы не в курсе.

Непонятно все же, нафига нескстион... но хозяин - барин. Если вы готовы оплатить покупку Некстиона для отладки - могу сделать и на Некстионе.

 

Да. кстати, вы так и не ответили, что за сигнал и в каком виде он приходит в Ардуину.

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

b707 пишет:

Непонятно все же, нафига нескстион... но хозяин - барин. Если вы готовы оплатить покупку Некстиона для отладки - могу сделать и на Некстионе.

На некстионе ты такое не сделаешь, во всяком случае - без секса вприсядку: оно не могёт в позиционирование элементов, да и по оптимизации отрисовки к китайцам есть бааальшущие вопросы.

Если я правильно уловил, то ТС - Александр, я ему писал прошивку, в том числе часть на Nextion, решения данной проблемы - сходу не увидел, по ходу той разработки из-за криво реализованной китайцами отрисовки - пришлось отказаться от штатного компонента прогресс-бара - был жуткий фликеринг в виде горизонтальных полос (эти дяди Ляо при смене значения прогресс-бара перерисовывают ВЕСЬ его прямоугольник, а не только изменившуюся часть) - короче, по быстродействию не устроило. Перешли на другой метод отрисовки, стало чуть лучше. Контент проекта некстион - рисованый чуть более, чем полностью, картинка на картинке лежит и картинкой погоняет, по отрисовке там хорошая такая нагрузка, узкое место - как раз отрисовка, пмсм. Да, некстион там, емнип, большой - пять или семь дюймов (не помню точнее), со всеми вытекающими.

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

Александр - хороший, надёжный заказчик, не обижайте его, пж :)

b707
Offline
Зарегистрирован: 26.05.2017

DIYMan

От не зря мне сразу идея делать это на Некстионе не понравилась :)

Судя по рассказу, некстион в чем-то сродни FLProg-у - базовые элементы легко и просто, а что чуть посложнее - так закапаешься, что проще весь интерфейс попиксельно отрисовывть на обычном дисплее...

AlexZR
Offline
Зарегистрирован: 08.02.2016

DIYMan пишет:
хороший, надёжный заказчик, не обижайте его, пж :)

Дмитрий, спасибо за заботу )))

сделал задержку с millis(), стало чуть лучше, но все равно не то,

хотелось бы более четкого замараживание пика на 1-2 секунды

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

AlexZR пишет:

DIYMan пишет:
хороший, надёжный заказчик, не обижайте его, пж :)

сделал задержку с millis(), стало чуть лучше, но все равно не то,

лучше на таймерах видимо

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Пиковый индикатор на PIC-е делать надо

AlexZR
Offline
Зарегистрирован: 08.02.2016

ua6em пишет:

лучше на таймерах видимо

простой пример покажите ?

AlexZR
Offline
Зарегистрирован: 08.02.2016

Ворота пишет:

Пиковый индикатор на PIC-е делать надо

что то конкретное можете предложить ?

AlexZR
Offline
Зарегистрирован: 08.02.2016

если точнее, то хотелось бы вот такой вариант индикатора

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018
AlexZR
Offline
Зарегистрирован: 08.02.2016

asam пишет:

А на таких?

нет, только некстион, так как это не только индикатор, а куча кнопок, переключений и т.д.

если последний кубик индикатора реализовать сложно, можно без него, просто индикатор замараживается скажем на 1 секунду на последнем максимальном значении, алгоритм примерно вижу следующий, берем два значения, последнее и предпоследнее с задержкой скажем 100 мс, сравниваем, и на максимальном значении останавливаем индикатор на 1 сек, пришло на вход АЦП чуть больше напряжения, индикатор перерисовали и опять задержали на 1 сек, как то так ..

AlexZR
Offline
Зарегистрирован: 08.02.2016

может так проще будет, в этот код можно добавить замораживание на 1-2 сек. ?

Nextion nextion(Serial);

// программа измерения среднего напряжения
// на аналоговых входах A0

#include <MsTimer2.h>

#define MEASURE_PERIOD 100  // время периода измерения

int timeCount;  // счетчик времени
long  sumU1; // переменные для суммирования кодов АЦП
long  avarageU1; // сумма кодов АЦП (среднее значение * 100)
boolean flagReady;  // признак готовности данных измерения

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

  MsTimer2::set(1, timerInterupt); // прерывания по таймеру, период 1 мс
  MsTimer2::start();              // разрешение прерывания
}

void loop() {

  if ( flagReady == true ) {
    flagReady= false;

    NextionPictureCrop supaProgressBar;
    supaProgressBar.bind(nextion);
    supaProgressBar.displayCropPicture(15, 45, 770, 35, map(avarageU1 / 100., 0, 1023, 0, 100), 0, 1);

    String val = String(avarageU1 / 100.,0);
    NextionText textComponent("t0");
    textComponent.bind(nextion);
    textComponent.text(val.c_str());
    }
}
// обработка прерывания 1 мс
void  timerInterupt() {

  timeCount++;  // +1 счетчик выборок усреднения
  sumU1+= analogRead(A0);  // суммирование кодов АЦП

  // проверка числа выборок усреднения
  if ( timeCount >= MEASURE_PERIOD ) {
    timeCount= 0;
    avarageU1= sumU1; // перегрузка среднего значения
    sumU1= 0;
    flagReady= true;  // признак результат измерений готов
    }
}


 

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Этот код не поможет визуализировать НУЖНЫЙ вам градусник на нехтионе. Но, насколько я понимаю реализовать возможно. Можно даже не ничего не изменять в имеющемся коде, хотя я бы сделал по другому. Ну сколько программеров столько решений. 

DIYman, доску с фотодиодами вы не делали случаем ? :)

ТС, у вас индикатор логарифмический ? Как сильно загружен процессор дисплея ? От 5000 рублей. Пишите на brokly(at)mail.ru .

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

А добавить, по последним правкам ТЗ можно.

AlexZR
Offline
Зарегистрирован: 08.02.2016

brokly пишет:
Пишите на brokly(at)mail.ru .

ответил на емайл

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014
void loop() {
  if ( flagReady == true ) {
    flagReady= false;
    NextionPictureCrop supaProgressBar;
    supaProgressBar.bind(nextion);
    static uint16_t oldMeas=0;
    uint16_t newMeas=map(avarageU1 / 100., 0, 1023, 0, 100);
    static uint32_t refrTimer=0;
    if (newMeas>oldMeas) {
       refrTimer=millis();  
       supaProgressBar.displayCropPicture(15, 45, 770, 35, newMeas, 0, 1);
       oldMeas=newMeas;
    } else if (millis()-refrTimer>1000){
       supaProgressBar.displayCropPicture(15, 45, 770, 35, newMeas, 0, 1);
       oldMeas=newMeas;
    }
    String val = String(avarageU1 / 100.,0);
    NextionText textComponent("t0");
    textComponent.bind(nextion);
    textComponent.text(val.c_str());
  }
}

Сейчас проверю почту.

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

brokly пишет:

DIYman, доску с фотодиодами вы не делали случаем ? :)

Никакой доски не знаю, не делал, не замечен :) В коде, приведённом выше - из моего кода - только использование обвязки для работы с Nextion - как я понимаю, это просто скетч для примера, писан тоже не мной.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

DIYMan пишет:

brokly пишет:

DIYman, доску с фотодиодами вы не делали случаем ? :)

Никакой доски не знаю, не делал, не замечен :) В коде, приведённом выше - из моего кода - только использование обвязки для работы с Nextion - как я понимаю, это просто скетч для примера, писан тоже не мной.

Да нет, я спросил к слову. И уж вовсе НЕ с негативными намеряниями :)

AlexZR
Offline
Зарегистрирован: 08.02.2016

brokly пишет:

    static uint16_t oldMeas=0;
    uint16_t newMeas=map(avarageU1 / 100., 0, 1023, 0, 100);
    static uint32_t refrTimer=0;
    if (newMeas>oldMeas) {
       refrTimer=millis();  
 

вау.. это реально работает!

AlexZR
Offline
Зарегистрирован: 08.02.2016

brokly, посмотрите пожалуйста почту...

 

 

AlexZR
Offline
Зарегистрирован: 08.02.2016

вот такой простой код, приятно глазу посмотреть! краткость - сестра таланта!

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

void loop() {
  int adc0 = analogRead(A0);
  float pwr = (sq(adc0 / 1023. * 5. * 52.915026)) / 50.;

  NextionPictureCrop supaProgressBar;
  supaProgressBar.bind(nextion);
  static uint16_t oldMeas = 0;
  uint16_t newMeas = map(adc0, 0, 512, 0, 100);
  static uint32_t refrTimer = 0;

  if (newMeas > oldMeas) {
    refrTimer = millis();
    String val = String(pwr, 0);
    NextionText textComponent("t0");
    textComponent.bind(nextion);
    textComponent.text(val.c_str());
    supaProgressBar.displayCropPicture(15, 45, 770, 35, newMeas, 0, 1);
    oldMeas = newMeas;
  } else if (millis() - refrTimer > 2000) {
    String val = String(pwr, 0);
    NextionText textComponent("t0");
    textComponent.bind(nextion);
    textComponent.text(val.c_str());
    supaProgressBar.displayCropPicture(15, 45, 770, 35, newMeas, 0, 1);
    oldMeas = newMeas;
  }
}

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

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

AlexZR пишет:

если точнее, то хотелось бы вот такой вариант индикатора

В общем, проверил , как пишет карамзин - "реализуемо" и в таком виде "c задержаным максимумом".

AlexZR
Offline
Зарегистрирован: 08.02.2016

brokly пишет:

"реализуемо" и в таком виде "c задержаным максимумом".

подтверждаю, классно получилось !

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

brokly пишет:

AlexZR пишет:

если точнее, то хотелось бы вот такой вариант индикатора

В общем, проверил , как пишет карамзин - "реализуемо" и в таком виде "c задержаным максимумом".

Согласен, реализуемо при использовании picture crop. Собственно, потихоньку всё шло в том направлении. Изначально был заюзан стандартный прогресс-бар, с его дикой логикой перерисовки - там такого не достичь.

Рад, что всё получилось, и немного неудобно перед Александром - мог бы и сам сделать, но основной работы в последнее время - вал :( Надеюсь, Александр на меня за это не в обиде ;)

AlexZR
Offline
Зарегистрирован: 08.02.2016

DIYMan пишет:

на меня за это не в обиде ;)

Дмитрий, о чем речь! если бы не вы, то и проекта этого бы не было!

да и времени на меня вы сколько потратили ))) вам только благодарности !

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

AlexZR пишет:

DIYMan пишет:

на меня за это не в обиде ;)

Дмитрий, о чем речь! если бы не вы, то и проекта этого бы не было!

да и времени на меня вы сколько потратили ))) вам только благодарности !

к этому усилителю надо добавить двухтоновый генератор )))

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

DIYMan пишет:

Согласен, реализуемо при использовании picture crop. Собственно, потихоньку всё шло в том направлении. Изначально был заюзан стандартный прогресс-бар, с его дикой логикой перерисовки - там такого не достичь.

И это не сильно помогает :( Там нужна прорисовка столбцами в один пиксель с использованием picq (это не компонент, а команда, а значит эта область сама обновляться не будет). И естественно на ресурсах дисплея.

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

brokly пишет:

DIYMan пишет:

Согласен, реализуемо при использовании picture crop. Собственно, потихоньку всё шло в том направлении. Изначально был заюзан стандартный прогресс-бар, с его дикой логикой перерисовки - там такого не достичь.

И это не сильно помогает :( Там нужна прорисовка столбцами в один пиксель с использованием picq (это не компонент, а команда, а значит эта область сама обновляться не будет). И естественно на ресурсах дисплея.

Я в курсе, что такое picq, для поддержки этой команды как раз была сделана обвязка NextionPictureCrop ;), только с учетом того, что там ей на входе скармливаются ID двух рисунков. В общем, эмуляция прогресс-бара.

Насчёт остального - я и говорил, что на Nextion подобные вещи приходится делать вырезанием гланд через ж.. :) Поэтому честно отговаривал Александра от нехорошего, но - хочет человек красоты :)

А в чём сейчас проблема? Flickering, в смысле - мерцание? Если да - то, имхо, упёрлись в быстродействие неоптимизированного китайского кода прорисовки, и об этом с Александром был разговор ;)

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Не, он мерцанием называет плавание показаний:(  Мерцание я практически полностью убрал.

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

brokly пишет:

Не, он мерцанием называет плавание показаний:(  Мерцание я практически полностью убрал.

Ты не видел, как реально мерцает прогресс-бар стандартный? Это жесть, по сравнению с ним picq - просто душка :)))

AlexZR
Offline
Зарегистрирован: 08.02.2016

brokly пишет:

Не, он мерцанием называет плавание показаний:(  Мерцание я практически полностью убрал.

не совсем так, на входе 3 вольта, а индикатор с частотой задержки сбрасывает эти паказания с 3 до 0,

если задержка 0, то 3 вольта стоят как вкопаные.

бьюсь уже с этим индикатором наверное больше года )))

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

DIYMan пишет:

Ты не видел, как реально мерцает прогресс-бар стандартный? Это жесть, по сравнению с ним picq - просто душка :)))

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

Вот расскажи лучше. Вот на входе сигнал с амплитудой 3 вольта и частотой 1000 гц, ацп что должен намерять ?

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

brokly пишет:

Вот расскажи лучше. Вот на входе сигнал с амплитудой 3 вольта и частотой 1000 гц, ацп что должен намерять ?

Эммм... ну если в лоб, то всё будет зависеть от точки начала сэмплирования на графике, по идее. Т.е. при одном и том же усреднённом значении - мгновенные показания должны плавать. Я правильно понял твою мысль?

AlexZR
Offline
Зарегистрирован: 08.02.2016

измерения делаем такой схемой

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

DIYMan пишет:

brokly пишет:

Вот расскажи лучше. Вот на входе сигнал с амплитудой 3 вольта и частотой 1000 гц, ацп что должен намерять ?

Эммм... ну если в лоб, то всё будет зависеть от точки начала сэмплирования на графике, по идее. Т.е. при одном и том же усреднённом значении - мгновенные показания должны плавать. Я правильно понял твою мысль?

Ну да. Правда схему входного канала к моменту, когда задал вопрос, я не знал. Она кстати, частотозависимая.

AlexZR
Offline
Зарегистрирован: 08.02.2016

brokly пишет:

 Она кстати, частотозависимая.

нет, так как на входе тоже постоянное напряжение,

3 вольта и 1000 Гц, были приведены к другому примеру.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

AlexZR пишет:

brokly пишет:

 Она кстати, частотозависимая.

нет, так как на входе тоже постоянное напряжение,

3 вольта и 1000 Гц, были приведены к другому примеру.

если напряжение на входе меняет своё значение оно уже точно не постоянное...
может два диода поставить вместо одного?

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

AlexZR
Offline
Зарегистрирован: 08.02.2016

ua6em пишет:

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

Виктор, привет.

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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

AlexZR пишет:

ua6em пишет:

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

Виктор, привет.

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

еще бы и цвета, перегруз выделять красным

AlexZR
Offline
Зарегистрирован: 08.02.2016

ua6em пишет:
еще бы и цвета, перегруз выделять красным

есть такое

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

красота !!!

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

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