такие штуки лучше делать на светодиодном или газорязрядном индикаторе - ЖКИ не любят холода и начинают тормозить (в смысле символы медленно выводят)
Александр, если я правильно понял - это вы Я там на ардуино.ру отписал в вашей теме Вижу, что не сдаётесь в своих желаниях - это хорошо Да и мне будет интересно - сможет ли кто-нибудь реализовать запрошенное на некстион. Видел бы я очевидное решение - сделал бы, но - до сих пор не вижу, к сожалению.
Дмитрий, здравствуйте. да, ну сильно не хватает задержки индикатора на пиках, все таки надеюсь, а вдруг получится )))
попробую описать, нужен индикатор с задержкой скажем на 1 секунду на последнем максимальном значении, алгоритм примерно вижу следующий, берем два значения, последнее и предпоследнее с задержкой скажем 100 мс, сравниваем, и на максимальном значении останавливаем индикатор на 1 сек, пришло на вход АЦП чуть больше напряжения, индикатор перерисовали и опять задержали на 1 сек, как то так ..
У вас сигнал будет эти 100мс удерживаться на пике, чтобы система с таким редким опросом его отловила?
Вам нужно это заранее знать. Вы можете хоть вечность подбирать, но если сигнал вне диапазона возможностей ацп, то ничего работать не будет.
Это не вопрос программирования. Это вопрос того, что у вас за сигнал. Вы должны это знать. Какой-то программист с форума этого знать не может.
сигнал с микрофона, речь, амплитуда от 0 до 4 вольт, звуковой диапазон частота от 100 Гц до 4 кГц, это все что я могу сказать про сигнал, только не спрашивайте про пик фактор и прочее )))
Ну вот с этого и надо было начинать. Микрофон запитан, или питать его тоже требуется? Паять умеете? Усилитель на микрофоне есть?
может так будет проще, в этот код можно добавить задержку в 1-2 сек. ? Код (C++): #include "CoreNextion.h" 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; // признак результат измерений готов } }