Указатели ТОЖ и УТ на ардуино.
Пытаюсь внедрить панель приборов от другого автомобиля в свой.
В процессе испытаний выяснилось несоответствие показаний датчика температуры охлаждающей жидкости и датчика уровня топлива. В этой панели индикаторы ТОЖ и УТ сделаны на логометрах, которыми управляет микроконтроллер ШИМ-ом через мосфеты. Решил передать функцию управления логометрами своему контроллеру на ардуино. Он же управляет светодиодом недостаточного уровня топлива.
Все вроде как работает, и с ТОЖ видимых проблем нет, а вот стрелка уровня топлива постоянно скачет вместе с плесканием топлива в баке.
Понятно что надо сделать сглаживание, но знаний и умений не хватает. :)
На сколько я понимаю нужно делать несколько измерений в течение определенного времени, складывать их результаты и делить на количество измерений. Помогите написать такой скетч. Может у кого есть готовый алгоритм?
Вот то что пока есть:
PHP код:
int sensePin = 0;
int ledPin = 6;
int sensePin2 = 2;
int ledPin2 = 5;
int dut = 8;
void setup()
{
TCCR0B = TCCR0B & 0b11111000 | 2;
pinMode(ledPin, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(dut, OUTPUT);
int dut = LOW;
}
void loop()
{
int val = analogRead(sensePin);
val = constrain(val, 45, 540);
int val2 = analogRead(sensePin2);
val2 = constrain(val2, 150, 988);
int ledLevel = map(val, 45, 540, 0, 200);
int ledLevel2 = map(val2, 150, 988, 30, 230);
analogWrite(ledPin, ledLevel);
analogWrite(ledPin2, ledLevel2);
if (val > 435)
{
digitalWrite(dut, HIGH);
}
else
{
digitalWrite(dut, LOW);
}
}
Re: Указатели ТОЖ и УТ на ардуино.
Количество замеров можно увеличивать
Смотри пример:
PHP код:
val = analogRead(sensePin);
delay(100);
val = val+analogRead(sensePin);
delay(100);
val = val+analogRead(sensePin);
val=val/3;
Re: Указатели ТОЖ и УТ на ардуино.
То есть если я хочу делать скажем 10 измерений нужно 9 раз повторить операцию:
delay(100);
val = val+analogRead(sensePin);
и потом разделить val на 10?
А покороче это нельзя записать как нибудь? В виде цикла
Re: Указатели ТОЖ и УТ на ардуино.
Лучше конечно сделать вычисление циклом
Re: Указатели ТОЖ и УТ на ардуино.
Вот так нормально?
PHP код:
int val = analogRead(sensePin);
val = constrain(val, 45, 540);
int var = 1;
if (var < 10)
{
delay(100);
val = val+analogRead(sensePin);
var++;
}
val=val/10;
int ledLevel = map(val, 45, 540, 0, 200);
analogWrite(ledPin, ledLevel);
Re: Указатели ТОЖ и УТ на ардуино.
Я бы использовал цикл FOR, но и так тоже можно
Re: Указатели ТОЖ и УТ на ардуино.
Спасибо большое :)
В воскресенье попробую на машине
Re: Указатели ТОЖ и УТ на ардуино.
У тебя ошибка в скетче
Var перед IF всегда будет равен единице
Re: Указатели ТОЖ и УТ на ардуино.
а как правильно написать? так лучше?
PHP код:
int val = analogRead(sensePin);
val = constrain(val, 45, 540);
for (int var=0; var < 10; var++)
{
delay(100);
val = val+analogRead(sensePin);
}
val=val/10;
int ledLevel = map(val, 45, 540, 0, 200);
analogWrite(ledPin, ledLevel);
Re: Указатели ТОЖ и УТ на ардуино.
Проверил, при 10 измерениях все равно скачет, а вот при 100 уже нет, так пока и оставил :)