Принятие чисел через COM-порт.
- Войдите на сайт для отправки комментариев
Втр, 10/03/2015 - 01:11
В программе, необходимо ввести число, например расстояние, которое должен проехать робот. Проблема в том, что функция Serial1.read() принимает посимвольно.
Не могли бы подсказать как принимать числа, к примеру число 125? А то в голову лезут слишком странные пути решения этой проблемы.
На данный момент функция чтения параметров (дальность, угол поворота) выглядит следующим образом:
Можно Serial.parseInt, Serial.parseFloat использовать.
А можно считать как строку и выполнить atoi
Можно Serial.parseInt, Serial.parseFloat использовать.
А можно считать как строку и выполнить atoi
А можете привести какой-нибудь пример? Например, с той же строкой и atoi.
Используйте Serial.parseInt с ним проще будет чем с атои. Или гляньте поиском, в какой-то теме я уже кидал подобные куски. Вечером если время будет, накидаю
только обнулять не забывайте)
только обнулять не забывайте)
А можно это загнать в цикл, к примеру while? Чтобы ждать нажатия Enter или Space?
Используйте Serial.parseInt с ним проще будет чем с атои. Или гляньте поиском, в какой-то теме я уже кидал подобные куски. Вечером если время будет, накидаю
Большое спасибо, спасли меня. Данная функция отлично работает. Так что, можете пример не писать.
Думаю, ответ уже не требуется?)
Только вопроса, если честно, не поняла.. Что вы хотите начать делать по сигналу "Enter"? Просто само получение этого сигнала по ком порту обрабатывать не просто..)
Может кому надо будет, сама просто недавно узнала как же это сделать:
Просто как пришли какие-то данные (Serial.available>0) начинаем чтение (лучше в отдельную переменную).. Если данные закончились, записываем куда надо их и со спокойной душой обнуляем.
И еще не забываем, что скорость передачи данных com порта (если 9600) меньше скорости обработки контроллером данных (если только у вас не цикл на несколько страниц), так что чтобы контроллер не сидел без дела, пока мы посылаем байт инфы, следует организовать небольшую задержечку..
tmp+=
Serial
.read()-48;
//загружаем принятое число (минус код "0") равно
tmp+=
Serial
.read()-'0';
//загружаем принятое число (минус код "0")
Да, одно и то же)) я писала быстро, на свой манер)
Думаю, ответ уже не требуется?)
Только вопроса, если честно, не поняла.. Что вы хотите начать делать по сигналу "Enter"? Просто само получение этого сигнала по ком порту обрабатывать не просто..)
Может кому надо будет, сама просто недавно узнала как же это сделать:
Просто как пришли какие-то данные (Serial.available>0) начинаем чтение (лучше в отдельную переменную).. Если данные закончились, записываем куда надо их и со спокойной душой обнуляем.
И еще не забываем, что скорость передачи данных com порта (если 9600) меньше скорости обработки контроллером данных (если только у вас не цикл на несколько страниц), так что чтобы контроллер не сидел без дела, пока мы посылаем байт инфы, следует организовать небольшую задержечку..
До того как мне рассказали о волшебной функции, было в планах считывать числа до нажатия Enter. Типо getchar'a. Как только пользователь нажал Enter, то программа должна была переходить к выполнению следующего за циклом кода.
Ну например:
Понятно, что в таком случае, переменная counter должна быть массивом.
Прошу особо не пинать за возможные косяки и ошибки, программирую не особо давно :-)
И ещё такой вопрос, как сделать нормальный переход на следующую строчку?
Хочется:
Но к сожалению, получается некоторая табуляция. Результаты смотрю через putty.