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

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

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

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

25.11.2015, 08:40. Просмотров 664. Ответов 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 на экран - Программирование Android
Есть датчик dht22 с него приходят 2 показателя: Температура и влажность,требуется получить данные по блютус на смартфон и вывести на экран....

ПО для управление машиной на arduino по bluetooth - Программирование Android
Здравствуйте. Хочу написать ПО для управление машиной на arduino по bluetooth. Т.е. на экране круг достаточно большой, в нем по центру...

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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_
75 / 74 / 8
Регистрация: 08.08.2013
Сообщений: 587
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_
75 / 74 / 8
Регистрация: 08.08.2013
Сообщений: 587
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2015, 22:55
Привет! Вот еще темы с ответами:

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

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

Arduino потеря связи с USB - Arduino
Вопрос вот в чём - как реализовать остав устройства, если потерянна связь с USB портом? Т.е. что вшить в мозг ему, и как? - хотя бы...

Bluetooth и Arduino - Arduino
Как сделать так, чтобы при потери с соединением Bluetooth, на ардуино сработал светодиод? Помогите очень нужно. Я в программировании полный...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.11.2015, 22:55
Ответ Создать тему
Опции темы

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