質問編集履歴

16

解決案の検討

2016/11/21 18:55

投稿

kt.tk.co
kt.tk.co

スコア27

test CHANGED
File without changes
test CHANGED
@@ -517,3 +517,229 @@
517
517
 
518
518
 
519
519
  ---
520
+
521
+
522
+
523
+ カンマ区切りでの通信
524
+
525
+ ---
526
+
527
+
528
+
529
+ どうしても場当たり的な例外の処理が多く、無駄にコンピューターリソースを使っています。
530
+
531
+ このような処理の要らないシリアル通信での送受信方法を知ることが最優先事項です。
532
+
533
+
534
+
535
+ ```Java
536
+
537
+
538
+
539
+ //前回以降の残りのデータを入れる文字列型の変数
540
+
541
+ String leftover = "";
542
+
543
+
544
+
545
+
546
+
547
+ //カンマ区切りを分離して、表示する関数
548
+
549
+ public void DataSplit(String msgStr){
550
+
551
+
552
+
553
+ boolean StartFlag = false;
554
+
555
+ boolean EndFlag = false;
556
+
557
+
558
+
559
+ //配列の添字用にセンサ番号をカウントする
560
+
561
+ int counter = 0;
562
+
563
+
564
+
565
+ //前回以降の残りのデータと、今回のデータを繋げる
566
+
567
+ msgStr = leftover + msgStr;
568
+
569
+
570
+
571
+ //シリアル通信から送られてくるデータを分割する
572
+
573
+ String[] SplitData = msgStr.split(",", 0);
574
+
575
+
576
+
577
+
578
+
579
+ //取得したデータの数だけ繰り返す
580
+
581
+ for (int i=0; i<SplitData.length; i++){
582
+
583
+
584
+
585
+ //終了フラグが立っていなければ
586
+
587
+ if (!EndFlag){
588
+
589
+
590
+
591
+ //前回までにスタートがあれば
592
+
593
+ if (StartFlag){
594
+
595
+
596
+
597
+ //スタート以降にエンドがあるなら
598
+
599
+ if (SplitData[i].equals("E")){
600
+
601
+
602
+
603
+ EndFlag = true;
604
+
605
+
606
+
607
+ //Eがあれば一度空にして、残ったものだけを引き次ぐ
608
+
609
+ leftover = "";
610
+
611
+
612
+
613
+ }else{
614
+
615
+
616
+
617
+ // 「null以外」 かつ 「空欄ではない」 なら (,区切りが先頭または最後に来ていると、残りデータとの結合時に,,となってしまう可能性があるため)
618
+
619
+ if(SplitData[i].trim() != null && !SplitData[i].trim().equals("")){
620
+
621
+ //センサーデータの配列に入れる
622
+
623
+ SensorData[counter] = SplitData[i]; //スタートの次からデータ配列に入れ始める
624
+
625
+ counter++;//カウンターを増やす
626
+
627
+ }
628
+
629
+
630
+
631
+ }
632
+
633
+
634
+
635
+ //今がスタートであれば
636
+
637
+ }else if (SplitData[i].equals("S")){
638
+
639
+
640
+
641
+ StartFlag = true;
642
+
643
+
644
+
645
+ }
646
+
647
+
648
+
649
+ }else{
650
+
651
+
652
+
653
+ //カンマ区切りの最後の数値 かつ 文字の一番最後にカンマがない
654
+
655
+ if (i == SplitData.length - 1 && msgStr.charAt(msgStr.length()-1) !=',' ){
656
+
657
+
658
+
659
+ //最後なら、一番最後に,を入れない!
660
+
661
+
662
+
663
+ //終了フラグが立っていれば、一つずつ残りデータに入れていく
664
+
665
+ leftover = leftover + "," +SplitData[i]; //前後にカンマを入れる。カンマは連続しても問題ない(カンマ区切りで抽出したものが空白になるため除外できる)が、カンマ無しで数値が繋がると問題なため。
666
+
667
+
668
+
669
+ }else{
670
+
671
+
672
+
673
+ //終了フラグが立っていれば、一つずつ残りデータに入れていく
674
+
675
+ leftover = leftover + "," +SplitData[i] + ","; //前後にカンマを入れる。カンマは連続しても問題ない(カンマ区切りで抽出したものが空白になるため除外できる)が、カンマ無しで数値が繋がると問題なため。
676
+
677
+
678
+
679
+ }
680
+
681
+
682
+
683
+ }
684
+
685
+
686
+
687
+ }
688
+
689
+
690
+
691
+
692
+
693
+ //エンドがあれば、センサのデータ配列に入れ、あまりを繰り越す
694
+
695
+ if (EndFlag){
696
+
697
+
698
+
699
+ //出力文字を定義
700
+
701
+ String OutputString = "";
702
+
703
+
704
+
705
+ //出力用にセンサーの文字を結合する
706
+
707
+ for (int i=0; i<12; i++){
708
+
709
+ OutputString = OutputString +"センサ " + String.valueOf(i) + " = " + SensorData[i] + "\n";
710
+
711
+ }
712
+
713
+
714
+
715
+ //画面に出力する
716
+
717
+ Message valueMsg = new Message();
718
+
719
+ valueMsg.what = VIEW_INPUT; //メッセージがシリアル通信のINPUTである とする
720
+
721
+ valueMsg.obj = OutputString; //Arduinoから取得したメッセージを代入
722
+
723
+ mHandler.sendMessage(valueMsg); //テキスト書き換え関数を実行する
724
+
725
+
726
+
727
+
728
+
729
+ }else{//エンドがなければ、何もせずにシリアル通信のデータを繰り越す
730
+
731
+
732
+
733
+ //Eがない場合はそのまま引き継ぐため代入。
734
+
735
+ leftover = msgStr;
736
+
737
+
738
+
739
+ }
740
+
741
+
742
+
743
+ }
744
+
745
+ ```

15

編集22

2016/11/21 18:55

投稿

kt.tk.co
kt.tk.co

スコア27

test CHANGED
File without changes
test CHANGED
@@ -32,7 +32,11 @@
32
32
 
33
33
  ●問題
34
34
 
35
- ただし、調べたところシリアル通信は「データを1ビットずつ連続的に送受信する通信方式」のようで、Androidでデータを受け取るとセンサの値の中途半端なタイミングで受け取ってしまいます。
35
+ ただし、調べたところシリアル通信は「データを1ビットずつ連続的に送受信する通信方式」のようです。
36
+
37
+ そのためAndroidでデータを受け取り画面に表示すると、センサの値の途中で途切れた中途半端な状態で表示されてしまいます。
38
+
39
+ (Arduinoから1ビットずつ値を送っているため、Arduinoが送られてきたシリアル通信を読み込むタイミングによってセンサの値の途中で表示してしまっているものと考えています)
36
40
 
37
41
 
38
42
 
@@ -40,7 +44,13 @@
40
44
 
41
45
  ・例 センサ12個の場合
42
46
 
47
+ 1. Arduinoから12個の値をシリアル通信で送り続ける。
48
+
49
+ (送る値を、「ランダム,0,0,0,0,0,0,0,0,0,0,0¥n」にした場合)
50
+
43
- 1. Arduinoから12個の値をシリアル通信で送り続ける(送る値を、一番「500±ランダム,0,0,0,~,0,0¥n」にした場合) ←(一番最初をランダムな値、それ以外は0の","区切りで計12個、最後に¥n)
51
+ (一番最初をランダムな値、それ以外は0で、すべてカンマ区切り最後に¥n)
52
+
53
+
44
54
 
45
55
  2. Androidに表示される値は次のようになります。
46
56
 
@@ -54,17 +64,15 @@
54
64
 
55
65
 
56
66
 
57
-
58
-
59
- このように、取得のタイミングがずれてしまうため、”,”区切りで分離しようとしても処理が上手く行えていない状態です。
60
-
61
- (上の写真の順番は時系列に添っていませんが、更新される度に前の画面の続きからデータが表示されるので、データの欠損などはなさそうです。)
67
+ (上の写真の順番は時系列に添っていませんが、更新される度に前のの続きから表示されるので、データの欠損などはなさそうです。)
68
+
62
-
69
+ 対処療法としてAndroid側にてカンマ区切りで分離しようと考えていますが、処理が複雑になってしまいうまく実装できていない状態です。(カンマ区切りに分割した後、必要な箇所は変数に代入して、¥nより後の値は次のデータ取得時に持ち越す。 といった処理がうまくできていないです。)
63
-
64
-
70
+
71
+
72
+
65
- そもそも、USBホストケーブルで行っていたとき(下にまとめました)には、センサごとにArduinoからデータを送ってもらい、Androidでセンサごとの変数へ代入できていました。
73
+ そもそも、USBホストケーブルで行っていたとき(下にまとめました)には、センサごとにArduinoからデータを送ってもらい、Androidでセンサごとの変数へ代入できていました。(シリアル通信ではない?)
66
-
74
+
67
- そういった処理を最初からできると思い調べていますが、なかなか良い方法が分からずに困っています。
75
+ そういった処理を最初からできたら根本から解決でき考え調べていますが、なかなか良い方法が分からずに困っています。
68
76
 
69
77
 
70
78
 
@@ -72,7 +80,7 @@
72
80
 
73
81
  ●質問内容
74
82
 
75
- **Bluetoothのシリアル通信時に、複数センサの値を送る適切な方法をお教えいただけますと幸いです。**
83
+ **Bluetoothの通信時に、Arduinoで読み取ったセンサの値(アナログ値の0~1024)複数個まとめて、Androidに送る適切な方法をお教えいただけますと幸いです。**
76
84
 
77
85
 
78
86
 
@@ -100,6 +108,8 @@
100
108
 
101
109
 
102
110
 
111
+ 現在試行錯誤の真っ最中です。
112
+
103
113
 
104
114
 
105
115
 

14

変更2

2016/11/21 13:40

投稿

kt.tk.co
kt.tk.co

スコア27

test CHANGED
File without changes
test CHANGED
@@ -504,6 +504,6 @@
504
504
 
505
505
 
506
506
 
507
+
508
+
507
509
  ---
508
-
509
- ---

13

変更

2016/11/21 13:28

投稿

kt.tk.co
kt.tk.co

スコア27

test CHANGED
File without changes
test CHANGED
@@ -112,7 +112,7 @@
112
112
 
113
113
 
114
114
 
115
- ■Bluetooth接続時のコード(簡略化のため、センサを2つてまとめものを載せました。)
115
+ ■Bluetooth接続時のコード(簡略化のため、センサを2つだけに減らしたコードを載せました。)
116
116
 
117
117
 
118
118
 

12

画像の訂正

2016/11/21 13:26

投稿

kt.tk.co
kt.tk.co

スコア27

test CHANGED
File without changes
test CHANGED
@@ -92,6 +92,14 @@
92
92
 
93
93
 
94
94
 
95
+ [このサイトより](http://d.hatena.ne.jp/kougaku-navi/20140501/p1)
96
+
97
+ 「1回のSerial.write()で送れるデータは1バイト、すなわち数値として表現できる範囲は0~255です。」
98
+
99
+ とあることから、センサごとに値を送るのは難しいのかもしれません。
100
+
101
+
102
+
95
103
 
96
104
 
97
105
 
@@ -499,11 +507,3 @@
499
507
  ---
500
508
 
501
509
  ---
502
-
503
-
504
-
505
- 現在、
506
-
507
- Serial.write(buf, len)
508
-
509
- で実行できないか試しております。

11

2016/11/21 13:22

投稿

kt.tk.co
kt.tk.co

スコア27

test CHANGED
File without changes
test CHANGED
@@ -493,3 +493,17 @@
493
493
 
494
494
 
495
495
  ```
496
+
497
+
498
+
499
+ ---
500
+
501
+ ---
502
+
503
+
504
+
505
+ 現在、
506
+
507
+ Serial.write(buf, len)
508
+
509
+ で実行できないか試しております。

10

タイトルの変更

2016/11/21 02:59

投稿

kt.tk.co
kt.tk.co

スコア27

test CHANGED
@@ -1 +1 @@
1
- AndroidとArduino間 Bluetooth接続時のシリアル通信 複数のセンサーのデータを送るには?
1
+ シリアル通信で複数のセンサの値を送るには? Arduino→Android Bluetooth接続時
test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  ●目的
8
8
 
9
- ArduinoからAndroidにBluetooth接続で複数センサの値を送りたいと考えております。
9
+ ArduinoからAndroidにBluetooth接続で複数センサの値を送りたいと考えております。
10
10
 
11
11
 
12
12
 
@@ -26,19 +26,19 @@
26
26
 
27
27
 
28
28
 
29
- そこで次に、Arduinoから**複数のセンサの値**をシリアル通信で送り、Androidで受信してセンサごとの変数へ代入を行いたいです。
29
+ そこで次に、Arduinoから**複数のセンサの値**をシリアル通信で送り、Androidで受信してセンサごとの変数へ代入を行いたいです。
30
30
 
31
31
 
32
32
 
33
33
  ●問題
34
34
 
35
- ただし、調べたところシリアル通信は「データを1ビットずつ連続的に送受信する通信方式」のようで、Androidでデータを受け取るとセンサの値の中途半端なタイミングで受け取ってしまいます。
35
+ ただし、調べたところシリアル通信は「データを1ビットずつ連続的に送受信する通信方式」のようで、Androidでデータを受け取るとセンサの値の中途半端なタイミングで受け取ってしまいます。
36
-
37
-
38
-
39
-
40
-
36
+
37
+
38
+
39
+
40
+
41
- ・例 センサ12個の場合
41
+ ・例 センサ12個の場合
42
42
 
43
43
  1. Arduinoから12個の値をシリアル通信で送り続ける(送る値を、一番「500±ランダム,0,0,0,~,0,0¥n」にした場合) ←(一番最初をランダムな値、それ以外は0の","区切りで計12個、最後に¥n)
44
44
 
@@ -62,7 +62,7 @@
62
62
 
63
63
 
64
64
 
65
- そもそも、USBホストケーブルで行っていたとき(下にまとめました)には、センサごとにArduinoからデータを送ってもらい、Androidでセンサごとの変数へ代入できていました。
65
+ そもそも、USBホストケーブルで行っていたとき(下にまとめました)には、センサごとにArduinoからデータを送ってもらい、Androidでセンサごとの変数へ代入できていました。
66
66
 
67
67
  そういった処理を最初からできると思い調べていますが、なかなか良い方法が分からずに困っています。
68
68
 

9

解説の追加

2016/11/21 02:48

投稿

kt.tk.co
kt.tk.co

スコア27

test CHANGED
File without changes
test CHANGED
@@ -310,7 +310,9 @@
310
310
 
311
311
  --
312
312
 
313
- Bluetoothで無線化をする前は、USBホストケーブルでセンサの値を送っていました。
313
+ Bluetoothで無線化をする前は、USBホストケーブルでセンサの値を送っていました。
314
+
315
+ 処理は問題なく、Androidでセンサごとにデータを受け取ることができておりました。
314
316
 
315
317
 
316
318
 

8

段落

2016/11/21 02:47

投稿

kt.tk.co
kt.tk.co

スコア27

test CHANGED
File without changes
test CHANGED
@@ -104,7 +104,7 @@
104
104
 
105
105
 
106
106
 
107
- コード(簡略化のため、センサを2つとしてまとめたものを載せました。)
107
+ ■Bluetooth接続時のコード(簡略化のため、センサを2つとしてまとめたものを載せました。)
108
108
 
109
109
 
110
110
 
@@ -324,9 +324,7 @@
324
324
 
325
325
 
326
326
 
327
- 以下にコードを記載します。
327
+ ■USBホストケーブル接続時のコード
328
-
329
-
330
328
 
331
329
 
332
330
 

7

誤字

2016/11/21 02:46

投稿

kt.tk.co
kt.tk.co

スコア27

test CHANGED
File without changes
test CHANGED
@@ -86,7 +86,7 @@
86
86
 
87
87
  ```
88
88
 
89
- しかし、Arduinoの上のコマンドUSBホストケーブルでの接続時でしか実行できないようでした。
89
+ しかし、Arduinoのacc.writeコマンドUSBホストケーブルでの接続時でしか実行できないようでした。
90
90
 
91
91
  そのため、シリアル通信で同様の送信方法がないかと探しております。
92
92
 

6

疑問点の更新

2016/11/21 02:44

投稿

kt.tk.co
kt.tk.co

スコア27

test CHANGED
File without changes
test CHANGED
@@ -76,6 +76,24 @@
76
76
 
77
77
 
78
78
 
79
+ ●考え
80
+
81
+ Bluetooth時にも、USBホストケーブルと同様の「Arduinoからの送信処理」を行えば実現できそうと考えていました。
82
+
83
+ ```Arduino
84
+
85
+ acc.write(&pack, sizeof(Pack));
86
+
87
+ ```
88
+
89
+ しかし、Arduinoの上のコマンドUSBホストケーブルでの接続時でしか実行できないようでした。
90
+
91
+ そのため、シリアル通信で同様の送信方法がないかと探しております。
92
+
93
+
94
+
95
+
96
+
79
97
 
80
98
 
81
99
  回路
@@ -300,186 +318,178 @@
300
318
 
301
319
 
302
320
 
321
+
322
+
323
+
324
+
325
+
326
+
303
- その際は次のコードで上手く動作ていたのでが、
327
+ 以下にコードを記載
304
-
305
- Arduinoの次のコマンドは実行できず、USBホストケーブル接続時にしか使用できないようでした。
328
+
306
-
329
+
330
+
331
+
332
+
307
- ```Arduino
333
+ Arduinoの送信部分
334
+
308
-
335
+ ```C
336
+
337
+ //AndroidのUSBアクセサリ接続
338
+
339
+ #include <Max3421e.h>
340
+
341
+ #include <Usb.h>
342
+
343
+ #include <AndroidAccessory.h>
344
+
345
+
346
+
347
+
348
+
349
+ // AndroidAccessoryオブジェクト作成
350
+
351
+ AndroidAccessory acc("MyManufacturer", // 製造者名
352
+
353
+ "MyModel", // モデル名
354
+
355
+ "テスト", // 説明文
356
+
357
+ "1.0", // バージョン名
358
+
359
+ "http://android.com", // URL
360
+
361
+ "0000000012345678"); // シリアル番号
362
+
363
+
364
+
365
+
366
+
367
+ // Andloidにデータを送るためのパッケージを定義
368
+
369
+ struct Pack {
370
+
371
+ long sensor1; /* 4バイト */
372
+
373
+ long sensor2; /* 4バイト */
374
+
375
+ };
376
+
377
+
378
+
379
+ struct Pack pack;
380
+
381
+
382
+
383
+ ////////////
384
+
385
+ //初期設定//
386
+
387
+ ////////////
388
+
389
+ void setup()
390
+
391
+ {
392
+
393
+ Serial.begin(9600);
394
+
395
+
396
+
397
+ acc.powerOn(); //USB Host機能を有効にする。(Androidの通信用)
398
+
399
+ }
400
+
401
+
402
+
403
+ void loop(){
404
+
405
+
406
+
407
+ //装置(Android)に接続していたら
408
+
409
+ if (acc.isConnected()) {
410
+
411
+
412
+
413
+ //メッセージ生成 (packの中に送りたいメッセージを詰め込む)
414
+
415
+ pack.sensor1 = analogRead(0);
416
+
417
+ pack.sensor2 = analogRead(1);
418
+
419
+
420
+
421
+ //データをAndroidに送る
422
+
309
- acc.write(&pack, sizeof(Pack));
423
+ acc.write(&pack, sizeof(Pack));
424
+
425
+ }
426
+
427
+ }
428
+
429
+
310
430
 
311
431
  ```
312
432
 
313
433
 
314
434
 
315
-
316
-
317
- 以下にコードを記載します。
318
-
319
-
320
-
321
-
322
-
323
- Arduinoの送信部分
324
-
325
- ```C
326
-
327
- //AndroidUSBアクセサリ接続
328
-
329
- #include <Max3421e.h>
330
-
331
- #include <Usb.h>
332
-
333
- #include <AndroidAccessory.h>
334
-
335
-
336
-
337
-
338
-
339
- // AndroidAccessoryオブジェクト作成
340
-
341
- AndroidAccessory acc("MyManufacturer", // 製造者名
342
-
343
- "MyModel", // モデル名
344
-
345
- "テスト", // 説明文
346
-
347
- "1.0", // バージョン名
348
-
349
- "http://android.com", // URL
350
-
351
- "0000000012345678"); // シリアル番号
352
-
353
-
354
-
355
-
356
-
357
- // Andloidにデータを送るためのパッケージを定義
358
-
359
- struct Pack {
360
-
361
- long sensor1; /* 4バイト */
362
-
363
- long sensor2; /* 4バイト */
364
-
365
- };
366
-
367
-
368
-
369
- struct Pack pack;
370
-
371
-
372
-
373
- ////////////
374
-
375
- //初期設定//
376
-
377
- ////////////
378
-
379
- void setup()
380
-
381
- {
382
-
383
- Serial.begin(9600);
384
-
385
-
386
-
387
- acc.powerOn(); //USB Host機能を有効にする。(Androidの通信用)
388
-
389
- }
390
-
391
-
392
-
393
- void loop(){
394
-
395
-
396
-
397
- //装置(Android)に接続していたら
398
-
399
- if (acc.isConnected()) {
400
-
401
-
402
-
403
- //メッセージ生成 (packの中に送りたいメッセージを詰め込む)
404
-
405
- pack.sensor1 = analogRead(0);
406
-
407
- pack.sensor2 = analogRead(1);
408
-
409
-
410
-
411
- //データをAndroidに送る
412
-
413
- acc.write(&pack, sizeof(Pack));
414
-
415
- }
416
-
417
- }
435
+ Andrroidの受信部分
436
+
437
+ ```Java
438
+
439
+ //センサの値を入れる変数
440
+
441
+ int SensorVal[] = new int[2];
442
+
443
+
444
+
445
+ //受信データを入れる変数
446
+
447
+ byte [] buffer = new byte[100000];//受信した全てデータ
448
+
449
+
450
+
451
+ //初めは必ず読み取りに行く
452
+
453
+ int ret = 0; //受信データの長さ「ret」を定義する
454
+
455
+
456
+
457
+ // Arduinoから受信
458
+
459
+ try {
460
+
461
+ //入力ストリームの読み込み
462
+
463
+ ret = mInputStream.read(buffer);
464
+
465
+ } catch (IOException e) {
466
+
467
+ e.printStackTrace();
468
+
469
+ }
470
+
471
+
472
+
473
+ //取得したデータを、センサごとに分ける。
474
+
475
+ byte[] arr = new byte[ret];
476
+
477
+ System.arraycopy(buffer,0,arr,0,ret);
478
+
479
+
480
+
481
+ ByteBuffer byteBuffer = ByteBuffer.wrap(arr);
482
+
483
+ byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
484
+
485
+
486
+
487
+ //得られた値を変数に入れる
488
+
489
+ SensorVal[0] = byteBuffer.getInt(); // 4バイト
490
+
491
+ SensorVal[1] = byteBuffer.getInt(); // 4バイト
418
492
 
419
493
 
420
494
 
421
495
  ```
422
-
423
-
424
-
425
- Andrroidの受信部分
426
-
427
- ```Java
428
-
429
- //センサの値を入れる変数
430
-
431
- int SensorVal[] = new int[2];
432
-
433
-
434
-
435
- //受信データを入れる変数
436
-
437
- byte [] buffer = new byte[100000];//受信した全てのデータ
438
-
439
-
440
-
441
- //初めは必ず読み取りに行く
442
-
443
- int ret = 0; //受信データの長さ「ret」を定義する
444
-
445
-
446
-
447
- // Arduinoから受信
448
-
449
- try {
450
-
451
- //入力ストリームの読み込み
452
-
453
- ret = mInputStream.read(buffer);
454
-
455
- } catch (IOException e) {
456
-
457
- e.printStackTrace();
458
-
459
- }
460
-
461
-
462
-
463
- //取得したデータを、センサごとに分ける。
464
-
465
- byte[] arr = new byte[ret];
466
-
467
- System.arraycopy(buffer,0,arr,0,ret);
468
-
469
-
470
-
471
- ByteBuffer byteBuffer = ByteBuffer.wrap(arr);
472
-
473
- byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
474
-
475
-
476
-
477
- //得られた値を変数に入れる
478
-
479
- SensorVal[0] = byteBuffer.getInt(); // 4バイト
480
-
481
- SensorVal[1] = byteBuffer.getInt(); // 4バイト
482
-
483
-
484
-
485
- ```

5

段落の変更

2016/11/21 02:44

投稿

kt.tk.co
kt.tk.co

スコア27

test CHANGED
File without changes
test CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
 
22
22
 
23
- 問題・質問内容
23
+ 手段
24
24
 
25
25
  ArduinoとAndroidのBluetooth接続は[参考サイト](https://sites.google.com/a/gclue.jp/fab-zang-docs/sumafo-lian-xie/02-arduino-android)を見て、全く同じコードで問題なく動作させることができました。
26
26
 
@@ -28,6 +28,10 @@
28
28
 
29
29
  そこで次に、Arduinoから**複数のセンサーの値**をシリアル通信で送り、Androidで受信してセンサごとの変数へ代入を行いたいです。
30
30
 
31
+
32
+
33
+ ●問題
34
+
31
35
  ただし、調べたところシリアル通信は「データを1ビットずつ連続的に送受信する通信方式」のようで、Androidでデータを受け取るとセンサーの値の中途半端なタイミングで受け取ってしまいます。
32
36
 
33
37
 
@@ -64,6 +68,10 @@
64
68
 
65
69
 
66
70
 
71
+
72
+
73
+ ●質問内容
74
+
67
75
  **Bluetoothのシリアル通信時に、複数センサの値を送る適切な方法をお教えいただけますと幸いです。**
68
76
 
69
77
 

4

文章の修正m

2016/11/21 02:38

投稿

kt.tk.co
kt.tk.co

スコア27

test CHANGED
File without changes
test CHANGED
@@ -36,7 +36,7 @@
36
36
 
37
37
  ・例 センサー12個の場合
38
38
 
39
- 1. Arduinoから12個の値をシリアル通信で送り続ける(送る値を「500±ランダム,0,0,0,~,0,0¥n」にした場合)
39
+ 1. Arduinoから12個の値をシリアル通信で送り続ける(送る値を、一番「500±ランダム,0,0,0,~,0,0¥n」にした場合) ←(一番最初をランダムな値、それ以外は0の","区切りで計12個、最後に¥n)
40
40
 
41
41
  2. Androidに表示される値は次のようになります。
42
42
 

3

文章の修正

2016/11/21 02:37

投稿

kt.tk.co
kt.tk.co

スコア27

test CHANGED
File without changes
test CHANGED
@@ -26,7 +26,7 @@
26
26
 
27
27
 
28
28
 
29
- そこで次に、Arduinoから複数のセンサーの値をシリアル通信で送り、Androidで受信してセンサごとの変数へ代入を行いたいです。
29
+ そこで次に、Arduinoから**複数のセンサーの値**をシリアル通信で送り、Androidで受信してセンサごとの変数へ代入を行いたいです。
30
30
 
31
31
  ただし、調べたところシリアル通信は「データを1ビットずつ連続的に送受信する通信方式」のようで、Androidでデータを受け取るとセンサーの値の中途半端なタイミングで受け取ってしまいます。
32
32
 

2

更新 文字

2016/11/21 02:35

投稿

kt.tk.co
kt.tk.co

スコア27

test CHANGED
File without changes
test CHANGED
@@ -22,13 +22,13 @@
22
22
 
23
23
  ●問題・質問内容
24
24
 
25
- ArduinoとAndroidのBluetooth接続は[参考サイト](https://sites.google.com/a/gclue.jp/fab-zang-docs/sumafo-lian-xie/02-arduino-android)を見て問題なく同じものを動作させることができました。
25
+ ArduinoとAndroidのBluetooth接続は[参考サイト](https://sites.google.com/a/gclue.jp/fab-zang-docs/sumafo-lian-xie/02-arduino-android)を見て、全く同じコードで問題なく動作させることができました。
26
-
27
-
28
-
26
+
27
+
28
+
29
- 複数のセンサーの値をシリアル通信で送り、Androidでセンサごと変数へ入れたいです。
29
+ そこで次に、Arduinoから複数のセンサーの値をシリアル通信で送り、Androidで受信してセンサごと変数へ代入行いたいです。
30
-
30
+
31
- ただし、調べたところシリアル通信は「データを1ビットずつ連続的に送受信する通信方式」のようで、Androidでデータを受け取るとセンサーの値の中途半端なタイミングで受け取ってしまうようです。
31
+ ただし、調べたところシリアル通信は「データを1ビットずつ連続的に送受信する通信方式」のようで、Androidでデータを受け取るとセンサーの値の中途半端なタイミングで受け取ってしまいます。
32
32
 
33
33
 
34
34
 
@@ -52,11 +52,13 @@
52
52
 
53
53
 
54
54
 
55
+ このように、取得のタイミングがずれてしまうため、”,”区切りで分離しようとしても処理が上手く行えていない状態です。
56
+
55
- このように、取得のタイミングがずれてしまうため、”,”区切りで分離しようとしても処理が上手く行えていない状態です。(上の写真の順番は時系列に添っていませんが、更新される度に前の画面の続きからデータが表示されるので、データの欠損などはなさそうです。)
57
+ (上の写真の順番は時系列に添っていませんが、更新される度に前の画面の続きからデータが表示されるので、データの欠損などはなさそうです。)
56
-
57
-
58
-
58
+
59
+
60
+
59
- USBホストケーブルで行っていたとき(下にまとめました)には、センサーごとにArduinoからデータを送ってもらい、Androidでセンサーごとの変数へ代入できていました。
61
+ そもそも、USBホストケーブルで行っていたとき(下にまとめました)には、センサーごとにArduinoからデータを送ってもらい、Androidでセンサーごとの変数へ代入できていました。
60
62
 
61
63
  そういった処理を最初からできると思い調べていますが、なかなか良い方法が分からずに困っています。
62
64
 

1

更新

2016/11/21 02:34

投稿

kt.tk.co
kt.tk.co

スコア27

test CHANGED
File without changes
test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  ●目的
8
8
 
9
- ArduinoからAndroidに複数センサーの値を送りたいと考えております。
9
+ ArduinoからAndroidにBluetooth接続で複数センサーの値を送りたいと考えております。
10
10
 
11
11
 
12
12