Вопрос по отправке информации в компьютер.
- Войдите на сайт для отправки комментариев
Пнд, 07/04/2014 - 15:56
Добрый день, потихоньку разбираюсь с ардуино. Может кто сталкивался связь Ардуино и Делфи. Возник вопрос как правильно отправлять данные в компьютер, при условии что их дальнейщая обработка идет в Делфи. Что лучше использовать print или write, при использование print данные отображаются не корректно, с write все работает, но проблема в том что датчики которые у меня стоят цифровые и температура может быть отрицательной и при использование write возникает проблема передачи (-). Еще хотелось бы узнать как разом передать массив из байт. Попробовал так write(array,5), где 5-кол-во элементов, но компилятор ругается.
Добрый день, потихоньку разбираюсь с ардуино. Может кто сталкивался связь Ардуино и Делфи. Возник вопрос как правильно отправлять данные в компьютер, при условии что их дальнейщая обработка идет в Делфи. Что лучше использовать print или write, при использование print данные отображаются не корректно, с write все работает, но проблема в том что датчики которые у меня стоят цифровые и температура может быть отрицательной и при использование write возникает проблема передачи (-). Еще хотелось бы узнать как разом передать массив из байт. Попробовал так write(array,5), где 5-кол-во элементов, но компилятор ругается.
Большое, человеческое спасибо! Сам без году неделя, как дуину увидел, а тут, благодаря Вашему посту, сразу почувствовал себя профессионалом! По крайней мере, с отправкой на комп вопросов почти не возникает...)))
Код есть?
Вам какой код нужен, Делфи или в ардуино? В принце как таковой проблемы нет, хотелось просто узнать как умные люди делают.
Задумка у меня следующая, ардуино опрашивает кучу дачтиков по дому, и постоянно шлет данные в комп, далее делфи их обрабатывает и посылает ардуино команду на включение или выключение какого-нибудь реле. Пока, данные посылаю через write.
Код дуины. Как Вы разбираете принятые данные на компьютере- вопрос отдельный
Код сейчас выложить не могу, нет с собой, но я просто опрашиваю датчики затем результат каждого отдельно посылаю write(result). Почитал и понял, что знак надо отправлять в старшем байте, при отправке таким вариантом.
VUSB, AVR-CDC. Первый, имхо, вам подойдет. Используйте как HID-устройство. Там и примеры софта есть. Плюс в ненадобности установки драйверов.
Но из ваших постов я так понимаю вы отправляете данные через переходник USB-UART? Тогда так и гуглите - Delphi com-порт. Также на не русском форуме ардуины есть много веток по типу "serial.print pr serial.write?" - рекомендую к прочтению.
По поводу вашего проекта - я бы отдал управление включением\отключением релюшками самой ардуине, а софт на компе только вносит изменение в настройки порогов срабатывания ардуины и выводит считанные показания на экран. Это для того, чтобы девайс продолжал работать в случае отключения софта\компа.
Спасибо, поищу на форуме serial.print и serial.write.
>Попробовал так write(array,5), где 5-кол-во элементов, но компилятор ругается.
Так попробуйте:
И поиск по форуму пошерстите. Отправку прием данных из сериал обсасывали не раз и не два. Если память не изменяет - и с дельфи тоже. Но, по большому счету - "кто на другом конце провода" (Дельфи, Процессинг, другая ардуина, радио-передатчик) - не важно. Принципы абсолютно одинаковы (более того, ардуино даже отличить не сможет кто там "на другом конце" подключен в данный момент. для нее это просто "набор байт" которые посылаем/принимаем).
Спасибо большое, попробую ваш вариант.
leshak Попробывал ваш способ, но почему то все равно ругается
write(&array,
sizeof
(array))
.Ну, во первых "ругань" это же не плохого характера компилятора. Его "ругань" - это ваш первый помошник. В 50% случаев, по тому как ругнулся можно понять "что ему не нравится" и подгнать напильником без необходимости смотреть в документацию или примеры.
Если самому понять не удалось,то на форум говорить не "ой ЧТО_ТО не рабоатет". А сказать "как именно ругнулось".
Ладно, теперь по тому что я вижу:
"; объявляю массив" - боюсь это очень странная синтаксическая конструкция. Ни один компилятор ее не поймет. Что-то вы тут упустили (а вот дальше - вы про это уже не забывали).
Вообщем запомните, во всех остальных "не учебных языках" (Pascal, Basic) , нумерация массивов - всегда с нуля. Поэтому val вы должны пихать в array[0], а temperature22 у вас, в итоге попасть в array[7].
Только не пытайтесь исправить объявление массива. на "int array[7]". Так не нужно. При объявлении мы указываем именно "количество". А при обращении - считаем от нуля. Нулевой - это первый элемент массива.
Во вторых. На словах вы сказали "отправить массив байт", а отправить пытаетесь "массив int-тов". То есть понятно, что в итоге вам массив байт слабо подходят (если честно то и int-ты могут не устроить). Но начните, все-таки с массива байтов.
И, что-бы не отладить передачу-прием, не пихайте туда свои датчики. Положите просто "тестовые цифры". Скажем 1,2,3,4,5,6... когда примете нормально в дельфи их - тогда дальше поедите с разными типами разбиратся.
Ну вот. Когда перейдете на "byte array[8]", вот тут уже начнет ругатся на "мою строчку". Ее поправить можно так:
Или так:
Вообщем-то после перехода на byte, даже ваш изначальный вариант
Будет работать без ругани. Только отправлять, само собой, он будет не весь массив целиком, а только первые пять элементов.
Так что
Тоже покатит (только если массив потом изменит размер - нужно не забывать поправить. поэтому я препочитаю sizeof - пусть сам смотрит на разрмер массива).
А потом, мы попробуем отправить, все-таки массив int[]-тов.
А потом, с большой долей вероятности, мы захотите отправлять массив double[].
А потом мы почухаем затылок. И решим что "в данном случае массив не самое удобное решение и лучше будет использоваться struct" (struct - это аналог Record-End из паскаля/дельфи).
Спасибо, очень пояснительно. Буду пробовать. Заодно пробую с отправкой символов.