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

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

Войти
Регистрация
Восстановить пароль
 
Senum
3 / 2 / 0
Регистрация: 02.05.2014
Сообщений: 92
#1

Вывод данных полученных через Bluetooth на экран - Программирование Android

27.11.2016, 04:01. Просмотров 733. Ответов 8
Метки нет (Все метки)

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

Использую данный прмиер:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 h = new Handler() {
            public void handleMessage(android.os.Message msg) {
                switch (msg.what) {
                    case RECIEVE_MESSAGE:                                                   
                        byte[] readBuf = (byte[]) msg.obj;
                        String strIncom = new String(readBuf, 0, msg.arg1);
                        sb.append(strIncom);                                                
                        int endOfLineIndex = sb.indexOf("\r\n");                            
                        if (endOfLineIndex > 0) {                                            
                            String sbprint = sb.substring(0, endOfLineIndex);               
                            sb.delete(0, sb.length());                                      
                            txtArduino.setText(sbprint);             
                            
                        }
                        //Log.d(TAG, "...Строка:"+ sb.toString() +  "Байт:" + msg.arg1 + "...");
                        break;
                }
            };
Но в данном случае все выводиться в 1 текстовое поле, подскажите где можно достать как разделить показатели, или нужно делать 2 Handler, и еще 1 вопрос - частоту опроса датчика нужно менять в скетче ардуино или это можно сделать в каком то цикле в handler.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2016, 04:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывод данных полученных через Bluetooth на экран (Программирование Android):

Потеря данных полученных в Android от Arduino по Bluetooth (appinvertor) - Программирование Android
Отправляю сигналы с ардуино, с разных датчиков, в виде "имя датчика + уровень" Пробовал вот так: Serial1.print("pp"); //pp, pl, pc,...

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

Хранение полученных данных - Программирование Android
В программе при запуске определённой активити запрашиваются данные с сервера (массив). Хочу сделать так чтоб если один раз данные получили...

Вывод из базы данных в ListView через SimpleCursorAdapter - Программирование Android
Доброе время суток. Пишу программу под Андроид в среде Android Studio и возникла проблема с выводом данных в listview через...

Работа с устройством через bluetooth - Программирование Android
Требуется сделать приложение на андройд чтобы оно соединялось с блютуз устройством и приняло от него данные. Идея создать блютуз передатчик...

Передача файлов через BlueTooth OPP / ContentResolver - Программирование Android
Друзья, помогите пожалуйста!!! Уже второй день пляшу с бубном. :( Передаю файл через BT OPP примерно так: ContentValues values...

8
vxg
Модератор
3184 / 1987 / 227
Регистрация: 13.01.2012
Сообщений: 7,680
27.11.2016, 19:21 #2
Senum, можно обойтись одним хандлером (выводите в одно поле? надо в два? что мешает?), частота опроса задана где-то вне вашего куска кода
0
Senum
3 / 2 / 0
Регистрация: 02.05.2014
Сообщений: 92
27.11.2016, 21:21  [ТС] #3
Датчик отправляет информацию о температуре и уровню влажности, оба показателя идут в 1 поле, нужно в 2. Просто не совсем разобрался как этого сделать. И сразу вопрос если датчиков будет больше то потребуется ли доп хандлер или есть более удобные способы обработки входящий информации?
0
vxg
Модератор
3184 / 1987 / 227
Регистрация: 13.01.2012
Сообщений: 7,680
28.11.2016, 06:24 #4
Senum, ваш код не позволяет ответить на ваши вопросы - получения данных в нем лично я не увидел
0
OlegJV
103 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 472
28.11.2016, 07:25 #5
В каком виде/формате приходят данные? Угадать мы не в силах.
0
Senum
3 / 2 / 0
Регистрация: 02.05.2014
Сообщений: 92
28.11.2016, 11:05  [ТС] #6
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void run() {
            byte[] buffer = new byte[256];  
            int bytes; 
 
            
            while (true) {
                try {
                  
                    bytes = mmInStream.read(buffer);        
                    h.obtainMessage(RECIEVE_MESSAGE, bytes, -1, buffer).sendToTarget();    
                } catch (IOException e) {
                    break;
                }
            }
        }
фрагмент скетча передающего данные с ардуино :

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  float h = dht.readHumidity(); 
  float t = dht.readTemperature();
 
  if (isnan(t) || isnan(h)) { 
    Serial.println("Failed to read from DHT"); 
  } 
  else { 
    Serial.print("Humidity: "); 
    Serial.print(h); 
    Serial.print(" %\t"); 
    Serial.print("Temperature: "); 
    Serial.print(t); 
    Serial.println(" *C"); 
  } 
}
В мониторе порта данные выводятся в таком виде : Humidity: 22.50 % Temperature: 25.70 *C
 Комментарий модератора 
Используйте теги для выделения кода
0
vxg
Модератор
3184 / 1987 / 227
Регистрация: 13.01.2012
Сообщений: 7,680
28.11.2016, 12:13 #7
Senum, ваш код ардуино формирует строку в которой прописаны нужные вам данные. вы эту строку показываете на экране. причем не факт что все данные дойдут одной посылкой, но видимо вам везет и пока все проскакивает одним куском. что бы выделить из этой строки нужные вам величины... просто возьмите и выделите их)
Java
1
2
3
4
                    String s = "Humidity: 1.23 %\tTemperature: 4.56 *C";
                    String[] subs = s.split(" ");
                    float h = Float.parseFloat(subs[1]);
                    float t = Float.parseFloat(subs[3]);
0
OlegJV
103 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 472
28.11.2016, 12:19 #8
Или в скетче добавить в строку разделители, получится типа csv, который потом split в массив и ракидать по TextView.
1
Senum
3 / 2 / 0
Регистрация: 02.05.2014
Сообщений: 92
29.11.2016, 01:36  [ТС] #9
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 h = new Handler() {
            public void handleMessage(android.os.Message msg) {
                switch (msg.what) {
                    case RECIEVE_MESSAGE:
                        // если приняли сообщение в Handler
                        byte[] readBuf = (byte[]) msg.obj;
                        String strIncom = new String(readBuf, 0, msg.arg1);
                        sb.append(strIncom);                                                // формируем строку
                        int endOfLineIndex = sb.indexOf("\r\n");                            // определяем символы конца строки
                        if (endOfLineIndex > 0) {                                            // если встречаем конец строки,
                            String sbprint = sb.substring(0, endOfLineIndex);               // то извлекаем строку
                            sb.delete(0, sb.length());// и очищаем sb
 
                            String[] sb = sbprint.split("U");
                            for (int i=0; i<sb.length; i++) {
                                String[] command = sb[i].split("=");
                                if (command[0].compareTo("h") == 0) {
                                    txtArduino.setText("Humidity :"  + sb);             // обновляем TextView
                                }
                            }
 
 
 
 
                            // обновляем TextView
 
                        }
                        //Log.d(TAG, "...Строка:"+ sb.toString() +  "Байт:" + msg.arg1 + "...");
                        break;
                }
            };
        };
видимо я плохо понял, дайте ссылку на пример или где подробно описано выделение и правильная сортировка.
заранее спс
0
29.11.2016, 01:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2016, 01:36
Привет! Вот еще темы с ответами:

Передача данных по Bluetooth - Программирование Android
Проблема в следующем, после определенного количества переданных байт(зависит от телефона, на huawei ~ 500, на nexus 4 ~ 1700) от Андроида...

Приём данных по Bluetooth - Программирование Android
Из Arduino посылается строка xx|xx|xx|xx|xx,xxxx|\n, где х-любое число. На андроиде получаю: х| x| x| x| итд. Подскажи как...

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

Установка приложения на телефон через Bluetooth в Eclipse, используя BT адаптер - Программирование Android
раньше телефон подключался по USB и приложения тестировались на нем. Теперь я купил BT адаптер и нужно проверить на нем. Можете подсказать...


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

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

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