Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
alexnf
0 / 0 / 0
Регистрация: 25.11.2015
Сообщений: 6
#1

Потеря данных полученных в Android от Arduino по Bluetooth (appinvertor) - Android

25.11.2015, 08:40. Просмотров 549. Ответов 8
Метки нет (Все метки)

Отправляю сигналы с ардуино, с разных датчиков, в виде "имя датчика + уровень"

Пробовал вот так:
C++
1
2
Serial1.print("pp"); //pp, pl, pc, ppc, plc - имена датчиков
Serial1.println(pplevel); //pplevel-уровень сигнала датчика от 1 до 5
При соединении терминалом получаю последовательность данных
pp1
pp2 и тд

Менял буквы на цифры:
C++
1
2
3
Serial1.print(0); //00, 01, 02 - имена датчиков
Serial1.print(0); 
Serial1.println(pplevel); //pplevel-уровень сигнала датчика от 1 до 5
При соединении терминалом получаю последовательность данных
001
002 и тд

Но при получении данных в приложение, происходит их частичная потеря:
pp
p1
01
02 и тп, в общем некоторых символов не хватает, обычно первых

Вот программа:
Потеря данных полученных в Android от Arduino по Bluetooth (appinvertor)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2015, 08:40     Потеря данных полученных в Android от Arduino по Bluetooth (appinvertor)
Посмотрите здесь:

Android Передача данных через bluetooth
Передача данных по Bluetooth Android
Bluetooth + Android Android
Android Android: включение Bluetooth без подтверждения
Android + PC + bluetooth Android
Специфика работы с bluetooth в android Android
Android Хранение полученных данных
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Armagedo
25.11.2015, 15:25
  #2

Не по теме:

А чё за среда такая с паззлами? Просто интересно...

alexnf
0 / 0 / 0
Регистрация: 25.11.2015
Сообщений: 6
26.11.2015, 15:13  [ТС]     Потеря данных полученных в Android от Arduino по Bluetooth (appinvertor) #3
Вот среда:
http://ai2.appinventor.mit.edu/
А по теме мыслей нет?
Уже че только не пробовал, теряет первый символ, и очень часто...

Добавлено через 6 часов 50 минут
Вместо ReceiveTextnumberOfByte - перепробовал все Call что есть - результат тот же.

Либо не верно использую. Я видимо не совсем понимаю работу данной функции, пробовал в Label сразу выводить BytesAvailableToReceive, думал что она покажет количество полученных байт, а она показываю их количество с нарастающим итогом. Те вместо 3 3 3 3, показывает 3 6 9 12 15 - и так до 1200-1500, потом отстанавливается!

Может после каждого получения нужно что-то сбрасывать?
_Night_Scream_
55 / 67 / 7
Регистрация: 08.08.2013
Сообщений: 545
26.11.2015, 19:53     Потеря данных полученных в Android от Arduino по Bluetooth (appinvertor) #4
alexnf, жесть...
Возьмите готовый код Осипова, он все это давно написал.
alexnf
0 / 0 / 0
Регистрация: 25.11.2015
Сообщений: 6
26.11.2015, 21:53  [ТС]     Потеря данных полученных в Android от Arduino по Bluetooth (appinvertor) #5
Я полностью повторил код Осипова, единственное не делал автоматическое повторное подключение к блютуз.
Основное отличие: У него TimerInterval установлен на 1000, я оставлял "0" - при изменении на например 100 - данные читаются стабильно (получал я данные с ардуино которая их посылала в виде указанных выше 3-х цифр раз 1сек).
Это был макет, но на практике мне нужно будет получать данныее вот такого типа:
123456789,0,0,0,0,0,0,0,0,

вот так:
C++
1
2
3
4
5
6
7
8
9
 unsigned long heady;
byte message[8];
........
Serial.print(heady, DEC);  //heady - значение из 9 символов
    for (int i = 0; i < 8; i++) {
      Serial.print(",");
      Serial.print(message[i]);
    }
    Serial.println(",");
данные будут поступать непостоянно, как мне их поделить и минимизировать ошибки?
(это данные из can шины автомобиля)

Добавлено через 16 минут
В конце каждого отдельного сообщения, передается Serial.println(","); - можно это как то опознать, как окончание принятого сообщения?
_Night_Scream_
55 / 67 / 7
Регистрация: 08.08.2013
Сообщений: 545
26.11.2015, 21:57     Потеря данных полученных в Android от Arduino по Bluetooth (appinvertor) #6
alexnf, В конце каждого отдельного сообщения, передается Serial.println(","); - можно это как то опознать, как окончание принятого сообщения?

Вот это в правильном направлении думаете, только хотел спросить про символ конца пакета.
alexnf
0 / 0 / 0
Регистрация: 25.11.2015
Сообщений: 6
26.11.2015, 22:13  [ТС]     Потеря данных полученных в Android от Arduino по Bluetooth (appinvertor) #7
Найти нужно символ /n на сколько я понимаю,
а как его правильно отловить в appinvertore ?
alexnf
0 / 0 / 0
Регистрация: 25.11.2015
Сообщений: 6
27.11.2015, 13:47  [ТС]     Потеря данных полученных в Android от Arduino по Bluetooth (appinvertor) #8
Потеря данных полученных в Android от Arduino по Bluetooth (appinvertor)
Вот как то так сделал, но смущает последняя строка расчета длины сообщения, проверить пока не могу. Да и насчет начала не уверен, наверно определение начала строки с \n заменить на 1 нужно:
Потеря данных полученных в Android от Arduino по Bluetooth (appinvertor)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2015, 22:55     Потеря данных полученных в Android от Arduino по Bluetooth (appinvertor)
Еще ссылки по теме:

Android Как сделать передачу данных по bluetooth
Получение и разбор данных по Bluetooth Android
Android Приём данных по Bluetooth
ПО для управление машиной на arduino по bluetooth Android
Вывод данных полученных через Bluetooth на экран Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
alexnf
0 / 0 / 0
Регистрация: 25.11.2015
Сообщений: 6
28.11.2015, 22:55  [ТС]     Потеря данных полученных в Android от Arduino по Bluetooth (appinvertor) #9
Вроде бы что-то получилось:
Потеря данных полученных в Android от Arduino по Bluetooth (appinvertor)
Создал из переменной буфер, в который собираю все входящие данные,
а потом от туда их разбираю деля по переходу строки (по количеству символов не мог, тк это количество может быть разным)
Те данные, которые уже вывел, затираю.
TimerInterval стоит на "0".
Потерь нет, или пока не заметил, проверял только на эмуляторе входящих данных, к источнику пока подключится не могу.
Из недостатков, данные в буфер пишу в конец, а читаю с начала, если андроид не успеет перебирать все получаемые сообщения, то они начнут накапливаться в буфере и становиться для моей программы - не актуальными, поэтому если в буфере более 150 символов (это примерно 2 сообщения), то я его обнуляю.
Буду рад, если укажите на ошибки, или может можно как то упростить?
Yandex
Объявления
28.11.2015, 22:55     Потеря данных полученных в Android от Arduino по Bluetooth (appinvertor)
Ответ Создать тему
Опции темы

Текущее время: 21:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru