1. Если по логике после вывода полученных символов надо опять собирать следующие символы с нулевого индекса массива - то да;
2. Нет, не нужно, главное - не забывать про завершающий '\0', и всё. Часто "очистку" статического буфера делают, просто записав в нулевой элемент массива нолик. Это относится к типу char, ессно;
3. Код - кривоват, и иногда может работать не так, как задумано, например, на высоких скоростях UART за 50 миллисекунд внутренний буфер переполнится, и будет потеря данных. Не говоря уже о том, что при записи в массив нет проверки на вхождение индекса записи в диапазон - в С/С++ легко прострелить себе ногу именно таким образом.
3. Код - кривоват, и иногда может работать не так, как задумано, например, на высоких скоростях UART за 50 миллисекунд внутренний буфер переполнится, и будет потеря данных. Не говоря уже о том, что при записи в массив нет проверки на вхождение индекса записи в диапазон - в С/С++ легко прострелить себе ногу именно таким образом.
Логично, надо упростить, спасибо, только надо будет 16 поднять и без условия.
ЗЫ. До оптимизацией готовых скетче обычно не доходит если быстродействия хватает и все работает (
arduino.cc/en/Tutorial/SerialEvent
Значит никакой "ping#" не приходит. И то, что в одинарных кавычках - не строка. Применение такой конструкции может дать любые результаты.
1234# это уже измененный текст
Одинарные кавычки, это символ, символ '#' я нахожу, но дальше сравнени строки не работает.
Изменённый кем? Я вижу, что в строке накапливается "1234#" и делается поиск вхождения подстроки по indexOf('ping#')
Раз в секунду отправляю 1234# и ping#
Отправляйте "xping#" например. Баг-то на виду - сравните первую посылку и следующие
Раз в секунду отправляю 1234# и ping#
Если строка inString будет такой: "ping#", то вот это условие - не сработает, т.к. ожидает, что подстрока "ping#" пойдёт со второй позиции:
Чуть ниже - такая же засада. Правильная проверка на нахождение подстроки в строке в любой позиции - это:
будет такой: "ping#", то вот это условие - не сработает, т.к. ожидает, что подстрока "ping#" пойдёт со второй позиции:
Чуть ниже - такая же засада. Правильная проверка на нахождение подстроки в строке в любой позиции - это:
Так работает. Спасибо.
1. Если по логике после вывода полученных символов надо опять собирать следующие символы с нулевого индекса массива - то да;
2. Нет, не нужно, главное - не забывать про завершающий '\0', и всё. Часто "очистку" статического буфера делают, просто записав в нулевой элемент массива нолик. Это относится к типу char, ессно;
3. Код - кривоват, и иногда может работать не так, как задумано, например, на высоких скоростях UART за 50 миллисекунд внутренний буфер переполнится, и будет потеря данных. Не говоря уже о том, что при записи в массив нет проверки на вхождение индекса записи в диапазон - в С/С++ легко прострелить себе ногу именно таким образом.
3. Код - кривоват, и иногда может работать не так, как задумано, например, на высоких скоростях UART за 50 миллисекунд внутренний буфер переполнится, и будет потеря данных. Не говоря уже о том, что при записи в массив нет проверки на вхождение индекса записи в диапазон - в С/С++ легко прострелить себе ногу именно таким образом.
Как исправить?
я вот так например буфер построчно заполняю и потом обрабатываю:
в С/С++ легко прострелить себе ногу именно таким образом.
Я всегда так делаю
andycat, а зачем нужна строка #3, если есть #4?
Для надежности.
andycat, а зачем нужна строка #3, если есть #4?
Логично, надо упростить, спасибо, только надо будет 16 поднять и без условия.
ЗЫ. До оптимизацией готовых скетче обычно не доходит если быстродействия хватает и все работает (
Извините, а разве у Serial есть метод readString() ?..
Нигде не могу найти в описании Serial такого метода. Это какой-то другой Serial?
Извините, а вот строчка
char
buffer[100]; - не слишком ли расточительный расход памяти?
Постоянно сталкиваюсь с дефицитом памяти в Ардуино UNO и такое расходование памяти показалось мне как-то опрометчивым
Извините, а разве у Serial есть метод readString() ?..
Нигде не могу найти в описании Serial такого метода. Это какой-то другой Serial?
Не там ищите....
https://www.arduino.cc/reference/en/language/functions/communication/ser...
Спасибо