Свойства последовательно порта
- Войдите на сайт для отправки комментариев
Всем привет. На днях я решил заняться изучением свойств последовательно порта. Для интереса, решил взять такую задачу. В зависимости оттого, какое слово мы ввели в порт, мы на выводе должны получить то или иное значение переменной (для последующего использования в switch).
Но столкнулся с такой проблемой, что он не сразу считывает данные. Помогите сделать считывание моментальным.
Вот пример программы(пишу не с пк, поэтому заранее сори за недочёты по типу потери запяточек):
char importp = "import";
char exportp = "export";
char sleepp = "sleep";
int a = 0;
void setup(){
Serial.begin(9600);
}
void loop(){
for(;;){
if(Serial.find(importp)) a=1;
else{
if(Serial.find(exportp)) a=2;
else{
if(Serial.find(sleepp)) a =3;
}}
if(a > 0) break;
}}
Немного ознакомившись с теорией, я сначала решил сменить стандартную задержку, но это не шипко помогло.
В данный момент проблема куска приведённого выше кода в том, что идёт конфликт в считывании. Т.е. если мы введём import, а в этот момент команда ищет hello, то ничего не произойдёт. Как обойти этот момент?
Научиться программировать правильно
Научите новичка)
ТС, ты бы по форуму полазил для начала, поискал бы информацию о том как это делается.
Искал. Но найти не получилось
Например
Можно поподробней, я немного нубик
по ссылке скетч. Он обрабатывает команды прилетевшие по Serial соединению . Нужные команды пишете вверху скетча. Обработка команд происходит в функции runCommand(). смотрите там комментарии. Также после команды можно передавать переменные, примерно так start:1256:58:89 . Количество переменных после двоеточия задается вверху скетча.
Спасибо. буду иметь ввиду
"Функция Serial.find() осуществляет чтение данных из последовательного буфера до тех пор, пока не будет найдена искомая строка заданной длины".
Работает только первый ее вызов, обнаруживший байт в буфере объекта Serial.
на данный момент я пришел к такому коду:
Дальше:
- в байте, передаваемом по последовательному порту 8 информационных и два служебных бита, итого - 10. Вы передаете до 6 символов-байт, т.е. всего нужно передать 60 бит, т.е. скорость передачи должна составить 16000000*60=960000000, т.е. в программе Вам надо написать:
Serial.begin(960000000);
А теперь, как Вы думаете, сможет ли порт работать на такой скорости?
Конечно, мгновенная передача данных так же, как и вечный двигатель, безусловно, могли бы продвинуть технику далеко вперед, но, увы, не все мечты осуществимы.
String wtf[7];
А Вы напишите с чего надо, чтобы всё было на месте и код был бы вставлен с номерами строк. Заодно подравняйте код перед вставкой.
используя b = Serial.readStringUntil(inchar);
вы так же можете иметь задержки по двум причинам
первая задержка не столь критична, потому что она не очень большая. Связана с тем, что эта функция читает из Serial все байты, имеющиеся в буфере Serial, сразу - за один присест, остальное находящееся в loop() пока функция читает эти байты - ждёт. Но байты читаются довольно быстро, поэтому задержка не очень чувствуется.
вторая вполне себе ощутимая - если скетч не получит искомого символа inchar, то данная функция при этом будет работать как delay в течение своего таймаута, по умолчанию, по-моему 1 сек. т.е. все остальное будет простаивать 1 секунду.
Поэтому мой вам совет. Читайте по одному байту из Serial каждый проход loop(), пока не наткнетесь на символ маркер конца строки. Обычно это символ перевода строки: обозначается LF или '\n' (код 0x0A) . Такой подход и без задержек и не будет переполнять буфер Serial. Как сделать, я вам пример давал. Что там не понятно, спрашивайте.
и разберитесь чем отличаются одиночные символы от строк. Чем отличается например "/" от '/'
написав char importp ="import/"; , вы пытаетесь одиночному символу присвоить строку символов. Так низя
коллеги, о каких задержках вообще речь? Или вы так ТС троолите?
У него же в каждой строчке кода - жуткая чушь...
Или вы так ТС троолите?
Думаю, троллят.
У него же в каждой строчке кода - жуткая чушь...
Похоже, я тут единственный, кто действительно не читает неправильно вставленный код :-(
Похоже, я тут единственный, кто действительно не читает неправильно вставленный код :-(
Я и правильно-то вставленный не всегда читаю... ;))
Хорошо