Усреднение входных данных из нескольких входных данных за фиксированный промежуток времени (оценка)
Я пытаюсь усреднить входные значения для ряда входов, а затем сохранить эти средние значения в строку для записи в текстовый документ на SD- карте.
Я использую:
// считываем 6 датчиков и добавляем в строку:
for (int analogPin = 0; analogPin < 6; analogPin++) {
int sensor = analogRead(analogPin);
dataString += String(sensor);
if (analogPin < 6) {
dataString += ",";
}
}
чтобы прочитать контакты в данный момент, но я хочу изменить analogRead(analogPin) на среднее значение, а затем использовать средние значения для создания строки.
но когда я пытаюсь усреднить данные, я сталкиваюсь с ошибками или получаю выходной сигнал, равный 0, хотя должен быть выше (3,3 В).
Я делаю это, чтобы немного стабилизировать свои значения и устранить дрожание.
Есть предложения?
@Michael H., 👍0
Обсуждение1 ответ
Лучший ответ:
Эта функция усреднит показания на аналоговом выводе, включит его и использует вместо analogRead(...), и она должна сделать то, что вам нужно.
int aveAnalogRead(int pin, int ave=10, int delayms = 0)
{
int tot = 0;
for(int i=0; i<ave; i++)
{
tot += analogRead(pin);
if(delayms) delay(delayms);
}
return tot/ave;
}
в вашем цикле():
for (int analogPin = 0; analogPin < 6; analogPin++)
{
int sensor = aveAnalogRead(analogPin);
<<do your work here>>
}
Почти никогда не бывает веской причины для добавления задержки., @Edgar Bonet
С этим, хотя мне приходится запускать его несколько раз, по одному для каждого входа. Возможно ли сделать так, чтобы он также циклически проходил по входам, как цикл в цикле?, @Michael H.
да, используйте его вместо вызова analogInput выше в цикле внутри цикла, @esoterik
так что это:int pin,
для (целое n=0, n<10, n++){
штифт = н;
int aveAnalogRead( int ave=10, int delayms = 50)
{
целочисленный итог = 0;
для (int i=0; i<ave; i++)
{
tot += analogRead(pin);
задержка(delayms);
}
возврат всего/среднего;
}}
, @Michael H.
C++ работает не так; вы помещаете эту функцию где-то за пределами цикла loop() в вашем скетче, а затем вызываете функцию. Вам не нужно копировать определение функции, чтобы вызвать ее., @esoterik
@EdgarBonet зависит от того, какая у вас выборка; ее можно удалить или установить на 0, я просто хотел показать, как это сделать, на случай, если это понадобится., @esoterik
- Состояние ввода остается HIGH, когда функция, вызываемая с помощью ввода, также использует тот же ввод для вызова другой функции
- Можно ли выйти из цикла при изменении входного состояния?
- Как увеличить скорость записи на SD-карту в Ардуино
- Чтение из Serial
- Мигните светодиодом 5 раз с помощью цикла for
- Как узнать сопротивление внутреннего подтягивающего резистора?
- Чтение нескольких аналоговых входных контактов
- Как остановить цикл в последовательном мониторе?
Можете ли вы показать нам весь ваш эскиз?, @VE7JRO
возьмите 10 показаний, отбросьте самые высокие и самые низкие, затем усредните оставшиеся 8 показаний, @jsotola
https://github.com/MajkoLibraries/Средний, @Majenko