Чтение 64 битной переменной с Serial
- Войдите на сайт для отправки комментариев
Вс, 25/08/2013 - 14:59
Пробую написать програмку для чтения 64 битной переменной с последовательного порта и с дальнейшим ее делением этой переменной на два 32 битных пакета.Рыся в гугле ,но решений и подсказок не нашел.
Задача :есть переменная вида 397F5550822DFFE9 -ее буду вбивать в терминале,arduino слушает ком порт и при приходе такой переменной разбивает ее в 2 переменные по 32 бита типа long -Code1,Code2
Подскажите где можно ознакомиться с решением моей задачки
1.принять просто как текстовую строку и сохранить в переменную типа string
2.потом 8 нижних байтов копируете в одну переменную типа string и 8 верхних байтов копируете во вторую переменную типа string
3.далее : содержание переменных типа string из пункта 2, переводите в формат типа long с именами Code1 и Code2 соответсвенно(тут прийдеться писать отдельную функцию,либо искать уже готовые в документации Wiring)
Да была идея что строковую переменную можно использовать.Вот бы наглядно на wiringe реализацию посомтреть
Нарыл вот такую функцию,но как применить пока не понимаю,слабоват в программинге
Вот так попробовал применив найденную функцию-вылезает ошибка при присваивании данных s_dump =Serial.read()
во первых есть разница между String и string,
String - это целый класс(понятие из обьектно ориентировочного программирования)
string -это тип переменной.
разница между классом и типом - мега огромная ,самая явная в том что при использовании класса используеться значительно большее количество памяти.В мелких функциях типа "скопировать строчку","найти тот или иноой символ в строчке" использование класса это "из пушки по воробьям"
простой способ считывания и разделения по 8 байт :
или
Во втором только случае не получится вывести в сериал, так как нет такой перегрузки метода print.
Во втором только случае не получится вывести в сериал, так как нет такой перегрузки метода print.
Благодарю за скорые ответы!!
Нет потом я просто на пин порта буду выводить эти 64 бита кодируя 1 и 0 по типу манчестера -но это в проекте-пока надо разобраться с вводом в ком порт.Опять же, я так понимаю,что наверно можно не разбивая число на 2 пакета можно им оперировать?
Можно.
Получается что данные теперь находятся в массиве temp[i] и уже надо с этим массивом работать?
нет, данные находятся в 64-битной переменной Code.
Спасибо maksim!Век живи век учись.Последовательность кода не так понял.
Вот попробовал код -передается не то ,что принимается помоему.
Забыл добавить вывод вот так переделал
Потому что в сериал-монитор вы передаете коды аски, а не 64 бита (8 байт). Вы для начала определитесь в каком выиде данные приходят по серал.
Потому что в сериал-монитор вы передаете коды аски, а не 64 бита (8 байт). Вы для начала определитесь в каком выиде данные приходят по серал.
Ну как в первом сообщении написал,так и надо,просто хотел ее и по UART проконтролировать
Изучите типы данных в разделе Программирование.
Вот так выглядит 64-битная переменная:
а вот так то что вы отправляете в монитор:
разницу видите?
Да видимо я не правильный подход выбрал к решению задачи,то есть можно просто использовать тип char для ввода кода в терминал?
я так и не понял как данные оказались в переменной Code.присвоение же постоянно идет в temp[i] или в *temp
Вот простой пример кода:
Как думаете что покажет сериал монитор? 23 ? Проверьте.
Почитайте ссылки и указатели.
С указателями знаком,уже два года на информатике,просто давненько не пользовался
Просто с первого раза строчку
Неправильно понял,я с чего то решил что там идет побитовое И,а после вашего примера стало понятно,спасибо