Математика на аналоговом считывании неверный результат

Я пытаюсь выполнить математику аналогового чтения, но получаю какой-то странный результат.. Я искал о int и плавает, но не понял..

Мой код :

#include <SevSeg.h>

SevSeg sevSeg;

int bitsChange = analogRead(A0) ;
float fuel = (923 - bitsChange) * 0.121065375;
sevSeg.setNumber(round(fuel));

Предполагая bitsChange = 683, так что топливо должно быть после округления 29, что я получаю 39!!!!

Я хочу знать, почему я получаю этот результат, чтобы узнать об этом..

, 👍1

Обсуждение

вместо того, чтобы предполагать, установите его и убедитесь сами..., @Abel

Я уже установил его и несколько раз пробовал с другими значениями, каждый раз получал неправильный результат, также пытался объявить float и int в математике, но не получил решения... Вот почему я хочу понять, как я пытался несколько раз и не смог этого сделать., @m sayed

Попробуйте установить значение "bitsChange" равным 683 и распечатать значение " топливо` в последовательный порт. Вы, вероятно, увидите, что это именно то, что должно быть (т. е. Результат 29.06). Может быть, что-то не так с настройкой дисплея на семь сегментов (т. е. сместил сегмент)?, @StarCat

почему вы делаете предположение о значении analogRead(A0)'... у вас нет кода, который подтверждает предположение ... пожалуйста, используйте вместо int bitsChange = 683;` , @jsotola

jsotola, да, я сделал это, и я получаю правильный результат (29.06)..но когда я позволяю аналогу считывать входные данные (3,32 Вольта), что означает 683 бита из 1023, результат становится 39!!, @m sayed

StarCat, я проверил контакты/настройки 7-сегментного дисплея визуально и путем передачи случайных чисел через setNumber().. это не проблема.., @m sayed

Если вы сделаете "Serial.println(bitsChange)" после установки " int bitsChange = analogRead(A0)", какой результат вы увидите на последовательном мониторе?, @lurker

@luker, как Serial.println (), так и setNumber() показывают 683 на последовательном мониторе и 7 - сегментном дисплее.. даже использование (923-разрядный диапазон) показывает правильный результат (240), но как только я использую (*0,121065375), математика неверна, в этом десятичном значении есть что-то, чего я не могу понять!!, @m sayed

Почему десятичная дробь должна быть такой точной? Можете ли вы попробовать изменить типизацию bitchange на float? А также с 923 по 923,0, @ArduinoFan

@ArduinoFan, не обязательно быть таким точным (достаточно 0,1211), но я также использовал 0,121 и получил тот же неправильный результат, я также попробовал (bitsChange - 923) вместо +923!!! Говоря "типизация", вы имеете в виду объявление bitsChange в качестве поплавка? (если вы имеете в виду, что я объявил его плавающим и ту же ошибку)... Я схожу с ума, перепробовав все доступные решения., @m sayed

Когда я делаю математику (923 - битный диапазон) * 2.0, результат 480, что правильно, пытаюсь * 1.0, результат 240, снова правильно... Как только я использую * 0.1, результат будет неправильным!!!! Вот почему я считал, что проблема заключается в десятичном значении., @m sayed