ФУНКЦИЯ map
- Войдите на сайт для отправки комментариев
Вс, 01/11/2015 - 20:24
Уважаемые форумчане, кто может подскажет как сделать чтобы функция map работала в режиме float.
Уважаемые форумчане, кто может подскажет как сделать чтобы функция map работала в режиме float.
Функция map() в ардуино определена как:
Написать свою.
при вызове map получаем цисло без запятой, а нужно два знака после 100,00
Как скажете. Ну ежели лень по образцу написать свою, предлагаю второй вариант - умножайте исходные данные на 100.0, результат делите на 100.0. Тоже не подходит?
при вызове map получаем цисло без запятой, а нужно два знака после 100,00
У чисел не бывает какого-то определенного числа знаков после запятой. Бывают разные типы чисел: целые (без дробной части) и вещественные (с дробной частью). Количество знаков после запятой - свойство не самого числа, а способа его преобразования в строку (когды вы видите на экрне число, на самом деле это уже не число, а строка символов).
Пишите, как Вам посоветовали, собственную map для вещественных чисел, и будет Вам столько знаков после запятой, сколько захотите.
Бывают очень даже. Двоично-десятичные числа с 3-я знаками после запятой. Ну и Кобол можно ещё вспомнить.. :)
Еще бывают числа с фиксированной точкой - у них количество знаков после запятой определяется "конструкцией". Еще есть трехзначная логика, а также числа переменной длины. Много чего есть, особенно если поковырять историю вычислительной техники, а также всякие курьезные проекты. Вопрос в том, реализованы ли они в Ардуино. Мы ведь здесь разбираем конктретный вопрогс, а не демонстрируем свою эрудицию.
Спасибо за участие в проблеме, пока нет времени проверить советы.
RE:для andriano # при вызове map получаем число без запятой, а нужно два знака после 100,00
Ваши раcсуждениях о числах несомненно правильны. Исправлю вопрос: нужно минимум два знака после запятой 100,00********
остальные ************ не принципиальны.
Спасибо за участие в проблеме, пока нет времени проверить советы.
RE:для andriano # при вызове map получаем число без запятой, а нужно два знака после 100,00
Ваши раcсуждениях о числах несомненно правильны. Исправлю вопрос: нужно минимум два знака после запятой 100,00********
остальные ************ не принципиальны.
А что вам мешает внимательно прочитать пост vk007?
Сваял 8ми канальный вольтметр в образовательных целях, https://www.youtube.com/watch?v=yqLK2cNlzLk там же полный скетч
Пытаюсь приспособить его в чем то полезном, например отображать различные аналоговые датчики, токовые, резистивные, а для этого надо как минимум пересчитать сырой код АЦП в реальные диапазоны этих датчиков.
аналогично, при вызове map получаем число без запятой, а нужно два или более знака после 100,00
попробовал совет выше:
---------------------------
int x;
x = map(adc0, 23000, 23800, 3000, 1500) *100.0 /100.0;
lcd.print(x);
---------------------------
получаем то же число, что и без математических функций *100.0 /100.0 - а хочется результат типа 16,87 вместо 1687.
Скажите чайнику - где копать, или, как корректно прописать формулу чтобы выводило дробные числа.. :(
хочется результат типа 16,87 вместо 1687.
1687/100.00 = 16.87
x = map(adc0, 23000, 23800, 3000, 1500) /100.00;
результат = 16 , все что после дробного значения функция map отбросила. Такой вариант уже пробовал.
Информатики в школе не было, так уж случилось.
мде :)
подставил свои значения:
-------------
expected ',' or '...' before numeric constant
Этташотакое? О_о
Ну кто нибудь пропишите пожалуйста корректно, весь прожект из за запятой встал.
3 дня назад впервые ардуину в руках держал. :(
еще нагуглил можно использовать float вместо int.
----
float x;
---
так оно просто тупо добавляет запятую и пару нулей к результату.
А компьютер вы держали 5 дней и то между ног. Компьютер это не учитель, если вы криво набираете, то он так и работает.
[А компьютер вы держали 5 дней и то между ног.
словесный понос любого дебила, пытающегося завоевать дешевый авторитет на чайниках никому не интересен, жаль что ни одна конфа не заносит таких автоматом в >null >del как несущий полезной информации на 0%.
Вопрос остался актуален. :( Если все так сложно с функцией map, если уж она и по документации с дробными числами не работает, может имеет смысл его упростить выносом математики как то отдельно?
Если да, то вопрос - как проще сделать из результата функции map 1000 скажем, 10,00 c выводом в порт и в lcd? Заранее спасибо.
А так вы не состоянии ни правильно выложить скетч на форум ни правильно взять. Пороть вас что ли за это. Так я далеко. Авторитет на вас. Так даже это как с козла молока. Только в игнор или глум над вами.
https://www.youtube.com/watch?v=FxmG4_Q4zGA
Добрый день. Можете смеятся, но я наступил на те же грабли.
Пишу по формуле:
Не пинайте, прошу напишите как надо, вроде ж точно повторил формулу. В Return также вставил цифры, потому что in_min, in_max, out_min, out_max это 10, 1010, 10 , 30 соответственно.
А что Вы хотели сказать "long" в строке №1?
И что значит "y="?
Как одно с другим сочетается?
Чью формулу повторили?
Я бы посмеялся, но мне плакать хочется. Один попытался борщ из кило гвоздей сварить, второй у него рецепт попросил. Может уже перестанете делать очевидно глупые вещи?
А что Вы хотели сказать "long" в строке №1?
И что значит "y="?
Как одно с другим сочетается?
Заменил map() в своём скетче : y = map(x, 10, 1010, 10, 30) по формуле ниже.
Попытаюсь пояснить подробней:
Всё работает, но откидывает десятые, мне нужно точнее задавать температуру.
Переделываю код в такой:
Понимаю, что где-то бред в коде написал, но не знаю именно что.
Я бы посоветовал прочитать статью типа "функции в языке Си". Потому что бред тут все.
winartem, сравните третьи строки в своих втором и третьем фрагментах.
PS. А вообще, sadman41 прав: невозможно написать программу методом обезьяны с пишущей машинкой - нужно понимать, что пишешь.
winartem, сравните третьи строки в своих втором и третьем фрагментах.
PS. А вообще, sadman41 прав: невозможно написать программу методом обезьяны с пишущей машинкой - нужно понимать, что пишешь.
сравнил: добавлено спереди тип данных Long. Больше ничего. Понимаю, что спотыкаюсь об что-то простое, но не знаю где.
сравнил: добавлено спереди тип данных Long. Больше ничего. Понимаю, что спотыкаюсь об что-то простое, но не знаю где.
Читайте Кернигана и Ритчи.
От корки и до корки.
И в раздел "Программирование" больше не заходите, пока не прочитаете.
А здесь такие вопросы размещать - просто неприлично.
Жертвы ЕГЭ...... А что будет дальше?.....
Ребята, да не программист я, совсем в другой сфере работаю. Всего-то нужно было перевести значения с целых чисел в числа с плавающей точкой . От корки до корки изучать книги по программированию на языке Си, чтобы потом эта информация наверняка не пригодилась, не знаю целесообразно ли. Может, ошибся с разделом форума, извините, просто тема уже эта тут существовала.
Какое ЕГЭ? 25 лет назад школу закончил, Кого то может ещё и на свете не было. Не было тогда и компьютеров у нас.
winartem, а этом форуме принцип простой: кто хочет научиться, тому помогут. Совершенно бесплатно.
А кто учиться не хочет, но нужен конкретный проект, - тому единственная дорога в платный раздел "Ищу исполнителя".
Ребята, да не медик я, совсем в другой сфере работаю. Всего-то нужно было...
Als, в 13 строке считать через fmap() избыточно. Там нужно найти "вес" или "цену" входной единицы и умножить на количество этих единиц.
float val = 110/100*50;
В строку 3 Вашего скетча подставьте нули вместо минимальных значений и получите такой результат.
float val = 110/100*50;
Поправлю.
float val = 110.0/100*50;
иначе считать будет всё равно в целых, и над результатом придётся долго сидеть в тягостном недоумении
ТС у тебя весь map() сводится к простым арифметическим действиям:
1. y=х*1.1
2. y=MAX-x
3. см 2
4. y=x/10
Зачем ты людей по такой фигне дергаешь ?
Учебник математики почитай за 3ий класс
float val = 110/100*50;
Поправлю.
float val = 110.0/100*50;
иначе считать будет всё равно в целых, и над результатом придётся долго сидеть в тягостном недоумении
Дим, зато меня никто из стариков не упрекнет, что я даю готовый код новичкам, над которым уж совсем ненадо думать))))
Дим, зато меня никто из стариков не упрекнет, что я даю готовый код новичкам, над которым уж совсем ненадо думать))))
Лучше дать направление, чем неправильный код. Для новичков же твой код выглядит с виду пристойно, но не работает, как должен с его точки зрения. Дьявол то в нюансах, до которых надо дорасти.
Лучше дать направление, чем неправильный код. Для новичков же твой код выглядит с виду пристойно, но не работает, как должен с его точки зрения. Дьявол то в нюансах, до которых надо дорасти.
+100500.
Дык, это, я даже не знаю что сказать...
естественно я в примерах привёл простые случаи которые в уме можно проверить, чтоб оценить как функция работает.
С всеми нулями отработает как и штатная функция, разве нет?
Дык, это, я даже не знаю что сказать...
естественно я в примерах привёл простые случаи которые в уме можно проверить, чтоб оценить как функция работает.
С всеми нулями отработает как и штатная функция, разве нет?
Не нужно приводить примеры, нужно приводить код, с которым проблемы.
Иначе это введение в заблуждение тех от кого ждут ответа.
И в любом случае, даже с любыми другими значениями, в вашем случае, можно все параметры умножить на 100, а после вычисления перевести в float и точно так же поделить.
Хотя и это бред, если учесть для каких целей вам это понадобилось.
В вашем случае (отопление), десятые и сотые градусов , никакого значения не имеют, т.к. разброс температуры в любом случае будет +/-5°С, из за инертности системы во первых и из за неравномерности нагрева во вторых.
Народ, по-моему вы что-то напутали. Участник Als не спрашивает, он отвечает на вопрос
Народ, по-моему вы что-то напутали. Участник Als не спрашивает, он отвечает на вопрос
Ну а нафига он тогда отвечает на то, что было адресовано ТС ?