Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
alexnf
0 / 0 / 0
Регистрация: 25.11.2015
Сообщений: 6
#1

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

25.11.2015, 08:40. Просмотров 854. Ответов 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)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2015, 08:40
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Потеря данных полученных в Android от Arduino по Bluetooth (appinvertor) (Программирование Android):

Вывод данных полученных через Bluetooth на экран
Есть датчик dht22 с него приходят 2 показателя: Температура и...

Передача данных Android устр. - stm по bluetooth
Здравствуйте, есть задача передавать данные с android планшета на на плату с...

ПО для управление машиной на arduino по bluetooth
Здравствуйте. Хочу написать ПО для управление машиной на arduino по bluetooth....

Arduino + android
Здравствуйте! В ардуино коде есть цикл который записывает в serial монитор...

Bluetooth + Android
Здравствуйте! Начал я относительно недавно изучать Eclipse. Мне необходимо...

Android + PC + bluetooth
Где и как можно написать такую связку приложений -> на компьютере сервер на...

8
Armagedo
25.11.2015, 15:25
  #2

Не по теме:

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

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

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

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

Может после каждого получения нужно что-то сбрасывать?
0
_Night_Scream_
77 / 75 / 9
Регистрация: 08.08.2013
Сообщений: 623
26.11.2015, 19:53 #4
alexnf, жесть...
Возьмите готовый код Осипова, он все это давно написал.
0
alexnf
0 / 0 / 0
Регистрация: 25.11.2015
Сообщений: 6
26.11.2015, 21:53  [ТС] #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(","); - можно это как то опознать, как окончание принятого сообщения?
0
_Night_Scream_
77 / 75 / 9
Регистрация: 08.08.2013
Сообщений: 623
26.11.2015, 21:57 #6
alexnf, В конце каждого отдельного сообщения, передается Serial.println(","); - можно это как то опознать, как окончание принятого сообщения?

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

Специфика работы с bluetooth в android
Доброго времени суток. Я хочу понять, как же работать с bluetooth в android....

Обмен данными android & arduino
Всем добрый день, решил создать программу управление arduino uno через android,...

Android: включение Bluetooth без подтверждения
Подскажите, как программно включить блютус так, что бы пользователю не нужно...

Передача данных по bluetooth под Android
Доброго время суток. Подскажите кто может. Хочу разобраться как на Delphi...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru