Техника
Деление 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 результат
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 результат
//Мой спидометр
#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);
}
}
#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);
}
}
Андрейкин =)
Длина окружности колеса равна двум километрам? Какой же это велик тогда должен быть? Где вы его достали?
Без кода вообще ничего не понятно
а что не датчик хола? геркон механический, у него дребезг и ограниченное кол-во срабатываний.
Похожие вопросы
- Python и ардуино. Проблема с передачей уведомления на почту
- А почему Ардуино ужасно популярно, а обычные ATmega микроконтроллеры - нет? Ардуино стоит 2500, а AtMega 150 рублей.
- Ардуино, шаговые двигатели
- Вендинговый аппарат на ардуино
- ПОМОГИТЕ ПОЖАЛУЙСТА начинаю программирование ардуино
- Можно ли на Ардуино собрать действительно что-то дельное для дома? (внутр продолжение)
- Вопрос по ардуино
- Ардуино: можно ли подавать 12 вольт на пин прерывания ардуино нано или нужно строго 5 вольт?
- Помощь с ардуино!
- Если класс точности амперметра 2.5 какая цена деления? и как ей определить. 5 какая цена деления и как ей определить