Как записать в переменную самое большое напряжение

A3840
Offline
Зарегистрирован: 30.01.2021

Здравствуйте друзья. Нуждаюсь в вашей помощи. Натолкните меня в правильное русло. Читаю аналоговый порт, и нужно запомнить самое большое значение считаное с порта. Подскажите как реализовать пожалуйста.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016
uint16_t uMax = 0;

void setup() {
  Serial.begin(115200);
}

void loop() {
  uint16_t uTmp = analogRead(A0);
  if (uTmp > uMax) {
    uMax = uTmp;
    Serial.println(uMax);
  }
  delay(1000);

}

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

А зачем delay(1000)? Чтобы пропустить самое большое значение?

Ну и по хорошему, uMax следует описывать внутри loop как static - нечего ей делать среди глобальных переменных.

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

andriano пишет:

А зачем delay(1000)? Чтобы пропустить самое большое значение?

Ну и по хорошему, uMax следует описывать внутри loop как static - нечего ей делать среди глобальных переменных.

согласен, делей должен быть рандомным )))

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

А зачем вообще нужен delay?

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

andriano пишет:

А зачем вообще нужен delay?

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

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

"Для обеспечения максимально возможного" задержка как раз должна быть "минимально возможной". Но никак не "рандомной".

A3840
Offline
Зарегистрирован: 30.01.2021

Больше спасибо за помощь. Все работает.

anatoli_nik
Offline
Зарегистрирован: 17.01.2019

Задержка в данном случае только чтобы сериал монитор не заспамить.

mixail844
Offline
Зарегистрирован: 30.04.2012

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

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

andriano пишет:

"Для обеспечения максимально возможного" задержка как раз должна быть "минимально возможной". Но никак не "рандомной".

на правоту вашего высказывания формулу можете привести?

mixail844
Offline
Зарегистрирован: 30.04.2012

ua6em пишет:

andriano пишет:

"Для обеспечения максимально возможного" задержка как раз должна быть "минимально возможной". Но никак не "рандомной".

на правоту вашего высказывания формулу можете привести?

Теорема Найквиста—Шеннона—Котельникова

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

anatoli_nik пишет:

Задержка в данном случае только чтобы сериал монитор не заспамить.

И как одно связано с другим?

1. Больше 1024 строк в порт не выведется ни при каких условиях.

2. Нет никаких гарантий, что в порт выведется меньше строк, чем в случае 1, ни при каких величинах задержки.

Так что задержка не связана с "заспамливанием". От слова "совсем".

Напротив, минимально возможная задержка (т.е. совсем без delay) обеспечит:

1. Максимальную вероятность того, что наибольшее значение будет найдено.

2. Минимальное время нахождения этого значения.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

mixail844 пишет:

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

Что, собственно, и сделано в исходнике из сообщения №1.

Поэтому дополнительные телодвижения во избежание "заспамливания" уже не нужны.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

mixail844 пишет:

ua6em пишет:

andriano пишет:

"Для обеспечения максимально возможного" задержка как раз должна быть "минимально возможной". Но никак не "рандомной".

на правоту вашего высказывания формулу можете привести?

Теорема Найквиста—Шеннона—Котельникова

Ну да, кстати, - тоже.

Но вообще, достаточно обычной (даже не математической) логики: чем чаще мы проверяем, тем меньше вероятность попустить максимум.