Официальный сайт компании Arduino по адресу arduino.cc
Конвертация float в массив char
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Сб, 20/01/2018 - 18:15
Здравствуйте! Сразу опишусь что я новичок в C++. Сейчас занимаюсь с модулем SIM900, библиотека такая http://github.com/amperka/gprs-shield/releases. И какой уже день не могу разобраться с отправкой температуры, записанной в переменную float.
void get_atmosph() { unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; h = dht.readHumidity(); // читаем влажность // temp_f = dht.readTemperature(true); // читаем температуру в фаренгейтах t = dht.readTemperature(false); // читаем температуру в цельсиях // проверяем, что считалось pa = bmp.readPressure(); mmHg = pa / 133,32236842; } }
Дело в том что библиотека воспринимает текст смс-ки только в массиве char, размером до 160 символов.
else if (!String(message).compareTo("Temperature") && unread == true) { get_atmosph(); Serial.println("New message"); gprs.sendSMS(phone, message); unread = false; Serial.println("Message send"); }
Если кто-то знает хоть какую-то ссылку на ресурс или даст кусок кода, то буду очень Вам благодарен.
dtostrf
dtostrf
Конечно, можно и через класс String, раз уж Вы им всё равно пользуетесь (суде по показанному кусочку).
А чего, првда, через String не сделали?
Евгений, спасибо большое за помощь! Если подскажете как сделать через String это будет ещё лучше. Я просто этот код по кусочкам собирал и вместе с этим C++ учил, поэтому много ещё не знаю.
через String это будет ещё лучше
Я то покажу, мне не жалко, но лучше не будет - точно! String непростая вещь и для своего использования требует квалификации, которой Вы пока не обладаете. Но дело Ваше ...
А там, собственно и делать-то нечего. Создаёте строку, передав в конструктор Ваш float и количество знаков после запятой, а потом берёте её c_str - вот Вам и массив char'ов
Скобки в строках 14 и 19, можно и опустить, на вид ничего не изменится, но лучше их ставить. Открывающую перед описанием String, а закрывающая тогда, когда созданный String больше не нужен и его можно выбросить. Подробности.
Ну всё равно спасибо! Хоть какая-то информация. Попробую её применить в своём скетче.
Евгений, спасибо, всё получилось! Теперь мой последний вопрос. Как склеить char равную "Temperature: " и char равную "27.51" в char равную "Temperature: 27.51"?
А что по отдельности передавать нельзя?
А чтобы Вам ответить, надо знать как Вы её собрались клеить? Из String'ов или из символьных массивов?
Клеить я буду из char'ов , а по отдельности передавать нельзя, потому что задача стоит сделать сообщение которое будет удобно читать пользователю.
Нет, давайте толком. Вы для преобразования используете String или dtostrf?
Просто, если там уж всё равно есть String, то проще им и склеить. А если нет (если сразу через dtostrf, то гуглите функции strcpy и strcat
Евгению и DIYMan'у огромное спасибо за помощь! Забыл я что-то выложить сюда свой готовый код. Ну вообщем вот он:
Извините что без комментариев в коде. Просто пока он не такой сложный я комментарии не пишу, да и вообще я не люблю комментарии. Думаю что кому-то из начинающих ардуинщиков мой код поможет!
Спасибо ещё раз за помощь и удачи!
Просто пока он не такой сложный я комментарии не пишу, да и вообще я не люблю комментарии.
Распространённая ошибка. Поверьте, комментарии помогут вам через год-два, когда вы будете разбираться, что и как. Не брезгуйте комментариями. Небольшой жизненный секрет, существенно облегчающий написание кода, помогающий сразу его комментировать и структурировать: сначала - вы не пишете ни строчки кода, совсем. Вместо этого пишете комментарии, примерно вот так:
Потом - начинаете между комментариями писать код, это становится проще сделать, т.к. вы уже человечьим языком описали алгоритм ;)
Не брезгуйте комментариями. Небольшой жизненный секрет, существенно облегчающий написание кода, помогающий сразу его комментировать и структурировать: сначала - вы не пишете ни строчки кода, совсем. Вместо этого пишете комментарии, примерно вот так:
Потом - начинаете между комментариями писать код, это становится проще сделать, т.к. вы уже человечьим языком описали алгоритм ;)
Люто, бешено плюсую. Без комментариев через 2 года проще всё с нуля написать, чем разбираца.
Спасибо за жизненный совет! Как только найду свободное время займусь комментариями в коде (он у меня всего 530 строк).
Люто, бешено плюсую. Без комментариев через 2 года проще всё с нуля написать, чем разбираца.
Увы, есть "крутые программисты", твёрдо уверенные, что "хороший код сам себя комментирует". Вот и думаю то и дело - это я тупой или таки код "не хороший" :)
Ну это Вы зря) Просто для меня легче учиться когда комментариев нету, да и весь код целиком я пока что никуда не выкладывал.
Ну это Вы зря) Просто для меня легче учиться когда комментариев нету, да и весь код целиком я пока что никуда не выкладывал.
Я это вовсе не о Вас говорил. Мне по работе часто приходится разбираться со старым чужим кодом. И вот там бывает очень озадачиваешься...
Ну это Вы зря) Просто для меня легче учиться когда комментариев нету...
Это Вы пока просто не поняли, как на самом деле легче учиться.
Сложно писать комментарии тем , кто программирует , как играет в рулетку. Пошло- не пошло. А почему и как это за пределами сознания. Вот как ему писать комментарии , если у него сплошная угадайка. Или когда кто-то пишет за него код, например на каком-то форуме.
Ладно, объясню проще. Зачем я буду писать коментарий например на pinMode(9, OUTPUT); если там и так все понятно, что мы настраиваем 9 пин как выход. Да и в соих скетчах я пока максимум if else использую.
Ладно, объясню проще. Зачем я буду писать коментарий например на pinMode(9, OUTPUT); если там и так все понятно, что мы настраиваем 9 пин как выход. Да и в соих скетчах я пока максимум if else использую.
Вы просто в упор не понимаете для чего нужны комментарии и как их надо писать. Потому они для Вас и бесполезны.
Например:
комментарий совершенно мудацкий и бесполезный.
А вот если так:
то комменетарий говорит о том, что на самом деле делается и что совершенно не очевидно из кода.
Теперь Вы мне наконец объяснили что это такое) Спасибо!
Ладно, объясню проще. Зачем я буду писать коментарий например на pinMode(9, OUTPUT); если там и так все понятно, что мы настраиваем 9 пин как выход. Да и в соих скетчах я пока максимум if else использую.
Алексей Кабанов, из кода видно, что Вы делаете, а комментарий должен отражать, зачем Вы это делаете.
Затюкали человека! ;) Про меня ведь никто не скажет, что я не программист? ;)
Я очень мало комментирую. И до сих пор спокойно читаю свои еще учебные примеры от конца 80-х годов. и помню тип монитора, и даже наклейки на нем, а также как и почему у меня переменные i, j и k, уж простите. Это называется эйдетическая память... люди разные бывают. Хотя вообще, в среднем, - комментарии полезны и даже необходимы.
Дык, классику никто не отменял: «Настоящие программисты не нуждаются в комментариях : текст программы все объясняет»
Дык, классику никто не отменял: «Настоящие программисты не нуждаются в комментариях : текст программы все объясняет»
мне оттуда понравилось - "компиляторы с проверкой границ массива душат творчество"
А что, нет?
Сейчас почти доделал другой код с SIM900. Там уже он нам говорит по телефону а не строчит смс-ки. Получилось что-то вроде DTMF управления. Код будет уже с комментариями)