motoalex Опубликовано 26 декабря, 2017 Поделиться Опубликовано 26 декабря, 2017 Здравствуйте, написал код для приема данных по UART. Записываю данные в буфер и сравниваю его с массивом. Если все данные совпадают увеличиваю значение j до 13. И вывожу данные j ком порт. Пожалуйста помогите исправить код, а то в UART хлам сыпется. unsigned char Buff[250]; unsigned char BuffIndex; unsigned char src[]= {'+','7','9','1','7','6','3','0','0','0','0','0','0'}; char * pch; int f2=0,i,j=0; void setup() { Serial.begin(9600); memset(Buff, '\0', 250); // Initialize the string BuffIndex=0; } void loop() { while(1) { //BuffIndex=0; // put your main code here, to run repeatedly: if(Serial.available()>0) { Buff[BuffIndex] = Serial.read(); BuffIndex++; if(BuffIndex>250) { BuffIndex=0; } for(i=0;i<=13;i++) { if(Buff[i]==src[i]) { j++; f2=10; } } if(j>13 && f2==10) { Serial.print(j); j=0; f2=0; } } } } 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
ARV Опубликовано 26 декабря, 2017 Поделиться Опубликовано 26 декабря, 2017 А что за хлам сыплется? Интересно, что вы ожидаете там увидеть? 0 Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют... Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
motoalex Опубликовано 27 декабря, 2017 Автор Поделиться Опубликовано 27 декабря, 2017 Благодаря Вас за внимание. Смотрите, Я посылаю с терминала номер +79171234567899, на ардуино принимаю, если буфер больше 0, обрабатываю данные. Записываю их в новый буфер (Buff). Потом создаю цикл. В котором сравниваю массив src и Buff. Если данные совпадают, вывожу значение переменной int. Заметил одну ошибку. Исправлю, попробую запустить. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производстваКачественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества. Подробнее>>Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
ARV Опубликовано 27 декабря, 2017 Поделиться Опубликовано 27 декабря, 2017 6 минут назад, motoalex сказал: Благодаря Вас за внимание. А я вас не благодаря, ибо вы невнимательны: я задал два конкретных вопроса, а вместо ответов получил краткое изложение алгоритма, который и так понятен из кода и, дополнительно, был объяснен в предыдущем посте. 0 Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют... Ссылка на комментарий Поделиться на другие сайты Поделиться
Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
motoalex Опубликовано 27 декабря, 2017 Автор Поделиться Опубликовано 27 декабря, 2017 Прошу прощения, Я ожидаю увидеть значение 13. Т.е. количество совпадений. А в терминале получаю "1418181815" 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Литиевые аккумуляторы EVE Energy и решения для управления перезаряжаемыми источниками тока (материалы вебинара)Опубликованы материалы вебинара Компэл, посвященного литиевым аккумуляторам EVE Energy и решениям для управления перезаряжаемыми источниками тока.На вебинаре мы представили информацию не только по линейкам аккумуляторной продукции EVE, но и по решениям для управления ею, что поможет рассмотреть эти ХИТ в качестве дополнительной альтернативы для уже выпускающихся изделий. Также рассмотрели нюансы работы с производителем и сервисы, предоставляемые Компэл по данной продукции. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
ARV Опубликовано 27 декабря, 2017 Поделиться Опубликовано 27 декабря, 2017 Для начала проверьте, что у вас USART настроен верно: в setup перед выходом добавьте что-то типа serial.print(125) и посмотрите, что придет в терминал. Если придет 125 - начнем думать над остальным, если не придет - думайте над тем, что у вас не так настроено... 0 Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют... Ссылка на комментарий Поделиться на другие сайты Поделиться
Литиевые батарейки и аккумуляторы от мирового лидера EVE в КомпэлКомпания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
motoalex Опубликовано 28 декабря, 2017 Автор Поделиться Опубликовано 28 декабря, 2017 Через serial print данные выводятся, без проблем. Пробовал объявить переменную int j; j=125; serial.print(125) . Выводит в терминале значение переменной. Т. е. 125 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
snn_krs Опубликовано 28 декабря, 2017 Поделиться Опубликовано 28 декабря, 2017 Не надо проверять весь буфер после приема одного символа. void loop() { // +791763000000 if( Serial.available() > 0 ) { hh = Serial.read(); Buff[BuffIndex] = hh; BuffIndex++; Serial.print("BuffIndex = "); Serial.print(BuffIndex); Serial.print( "; Symbol = "); Serial.println(hh); if( BuffIndex > 250 ) { BuffIndex = 0; } } if ( BuffIndex > 12 ) { for(i=0;i<=13;i++) { if(Buff[i]==src[i]) { j++; f2=10; } } if((j>=13) && (f2==10)) { Serial.println(j); j=0; f2=0; } BuffIndex = 0; } } Для наглядности вставил вывод каждого принятого символа. Можно проверку на совпадения делать при приеме каждого символа. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
hasl Опубликовано 28 декабря, 2017 Поделиться Опубликовано 28 декабря, 2017 (изменено) В 26.12.2017 в 17:46, motoalex сказал: if(Serial.available()>0) { Buff[BuffIndex] = Serial.read(); 1. здесь проверяете кол-во принятых байт, но в буфер записываете только один. На момент проверки данного условия может прийти ни один байт. В связи с этим в буфер вы должны положить кол-во принятых байт 2. Сравнивайте строки по приходу всех символов или по указателю в буфере. Как привели выше пример В 26.12.2017 в 17:46, motoalex сказал: if(Buff==src) буфер на 250 символов а здесь проверяете всегда сначала. В общем, в коде "полная какафония" исправляйте и думайте Изменено 28 декабря, 2017 пользователем hasl 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
motoalex Опубликовано 30 декабря, 2017 Автор Поделиться Опубликовано 30 декабря, 2017 (изменено) Благодарю Вас ребята за помощь. Я не совсем понимал момент копирования из буфера данных UART и помещение его в массив. Т.к. пытался изменить код на другой в итоге значение j увеличивалось на 4, но никак не на 13. Также думал, что пока if(Serial.available()>0), он будет записывать в буфер данные, и когда прием будет закончен, тогда и выйдет из цикла. Спасибо ребята Вам!!! С Новым Годом, здоровья, счастья и всех благ в 2018 году. С праздником)))) Изменено 30 декабря, 2017 пользователем motoalex 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.