Техника

Деление float возвращает только 2 знака после запятой ардуино.

Делаю на дуне велокомпьютер основанный на герконе и магните. Мне нужно переводить миллисекунды в часы и сантиметры в километры, но при делении h = roundT / 1000 / 60 / 60, ардуино выводит в сериал 0, потому что округляет до 2 знаков. Также и с километрами. Как исправить сию проблему?
Проблема в неправильном использовании функции round, ибо округляет она в самом деле до целых. Как вариант можно попробовать

float a=10.2565,e; int b,c,d;

b=round(a*100);// a=1025

c=round(b/100);//c=10 целая часть

d=b%1000;//d=25 дробная часть

e=c+d/100; //e=10.25 результат
Елена Хатунцева
Елена Хатунцева
66 527
Лучший ответ
//Мой спидометр
#include // Подключаем библиотеку индикатора
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);//порты для дисплея
int pin = 10; // порт входа 10 датчика
int key = 0; //переменная датчика
float sss = 0; //скорость
long abc = 0; //время последнего импульса
long spid = 0; //текущее время
float spidd = 0; //время между импульсами
float times = 0; //время в часах
float koles = 2.2; //периметр колеса в метрах
float pput = 0; //пройденный путь в километрах
long pputt = 0; //пройденный путь в целых числах

void setup()
{
pinMode(pin, INPUT); // порт 10 на вход
lcd.begin(16,2); //дисплей 16 символов 2 строки
abc = millis(); //счетчик времени работы программы в мсек
}

void loop()
{
//abc ++; // увеличение счетчика.
key = digitalRead(pin); // опрос датчика порт 10
if (key == LOW) //если нажата, то вычислить и вывести на экран
{
spid = millis(); //запрос нового времени работы программы
spidd = spid - abc; // вычислить разницу
abc = spid; //сохранить новое время времени работы программы
times = spidd/3600; //перевод мкс в час
sss = koles/times; //скорость км/час

pput = pput + koles; //вычисление пути
pputt = pput; //Перевод из метров в километры
//lcd.clear(); //очистка памяти дисплея
lcd.setCursor(0,0); //установка курсора дисплея на верхнюю строку
lcd.print(sss); //печать целого значения частоты
lcd.print(" km/h"); //печать единицы измерения
//abc = 0; //обнуление счетчика
lcd.setCursor(0,1); //установка курсора дисплея на нижнюю строку
lcd.print(pputt); //печать целого пути в метрах
lcd.print("m"); //печать единицы измерения
delay(200);
}
}
Андрейкин =) Длина окружности колеса равна двум километрам? Какой же это велик тогда должен быть? Где вы его достали?
Без кода вообще ничего не понятно
а что не датчик хола? геркон механический, у него дребезг и ограниченное кол-во срабатываний.
Nina Мельник (Hekk)
Nina Мельник (Hekk)
80 864