Ограничить прием в Serial
- Войдите на сайт для отправки комментариев
Втр, 07/06/2022 - 22:37
Помогите ограничить сериал, без ограничения устройство виснет, т.к буфер переполняется, и сериал ждет паузу в 1сек на приеме, которой нет.
код 1й ардуины, она шлет на 2ю:
/* Описание логики: 1 3 раза Передается запредельное буферу число 2 Пошагово от [96-12] 3 Последним этапом передается огромное количество байт */ void setup() { Serial.begin(115200); } void loop() { delay(3000); if (Serial.available()) { for(int i = 0; i < 6912; i++){ Serial.write(0xAA); } } delay(3000); if (Serial.available()) { for(int i = 0; i < 3456; i++){ Serial.write(0xAA); } } delay(3000); if (Serial.available()) { for(int i = 0; i < 1728; i++){ Serial.write(0xAA); } } delay(3000); if (Serial.available()) { for(int i = 0; i < 864; i++){ Serial.write(0xAA); } } delay(3000); if (Serial.available()) { for(int i = 0; i < 432; i++){ Serial.write(0xAA); } } delay(3000); if (Serial.available()) { for(int i = 0; i < 216; i++){ Serial.write(0xAA); } } delay(3000); if (Serial.available()) { for(int i = 0; i < 108; i++){ Serial.write(0xAA); } } delay(3000); if (Serial.available()) { for(int i = 0; i < 138240; i++){ Serial.write(0xAA); } } }
код 2й ардуны, она принимает и виснет на последнем этапе:
void setup() { Serial.begin(115200); } void loop() { byte regular[7] = {0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA}; Serial.write(regular, 7); while (Serial.available() > 0) { //если есть доступные данные String mystr = Serial.readString(); int mystr_length = mystr.length(); int count = mystr_length / 9; Serial.print("count = "); Serial.print(count); Serial.println; } delay(500); }
немогу придумать как ограничить строку, буфер переполняется, устройсво виснет. Возможно использовать массив, или еще какие варианты. Буду рад любой помощи.
буфер переполняется, и сериал ждет паузу в 1сек на приеме, которой нет.
чё?
Не многовато для int?
Не многовато для int?
В самый раз ))) Ну или пару раз... )))
И делеи в 3 сек. тоже туда же...
Не читайте в стринг, виснуть не будет.
исправил на 32767. Представьте что там бесконечный цикл
как считать байты и посчитать их сумму?
Читайте побайтно.
Давно такой бредовой темы не было :)
ТС, зачем передавать один и тот же байт тысячи раз с паузами в 3 секунды? Это что, масонский ритуал?
подскажите кодом, в теме ардуино недавно, непонимаю, или наводку дайте
подскажите кодом, в теме ардуино недавно, непонимаю, или наводку дайте
приняли один символ - увеличили счетчик на единицу.
И все.
Кстати, а первый то код хоть работает? Зачем вы проверяете Serial.available() , если вам надо не принимать, а отправлять?
https://www.arduino.cc/reference/en/language/functions/communication/ser...
Хотите - так читайте. Но побайтово читать/анализировать - рациональней решение.
да, 1й код работает, он отправляет по запросу, поэтому слушает
//приняли один символ - увеличили счетчик на единицу.
//И все.
немогу(
//И все.
немогу(
Значить, не твоё, продавай свои ардуины, купи пива.
выгляит как задание от препода , по которму надо принять "заранее неизвестное, но большое количество байт" . а второй скетч - это решение ТС
исправил на 32767. Представьте что там бесконечный цикл
Не многовато для int? Почему бы не написать бесконечный цикл, вместо того, чтобы представлять?
to ne4d На сколько можно понять, Вам надо принимать данные, но не сохранять их. Дык принимайте по байтно, и не сохраняйте. (Все равно все байты 0AAh.)
Второй момент, скорее всего, Вам еще нужно разделять сообщения, и судя по всему, по времени между ними. Т.е. либо следить за временем в процессе ожидания следующего байта, и если оно превысило заданную величину (например в 2 секунды) то обнаружен конец сообщения. Или используйте прерывание от таймера, если за 2 секунды не пришло ни одного байта - сообщение принято.
Значить, не твоё, продавай свои ардуины, купи пива.
ТС на водку просил, а ты ему пиво )))
наводку дайте
Вы пытаетесь принять в свой String 138240 символов.
Даже если бы Вы это делали правильно, Вы уверены, что столько поместится в память? Вы знаете сколько у Вас памяти?
Надеюсь, на водку хватит.
в том и дело, я не хочу принимать все. абстрагируемся, данные шлет не ардуино, мне нужно ограничить прием, тк я знаю что если сообщение превысило 100*9 байт, то оно неверно, а если 99*9 байт, то верно.
обожаю это комюнити, и дедовские шутки
переделал код отладчика, теперь он такой:
Кросивое...
ii == 32765
Не многовато для int?
ii == 32765
Не многовато для int?
не многовато, диапазон -32 768… 32 767.по теме есть что сказать?
принимаю побайтово, упираюсь в потолок буфера, 64байта...(
принимаю побайтово, упираюсь в потолок буфера, 64байта...(
вранье, или показывайте код. Опять что-то делаете неверно.
при побайтовом приеме размер буфера вообще не имеет значения, можно хоть все ваши 138 тыс букв принять.
в том и дело, я не хочу принимать все.
Так и не принимайте. Вас кто-то связал и электрошокером пытает? Или зачем Вы "через нехочу" принимаете?
Обожаю когда задают вопросы не понимая что собственно спрашивают.
в том и дело, я не хочу принимать все.
Так и не принимайте. Вас кто-то связал и электрошокером пытает? Или зачем Вы "через нехочу" принимаете?
Обожаю когда задают вопросы не понимая что собственно спрашивают.
ты че трудный такой, у меня задача есть, мне нужно ее выполнить. вменяемые люди здесь подсказывают, таких как ты попрошу себастиан, там еще полно народу хотят почитать ваш протухший юмор
У нас тут за новичков код не пишут. Помогаем только тем, кто хочет научится сам.
Если тебе нужно готовое решение - пожалуйста в платный раздел.
я понимаю, но все же дискуссия помогла мне решить проблему. просто можно же нормально писать, без язвы, это не квам, к человеку с аватаркой свиньи. кстати платный раздел не посещал, надо заглянуть, незнал что он есть, спасибо
там в первом посте все описано, опустить момент просто нужно зачем это ТС. и дать намек куда ему копать, возможно мы люди просто разные, очень
я понимаю, но все же дискуссия помогла мне решить проблему. просто можно же нормально писать, без язвы, это не квам, к человеку с аватаркой свиньи/p>
я разочарован. Я так старался, а отметили вы только Евгения..
Неужели я меньше вас троллил?
На самом деле, никто не любит таких, кто вместо того чтоб учится думать самому - приходит на форум и начинает требовать готовое решение.
Не хотите показать, как вы решили проблему? Или на самом деле никакого решения нет?
я понимаю, но все же дискуссия помогла мне решить проблему. просто можно же нормально писать, без язвы, это не квам, к человеку с аватаркой свиньи/p>
значит вы были тактичнее или я просто не понял что вы тролите.
в итоге получилось упаковать в миллис, можно скоректировать значение миллис и получить нужное предельное значение, если мусор все еще идет по сериалу, значение постоянно меняется но очевидно что оно неверное
Так и есть.
Скажу Вам по секрету - все остальные - тоже. Просто, Вы какой-то непонятливый :-)
Ne4d ну что, неплохо.
удивительно что вы все-таки написали код. Не ожидал.
Приходите еще.
Так и есть.
Скажу Вам по секрету - все остальные - тоже. Просто, Вы какой-то непонятливый :-)
наверное для вас принципиально написать, чтобы последнее сообщение было за вами, я перестану вам отвечать, можете накидывать
спасибо, еще загляну
Пока свои мысли не научитесь формулировать, то лучше не надо.
подскажу секрет: Serial.available() возвращает цифру.