Russian Qt Forum
Апрель 19, 2024, 19:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Принятие пакета с Com порта  (Прочитано 12267 раз)
Ostapich
Гость
« Ответ #15 : Октябрь 30, 2017, 21:13 »

Забыл обнулить i в  последнем условии:
Код:
if(in_data.size()>=sizeof(packet_big)){
                           tmp=in_data.mid(i,sizeof(packet_big)-1);
                           in_data.remove(0,i+(sizeof(packet_big)-1));
                                                       qDebug()<<"5 "<<in_data.size()<<" i "<<i << "    " << tmp;
                           i=0;
                           emit Send_Data(tmp);

Но все равно не помогает)
Записан
titan83
Гость
« Ответ #16 : Октябрь 30, 2017, 21:14 »

У меня пошла кровь из глаз... Как я могу это развидеть???
А если серьезно, то телепатов тут нет.
Не делай такую каку, не надо
Код:
for(size_t i=0;i<in_data.size();i++){
                qDebug()<<"2";
                if(in_data[i]==254){
                    qDebug()<<"3";
                     qDebug()<<"  "<<in_data[i];
                    if(in_data[i+1]==232){
Есть вариант:
Код:
if (in_data.indexOf(QByteArray::fromHex("FEE8")) > -1) {
  bla-bla
}
Ну и выложи сюда дебаг вывод подробный, что там в in_data оказывается хотя бы на шаге "1", домысливать за тебя не хочу, честно.

ЗЫ Хорош копипастить с ардуино: не надо size_t, лучше (unsigned) int.
Записан
Ostapich
Гость
« Ответ #17 : Октябрь 30, 2017, 21:21 »

Переведите пожалуйста: in_data.indexOf(QByteArray::fromHex("FEE8") ... Прошу прощения, как могу, стараюсь исправиться ))
Записан
titan83
Гость
« Ответ #18 : Октябрь 30, 2017, 21:33 »

Переведите пожалуйста: in_data.indexOf(QByteArray::fromHex("FEE8") ... Прошу прощения, как могу, стараюсь исправиться ))
Чувак, твой код - это сплошная боль. Но я так же говнокодил лет 7 назад.
Ты сделай все заново, но:
1. Без копипасты с ардуины.
2. Без потоков, тебе это тут не надо. инфа 146%.
3. Почитай справку, и ты поймешь, что in_data.indexOf(QByteArray::fromHex("FEE8") спасет тебя от трех уровней вложенности как минимум.
4. Делай все по шагам: сначала просто читай все пакет. Убедись, что приходит то, что отправлено. Потом уже начинай менять пакет.
5. Срочно убирай всю эту арифметику указателей. Кодируй, используя ссылки, а не указатели, будет намного надежнее. Сейчас у тебя сделано очень плохо: месиво из структур, классов, у которых ты что-то меняешь, используя указатели.

Ну и я так и не увидел отладочного вывода, который бы показывал, что пакет с ардуино пришел.
Записан
titan83
Гость
« Ответ #19 : Октябрь 30, 2017, 21:37 »

Цитировать
но когда пытаюсь вывести через дебаг массив, белеберду выводит :  "\xFE\xE8\x00\x00\x00\x00\x00\x00"

Цитировать
packet_big packet_one={254, 232, 0, 0, 0, 0, 0, 0, 0};
Записан
Ostapich
Гость
« Ответ #20 : Октябрь 30, 2017, 22:10 »

Да  я уже понял, что все ок. Прошу прощения за причиненную боль, но пока как могу, буду исправляться, спасибо за совет)
Записан
titan83
Гость
« Ответ #21 : Октябрь 30, 2017, 22:12 »

То, что критику воспринимаешь адекватно - это тебе большой плюс. Думаю, дальше сам вывезешь.
Записан
Ostapich
Гость
« Ответ #22 : Октябрь 30, 2017, 23:31 »

Все разобрался, принимает то что надо! Спасибо за помощь. Все ошибки буду исправлять чуть позже, когда работать все будет, это пока в приоритете , когда в нормальный вид приведу, выложу тут, но советы учту.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #23 : Октябрь 31, 2017, 12:37 »

> вид приведу, выложу тут

не, не надо, оставь у себя
Записан

ArchLinux x86_64 / Win10 64 bit
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 22.