Математика на аналоговом считывании неверный результат
Я пытаюсь выполнить математику аналогового чтения, но получаю какой-то странный результат.. Я искал о int и плавает, но не понял..
Мой код :
#include <SevSeg.h>
SevSeg sevSeg;
int bitsChange = analogRead(A0) ;
float fuel = (923 - bitsChange) * 0.121065375;
sevSeg.setNumber(round(fuel));
Предполагая bitsChange = 683, так что топливо должно быть после округления 29, что я получаю 39!!!!
Я хочу знать, почему я получаю этот результат, чтобы узнать об этом..
@m sayed, 👍1
Обсуждение0
Смотрите также:
- Избегайте математических вычислений с плавающей запятой, чтобы ускорить Arduino
- создание анализатора гармоник мощности, который будет измерять амплитуды основной и кратных ей частот (например, 50 Гц, 100 Гц, 150 Гц, 200 Гц,...)
- Как сопоставить целые значения и округлить их до десятков/тысяч?
- Float печатается только 2 десятичных знака после запятой
- Отправка и получение различных типов данных через I2C в Arduino
- Отправка значения с одного Arduino на другой
- Использование аналогового входа для чтения кнопки
- Как перевести float в четыре байта?
вместо того, чтобы предполагать, установите его и убедитесь сами..., @Abel
Я уже установил его и несколько раз пробовал с другими значениями, каждый раз получал неправильный результат, также пытался объявить float и int в математике, но не получил решения... Вот почему я хочу понять, как я пытался несколько раз и не смог этого сделать., @m sayed
Попробуйте установить значение "bitsChange" равным 683 и распечатать значение " топливо` в последовательный порт. Вы, вероятно, увидите, что это именно то, что должно быть (т. е. Результат 29.06). Может быть, что-то не так с настройкой дисплея на семь сегментов (т. е. сместил сегмент)?, @StarCat
почему вы делаете предположение о значении
analogRead(A0)'... у вас нет кода, который подтверждает предположение ... пожалуйста, используйте вместо
int bitsChange = 683;` , @jsotolajsotola, да, я сделал это, и я получаю правильный результат (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