Передача данных по радиоканалу при помощи VirtualWire
- Войдите на сайт для отправки комментариев
Сб, 13/10/2012 - 11:34
Используется следующая библиотека: www.open.com.au/mikem/arduino/VirtualWire.pdf
Вот функция отправления информации:
const char *msg = "hello";
vw_send((uint8_t *)msg, strlen(msg));
Необходимо отправить следующую информацию:
String timestamp = "2012.10.13 10:00";
float voltage = 5.56;
float current = 1.56;
float power = 8.67;
Поскольку msg - константа, "склеить" информацию для отправки не выходит (timestamp + "," + voltage + "," + current + "," + power).
Подскажите, пожалуйсто, решение проблемы.
Посмотрел описание библиотеки, не знаю почему так написаны функции, что что они принимают только uint8_t* (byte*) и не могут принимать int8_t* (char*) и уж никак не String, наверное было лень автору этим заморачиваться.
Для решения ваше проблемы вам нужно знать что такое:
Тип char
Тип byte
Указатели
Массив
"Tип" string
Есть еще такой вариант - все манипуляции делаете с String, а когда строка для отправки полностью сформирована преобразовываете ее в массив байтов и отправляете.
Можете, пожалуйста, подсказать, как это реализовать на практике?
Ну вы ребята blackhand и vxl совсем не хотите форум читать одновременно два человека заводите практически одинаковые темы.
Как преобразовать int в char.
Спасибо, maksim, за ссылку.
Проблема в недостаточном знании синтаксиса С. Можете, пожалуйста, привести пример кода, который преобразовывал был переменную типа String (в строку "склеить" все параметры у меня получается) в Byte?
Вам надо было повнимательнее изучить класс String у него есть метод toCharArray (здесь он не переведен, но есть на arduino.cc), который как раз и делает то что вам нужно, но работает он почему-то только со статическим массивом, поэтому прикиньте максимальную длинну сообщения и объявите char msg[макс. дл.]; так.
Спасибо Вам большое!
Все получилось!
Спасибо Вам большое!
Все получилось!
Можешь код показать, который скомпилился?
Тот же код, что написал maksim.
Ну вы ребята blackhand и vxl совсем не хотите форум читать одновременно два человека заводите практически одинаковые темы.
Как преобразовать int в char.
Извиняюсь, vxl, это просто я их увидил в одно время...
эмм, ну там как то надо загнать эти данные в массив, код неполный же
у меня тоже получилось, но ресивер принимает от передатчика значения, ставя перед каждой цифрой "3".
То есть число 100 выглядит как 313030, чило 1 как 31, 2 как 32 и т.д
Это можно как то исправить?
Это можно как то исправить?
Естественно - прочитав об ASCII-таблице символов, например, здесь, и сделав соответствующие преобразования. На форуме об этом уже ...надцать раз говорено.
И помимо того, что говорено, если бы вы удосужились прочитать про тип char у вас бы не возник вопрос как это исправить.
Спасибо
P.S я в первую очередь сверился с аски, "1" там не "31"
Потому, что это разные системы счисления: десятичная и шестнадцатеричная.
Спасибо! Решение простое: в ресивере выставляем при печатании строки в компорт DEC, а от результата отнимаем '0'
Можно проще, переменную, которую выводите в сериал-монитор преобразуйте в char
где data - переменная, которую выводите. И тогда функция Serial.print() бедет отправлять код АСКИ.
Или так: