помогите советом.
- Войдите на сайт для отправки комментариев
Сб, 24/11/2012 - 23:31
хочу передавать данные с аналогово входа в программу, пакет передачи должен быть такой:
начало пакета -- FFh
длина пакета -- 2 байта
состояние канала 1 -- 4 байта + 1 байт crc
состояние канала 2 -- 2 байта + 1 байт crc
состояние канала 3 -- 2 байта + 1 байт crc
собственно вопрос -- как данные с 1 аналогового канала привести к 4 байтному значению.
Прям под вашей темой преобразование unsigned long > byte (4 штуки) и обратно
ребята, тупая моя голова, подскажите как мне в компорт передавать в hex "00ff0800ee816f"?
ребята, тупая моя голова, подскажите как мне в компорт передавать в hex "00ff0800ee816f"?
что вы подразумеваете под "передать в hex"?
Если передачу в HEX-представлении, то ничего - передайте то, что cтоит между кавычками как строку и все.
Если имеется в виду числовое значение - отгрызайте справа (если интересует типичный для архитектуры x86 порядок передачи байтов "от младшего к старшему" или low-endian) по два символа, переводите в числовое значение (очередного байта) и передавайте полученное значение с помощью Serial.write().
мне нужно передать данные в программу, программа посылает 02h и ждет ответа --
Serial.write("00ff0800ee816f"); не работает, я понимаю почему, но немогу понять каким макаром мне передать эти данные.
Serial.write("00ff0800ee816f"); не работает, я понимаю почему, но немогу понять каким макаром мне передать эти данные.
Ну, тогда передайте эту последовательность таким макаром:
UPD: скорее - все же в обратном порядке (т.е. пресловутый big-endian)
я понял насчет переворота, спасибо. данные пошли,хотя и с ошибками.
а почему данные в ком порт идут сплошным потоком? запрос-ответ-ожидание-запрос-ответ... не работает?
победил:
ардуино отзывается на запрос, только как-то странно:
а почему данные в ком порт идут сплошным потоком? запрос-ответ-ожидание-запрос-ответ... не работает?
Потому что вы туда посылаете их сплошным потоком.
Если вы хотите отвечать на запрос (это 0x02 что-ли?) так будьте добры организовать прослушивание поступающей в ком-порт информации, анализировать ее и - при условии обнаружения признаков запроса - генерировать ответ.
И прочитайте, для каких целей используется функция Serial.available()
победил:
ардуино отзывается на запрос, только как-то странно:
а что тут странного-то? IN-поток полностью соответствует тому, что вы отправляете: 00-ff-08-00-ee-81-6f...
но программа не видит плату.
Зачем перед FF Вы посылаете 00?
таков протокол. разобрался. неправильно количество байт передавал.
есть предположения как считается crc нужного канала? в соседней теме спрашивал, но так и непонял как вычислить нужный мне метод подсчета crc.
что-то я непойму опять, каналов же всего 6?
а данный код работает. в чем ошибка?
есть еще вопрос, возможно ли реализовать на 3х uno такую схему -- arduino1 получает запрос, опрашивает arduino 2, получает результат, опрашивает arduion 3, получает результат.
1-wire? или isp?
Вы наверное имели ввиду I2C или SPI.
да. мне надо с одной ардуины посылать запрос а с другой получать ответ -- 18 байт.
мужики, благодаря вашей активной помощи и копания различной информации я медленно но верно иду к решению своей задачи, но не могу решить некоторые элементы -- подключил энкодер через библиотеку encoder. кручу его и получаю в переменную на выходе число, при инициализации платы значение равно 0, при вращении по часовой от 1 и по нарастающей при вращении против -1 и по убывающей, как как мне это число перегнать в 4 байтное значение? объясните сам алгоритм, над кодом поколдую сам.
В сообщении #1 уже был ответ
я прошу рассказать словами.
я прошу рассказать словами.
Загрузить адрес переменной, в которой у вас хранится это число, в указатель типа "указатель на байт" (или "указатель на символ") и четыре раза прочитать значения байтов по этому указателю, инкрементируя значение указателя между этими операциями чтения.
Это один рассказ в словах.
Определить объединение (union), один элемент которого - длинное целое, а второй - массив из 4 байтов. Создать переменную этого типа. Сохранить в ней длинное целое, затем прочитать эту переменную как массив из 4 байтов.
Это другой рассказ в словах.
Есть еще, конечно, и третий, и четвертый, но лень. Может быть, еще кто-нибудь подтянется.
Если не помогло, то делать нечего - придется-таки изучать теоретические основы...
спасибо за объяснение, разобрался.