Официальный сайт компании Arduino по адресу arduino.cc
Можно ли так сделать?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Втр, 29/12/2015 - 06:24
String brightness = ""; int i; void setup() { Serial.begin(9600); } void loop() { while (Serial.available() > 0) { //если есть доступные данные char inChar = Serial.read(); //считываем байт brightness += inChar; //собираем информацию в строку delay(i); if (inChar == ';') { i += inChar; } }
Вопрос в том, что я буду отправлять на ардуино значения типа: "21;".
Не будет ли мешать знак ;?
Зараее спасибо!
Хочется паузу внешне менять.
Не вижу, где он может мешать...
ТОесть. Пауза будет равна 21 мс, если я отправлю "21;"? Простите за нубский вопрос!
ТОесть. Пауза будет равна 21 мс, если я отправлю "21;"? Простите за нубский вопрос!
Вряд ли... Лучше опишите задачу...Просто менять паузу и все? А с 13 по 16 строка для чего?
с 13-16 - это как раз и есть прием данных в виде: "цыфра;". И эта штука записывается в переменную i.
Бред какой-то. А зачем точку с запятой к i прибавлять в 15-ой строке?
Есть программа на Lazarus. Хочу на ардуино менять значение в delay().
Бред какой-то. А зачем точку с запятой к i прибавлять в 15-ой строке?
Тут смахивает на полное непонимание того, что написано...
Дело в том, что я паралельно отправляю и другие значения для управления светодиодом. И что-бы хоть как-то ограничить показания, я для яркости сделал знак ".", а для паузы знак ";".
В Вашем случае пауза стоит внутри цикла считывания данных с SERIAL,а не там, где скорее всего надо... Ваша строка String вообще не обнуляется нигде (и не используется даже), следовательно начнет расти....
А я забыл добавить. В конце внутреннего цикла стоит
:
brightness нужна для управления яркостью. А i для управления паузой.
Если Вам нужно отправить паузу 21мсек, то сначала вы заносите это значение по байтам в строку brightness (что, собственно, Вы и делаете) и далее после цикла надо бы
Получается
Не нужно?
Если Вам нужно отправить паузу 21мсек, то сначала вы заносите это значение по байтам в строку brightness (что, собственно, Вы и делаете) и далее после цикла надо бы
А символ ";" убирается при конвертации String в int?
Получается
Не нужно?
Вообще ерунда какая-то... Вам зачем символ ';'?
Получается
Не нужно?
Вообще ерунда какая-то... Вам зачем символ ';'?
А как без знаков разделять типы данных? Мне нужно 2 типа: один для яркости светодиода, которое принимается числом с символом ".", а другой для паузы, который принимается числом с символом ";".
Дык если и то и то у вас число, то и тип данных один... Пишите, к примеру, "х21" - установить паузу равную 21мсек, а y100 - установить яркость равную 100... И парсите строку уже как хотите... Хоть по-символьно, хоть, например, через indexOf()...
А в чем недостаток ;?
Тут смысл в чем: если приходит, например, х21, то очень удобно парсить... Если первым символом пришел 'у', то значит далее число будет относится к яркости, а если первым символом пришел 'х'- то далее будет значение паузы...Можно и ';' ставить вместо 'x', но впереди... Это при посимвольном парсинге...
Я правильно понял:
Я отправляю ";20" и значение i беднт = 20.
Все верно?
Mestniy96, обязательно отправлять данные в текстовом виде ? Отправляйте бинарными, и парсить ничего не придётся.
Я правильно понял:...
Если в этом случае отправить ";20", то в первом же проходе цикла while считается ';' и 'i' присвоится значение строки, которая еще пустая(в ней будет только этот символ ;)... А вообще быстрее пробовать самому и выводить результат в Serial... Отправьте "20;" и посмотрите результат... Подкорректируйте, если результат не соответствует ожиданиям)
Вводим в терминале например "1234;5678" и жмём энтер. Данные укладываются в data.d1/d2 и выводятся в терминал с новой строки.
Вводимые символы повторяются эхом.
Спасибо всем. Буду пробовать!
Можно вообще командную строку сварганить:
Спасибо Tomasina. Но я управляю не через терминал, а через программу.
А в чем разница между терминалом и "другой программой"? Главное принцип обмена, протокол, а терминалом, другой программой или еще чем - это не принципиально.
Немного непонятно, для чего управлять устройством из программы с помощью текстовых сообщений ? Лучше придумать свой протокол, со всеми плюшками типа CRC. А то получается, в программе конвертируем числа в текст, передаём его, а в девайсе обратно преобразовываем в числа. Не геморно ? Ещё и учитывая, что при строковых сообщениях отправляется больше данных, а значит вероятность прихода их кривыми - увеличивается.
Бред какой-то. А зачем точку с запятой к i прибавлять в 15-ой строке?
Женя ман прочитай сначала!
Ну положи в общий доступ - я тут намедни все искал как правильно сделать....
Ну если не ноу-хау %(