из delphi в arduino

ArcaN0id
Offline
Зарегистрирован: 11.03.2012

Из делфи отправляется строка с числом. Как в ардуино эту строку использовать как число и применять его в delay() например? тут же по идее несоответствие типов идет.... string - integer...((( пробовал int(x), но почему-то не воспринимает должным образом... 

step962
Offline
Зарегистрирован: 23.05.2011

 Вы уже научились выделять из полученной строки части, соответствующие передаваемым числам? Если нет - научитесь.

Вы умеете символьное представление цифры перевести  в цифру ('9' в 9, '3' в 3 и т.д.)? Если нет - научитесь.

Ну а после этого остается самая ерунда...

ArcaN0id
Offline
Зарегистрирован: 11.03.2012

 если бы научился не спрашивал бы) может тогда ссылку где учиться?

step962
Offline
Зарегистрирован: 23.05.2011

 Ну цифирь-то из потока выделить легко:

проверяем в цикле получаемые символы

 

если после символов-нецифрей попадается символ из диапазона (ch>='0' && ch<='9'), то очищаем буфер (массив из 4-5-6 переменных типа char), устанавливаем индекс (по нему определяем, в какую ячейку массива производится запись) в 0, записываем текущий символ в буфер, увеличиваем индекс на 1.

 

 

если после символа-цифры попадается символ из диапазона (ch>='0' && ch<='9'), то записываем текущий символ в буфер, увеличиваем индекс на 1.

 

если после символа-цифры попадается символ не из диапазона (ch>='0' && ch<='9'), то символьный образ целого числа принят, приступаем к его преобразованию в тип int.

Попробуйте преобразовать этот алгоритм в код, показывайте результат. Если что с первого раза не получится - народ здесь частично добрый. Поизгаляются, но и на путь истинный тоже наставят. ;)

 

leshak
Offline
Зарегистрирован: 29.09.2011

 Ну во первых подумайте "оно вам нужно"? Всмысле "слать строкой, а потом переводить ее в числовое значение", может сразу числовое значение и слать? Зачем эти преобразование чило->строка->число.

Если все-таки нужно (или просто хочется научится), то нужно понять следующие:

Когда вы шлете строку, то в ардуино, все-равно приходит массив байтов (по одному), содержащий коды символов этой строки. И вам нужно "коды символов" перевести в число. 

Если вы пошлете строку "123", то ардуине прийдут байты [49,50,51]  (коды символов 1,2,3).

Ну вот и подумайте, как эти коды перевести в соотвествующие им числа, а потом "собрать" их в одно трех значное число.

Банальная "лабораторная работа по программированию" :)  Можете вначале попробовать сделать это в самой дельфи. Отработать алгоритм. Объявите массив байтов с элементам [49,50,51] и переведите его в число 123. Не используя приведение типов, встроенные конвертеры,chr,строковые функции и т.п. (в ардуине их не будет). Используя только арифметику и циклы.

 

step962
Offline
Зарегистрирован: 23.05.2011

leshak пишет:

 Ну во первых подумайте "оно вам нужно"? Всмысле "слать строкой, а потом переводить ее в числовое значение", может сразу числовое значение и слать? Зачем эти преобразование чило->строка->число. 

Для целых чисел условно справедливо. Здесь можно попасть в ловушку разного порядка байтов в слове. В одних контроллерах (процессорах) младший байт расположен в памяти перед старшим (в пределах слова), в других - наоборот. Да и размеры слова различны. Не страшно, но следует помнить.

 

step962
Offline
Зарегистрирован: 23.05.2011

упс... отдуплился

 

leshak
Offline
Зарегистрирован: 29.09.2011

step962 пишет:

Здесь можно попасть в ловушку разного порядка байтов в слове.  

Я помнил про это. Просто не хотелось вываливать сразу много инфы (решил подождать вопроса). Тем более что не известно пойдет ли человек этим путем, будет ли он слать что-то больше 255 и т.п. Может он не хочет терять возможность, удобно тестить набирая команды в Serial Monitor?

Да и в этом случае. Переставить байты местами, вся-ко проще чем строку конверитить.

Но думаю ваша ссылка тоже пригодится.

А вообще, конечно, если хочешь программить, то нужно умеить и строки конвертировать, и байты слать, и слова пропихивать, и с представлением дробных/отрицательными чисел разобратся. Ну и использовать то что более оптимально в данный момент.