из delphi в arduino
- Войдите на сайт для отправки комментариев
Пнд, 12/03/2012 - 03:52
Из делфи отправляется строка с числом. Как в ардуино эту строку использовать как число и применять его в delay() например? тут же по идее несоответствие типов идет.... string - integer...((( пробовал int(x), но почему-то не воспринимает должным образом...
Вы уже научились выделять из полученной строки части, соответствующие передаваемым числам? Если нет - научитесь.
Вы умеете символьное представление цифры перевести в цифру ('9' в 9, '3' в 3 и т.д.)? Если нет - научитесь.
Ну а после этого остается самая ерунда...
если бы научился не спрашивал бы) может тогда ссылку где учиться?
Ну цифирь-то из потока выделить легко:
проверяем в цикле получаемые символы
если после символов-нецифрей попадается символ из диапазона (ch>='0' && ch<='9'), то очищаем буфер (массив из 4-5-6 переменных типа char), устанавливаем индекс (по нему определяем, в какую ячейку массива производится запись) в 0, записываем текущий символ в буфер, увеличиваем индекс на 1.
если после символа-цифры попадается символ из диапазона (ch>='0' && ch<='9'), то записываем текущий символ в буфер, увеличиваем индекс на 1.
если после символа-цифры попадается символ не из диапазона (ch>='0' && ch<='9'), то символьный образ целого числа принят, приступаем к его преобразованию в тип int.
Попробуйте преобразовать этот алгоритм в код, показывайте результат. Если что с первого раза не получится - народ здесь частично добрый. Поизгаляются, но и на путь истинный тоже наставят. ;)
Ну во первых подумайте "оно вам нужно"? Всмысле "слать строкой, а потом переводить ее в числовое значение", может сразу числовое значение и слать? Зачем эти преобразование чило->строка->число.
Если все-таки нужно (или просто хочется научится), то нужно понять следующие:
Когда вы шлете строку, то в ардуино, все-равно приходит массив байтов (по одному), содержащий коды символов этой строки. И вам нужно "коды символов" перевести в число.
Если вы пошлете строку "123", то ардуине прийдут байты [49,50,51] (коды символов 1,2,3).
Ну вот и подумайте, как эти коды перевести в соотвествующие им числа, а потом "собрать" их в одно трех значное число.
Банальная "лабораторная работа по программированию" :) Можете вначале попробовать сделать это в самой дельфи. Отработать алгоритм. Объявите массив байтов с элементам [49,50,51] и переведите его в число 123. Не используя приведение типов, встроенные конвертеры,chr,строковые функции и т.п. (в ардуине их не будет). Используя только арифметику и циклы.
Ну во первых подумайте "оно вам нужно"? Всмысле "слать строкой, а потом переводить ее в числовое значение", может сразу числовое значение и слать? Зачем эти преобразование чило->строка->число.
Для целых чисел условно справедливо. Здесь можно попасть в ловушку разного порядка байтов в слове. В одних контроллерах (процессорах) младший байт расположен в памяти перед старшим (в пределах слова), в других - наоборот. Да и размеры слова различны. Не страшно, но следует помнить.
упс... отдуплился
Здесь можно попасть в ловушку разного порядка байтов в слове.
Я помнил про это. Просто не хотелось вываливать сразу много инфы (решил подождать вопроса). Тем более что не известно пойдет ли человек этим путем, будет ли он слать что-то больше 255 и т.п. Может он не хочет терять возможность, удобно тестить набирая команды в Serial Monitor?
Да и в этом случае. Переставить байты местами, вся-ко проще чем строку конверитить.
Но думаю ваша ссылка тоже пригодится.
А вообще, конечно, если хочешь программить, то нужно умеить и строки конвертировать, и байты слать, и слова пропихивать, и с представлением дробных/отрицательными чисел разобратся. Ну и использовать то что более оптимально в данный момент.