teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

9

解決しました

2019/01/30 05:49

投稿

taki3005
taki3005

スコア12

title CHANGED
File without changes
body CHANGED
@@ -5,42 +5,64 @@
5
5
  私の作成したコードではArduinoに入力する前にオシロスコープで取得している波形とは異なってしまいます。
6
6
  コンパイル時のエラー等はありません。
7
7
 
8
+ 入力波形は心電波形です。
8
9
 
9
- 入力波形は以下のような心電波形です。
10
- ![イメージ説明](82b9f7e0bbdf867b07ebeba13908bb32.png)
11
10
 
12
- 当方プログラミング初心者のため資料を参考にこのプログラムを作成しました。
13
- 詳しい方がいらっしゃいましたらお助け頂けますと幸いです。
14
- よろしくお願いいたします。
15
11
 
16
- こちらにも質問させていただいています。
17
- https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13202603858?__ysp=YXJkdWlubw%3D%3D
18
- ### 発生している問題・エラーメッセージ
19
- ![イメージ説明](7b0a64229f5ac986c683fd9ba5ef4c0b.png)
20
12
 
21
13
 
22
- ### 該当のソースコード
14
+ ### 解決したコード
15
+
23
16
  int now=0 ;
17
+ long i=0 ; //配列番号の管理
18
+ byte j=0 ; //フラグ管理
19
+ unsigned long tNow,tPrev;
20
+ word peak;
24
21
  unsigned long time ;
22
+ //int pin=10 ;
25
23
 
26
24
  void setup() {
27
25
  // put your setup code here, to run once:
28
- Serial.begin(1200);
26
+ Serial.begin(9600);
29
27
  }
30
28
 
31
29
  void loop() {
32
30
  // put your main code here, to run repeatedly:
33
- now=analogRead(A5) ;//入力波形の取得
31
+ now=analogRead(A5) ;
34
32
  time = millis() ;
35
33
 
36
- Serial.print(time/1000) ; //mSからSに
34
+ Serial.print(time/1000) ;
37
35
  Serial.print(",") ;
38
- //Serial.println(now*0.0049); //電圧に変更
39
- Serial.println(now);
36
+ Serial.println(now*0.005);
37
+ //Serial.println(now);
40
38
 
41
- //delay(10); //必要(?)
39
+ //delay(10);
40
+
41
+ if(now>peak) {//ピーク値更新なら
42
+ peak=now;//保存して
43
+ tNow=millis();//時間を取得
44
+ j=1;//取得した
42
45
  }
46
+ if(now<peak*7/10 && j==1) {//7割りに落ちた時にピーク確定。→集計
47
+ if(i){
48
+ //Serial.print("count:");
49
+ //Serial.print(i);
50
+ //Serial.print(" peak:");
51
+ //Serial.print(peak);
52
+ Serial.print(" RR:");
53
+ Serial.print(tNow-tPrev);
54
+ Serial.println("ms");
55
+ }
43
56
 
57
+ tPrev = tNow ;
58
+ peak=peak*8/10;//8割以上に上がったら再取得
59
+ i++;
60
+ j=0;
61
+ }
62
+
63
+
64
+
65
+ }
44
66
  ```ここに言語名を入力
45
67
 
46
68
 

8

2019/01/30 05:48

投稿

taki3005
taki3005

スコア12

title CHANGED
File without changes
body CHANGED
@@ -13,6 +13,8 @@
13
13
  詳しい方がいらっしゃいましたらお助け頂けますと幸いです。
14
14
  よろしくお願いいたします。
15
15
 
16
+ こちらにも質問させていただいています。
17
+ https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13202603858?__ysp=YXJkdWlubw%3D%3D
16
18
  ### 発生している問題・エラーメッセージ
17
19
  ![イメージ説明](7b0a64229f5ac986c683fd9ba5ef4c0b.png)
18
20
 

7

画像の変更

2019/01/30 00:10

投稿

taki3005
taki3005

スコア12

title CHANGED
File without changes
body CHANGED
@@ -14,7 +14,7 @@
14
14
  よろしくお願いいたします。
15
15
 
16
16
  ### 発生している問題・エラーメッセージ
17
- ![イメージ説明](b11027f931092caa4655e8c63f822f43.png)
17
+ ![イメージ説明](7b0a64229f5ac986c683fd9ba5ef4c0b.png)
18
18
 
19
19
 
20
20
  ### 該当のソースコード

6

再考後の質問

2019/01/29 09:15

投稿

taki3005
taki3005

スコア12

title CHANGED
@@ -1,1 +1,1 @@
1
- 【Arduino】シリアルモニタに正しい値が表示されないです
1
+ 【Arduino】シリアルモニタに正しい値が表示されない
body CHANGED
@@ -1,10 +1,11 @@
1
1
  ### 前提・実現したいこと
2
- 入力された生体信号(心電波形)のRR間隔の時間をシリアルモニタに表示させたいです。
2
+ 入力された生体信号(心電波形)のRR間隔の時間を出力させめに
3
+ 入力信号のデータを取得して、波形のグラフを作成したいです。
4
+
3
- 私の作成したコードではシリアルモニタの出結果は全て以下のようになってしまいます。
5
+ 私の作成したコードではArduinoに入する前オシロスコープで取得している波形とは異なってしまいます。
4
6
  コンパイル時のエラー等はありません。
5
- 現在、プログラムの確認のためファンクションジェネレータを用いて1Hz~10Hzの実行結果の変化を見たところ、
6
- 全て150前後の結果が出てしまいます。
7
7
 
8
+
8
9
  入力波形は以下のような心電波形です。
9
10
  ![イメージ説明](82b9f7e0bbdf867b07ebeba13908bb32.png)
10
11
 
@@ -17,60 +18,27 @@
17
18
 
18
19
 
19
20
  ### 該当のソースコード
21
+ int now=0 ;
22
+ unsigned long time ;
20
23
 
21
- int i=0 ; //配列番号の管理
22
- int j=0 ; //フラグ管理
23
- //プログラム起動時間の変数
24
- unsigned long ti ;
25
- unsigned long to ;
26
- unsigned long tNow,tPrev ;
27
- int threshold ; //閾値
28
- int a=0 ; //アナログ電圧の変数
29
- int x=0 ; //一つ前のアナログ値を入力
30
-
31
- void setup(){
24
+ void setup() {
32
- //put your setup code here, to run once;
25
+ // put your setup code here, to run once:
33
- Serial.begin(1200);
26
+ Serial.begin(1200);
34
27
  }
35
- void loop(){
36
- //配列の数が200なのでエラーを出さないようにする
37
- ti=millis(); //起動時間の代入
38
- a=analogRead(A5); //アナログ入力の代入
39
- //閾値を決める
40
- if(a-x>0){
41
- x=a;//波形の山が下り始めるところを見つける
42
- if(x-threshold>0){
43
- threshold=a; //R波のみ判定
44
- }
45
- }
46
- //アナログ入力が閾値を超えたときに時間を入れるに格納
47
- if(a>=0.5*threshold&&j==0){
48
- //4.9mV*20=98mVの時に分岐
49
28
 
29
+ void loop() {
30
+ // put your main code here, to run repeatedly:
50
- Serial.print("count");
31
+ now=analogRead(A5) ;//入力波形の取得
51
- Serial.println(i);
52
- tNow=millis();
32
+ time = millis() ;
53
33
 
34
+ Serial.print(time/1000) ; //mSからSに
35
+ Serial.print(",") ;
54
- //i=0の時は計算できないので分岐
36
+ //Serial.println(now*0.0049); //電圧に変更
37
+ Serial.println(now);
55
38
 
56
- if(i!=0){
57
- to=tNow-tPrev;
58
- tPrev = tNow ;
59
- //入れるに格納された秒数からRR間隔を計算
39
+ //delay(10); //必要(?)
60
- //USVBケーブルを通してPCに出力
61
- Serial.println("RR");
62
- Serial.println(to);
63
40
  }
64
- i++; //次の配列へ
65
- j=1; //一度とったのでフラグをオンに
66
- // Serial.end(); //通信終了
67
- }
68
- //フラグがオンの時に閾値を下回った時にオフにする
69
- if(a< 0.5*threshold&&j==1) {
70
- j=0;
71
- }
72
41
 
73
- }
74
42
  ```ここに言語名を入力
75
43
 
76
44
 

5

コードの修正

2019/01/29 09:14

投稿

taki3005
taki3005

スコア12

title CHANGED
File without changes
body CHANGED
@@ -44,7 +44,7 @@
44
44
  }
45
45
  }
46
46
  //アナログ入力が閾値を超えたときに時間を入れるに格納
47
- if(a>=0.99*threshold&&j==0){
47
+ if(a>=0.5*threshold&&j==0){
48
48
  //4.9mV*20=98mVの時に分岐
49
49
 
50
50
  Serial.print("count");
@@ -66,7 +66,7 @@
66
66
  // Serial.end(); //通信終了
67
67
  }
68
68
  //フラグがオンの時に閾値を下回った時にオフにする
69
- if(a< 0.99*threshold&&j==1) {
69
+ if(a< 0.5*threshold&&j==1) {
70
70
  j=0;
71
71
  }
72
72
 

4

コードの修正

2019/01/28 05:00

投稿

taki3005
taki3005

スコア12

title CHANGED
File without changes
body CHANGED
@@ -18,21 +18,19 @@
18
18
 
19
19
  ### 該当のソースコード
20
20
 
21
-
22
- ```ここに言語名を入力
23
21
  int i=0 ; //配列番号の管理
24
22
  int j=0 ; //フラグ管理
25
23
  //プログラム起動時間の変数
26
24
  unsigned long ti ;
27
25
  unsigned long to ;
28
- unsigned long t[200] ;
26
+ unsigned long tNow,tPrev ;
29
27
  int threshold ; //閾値
30
28
  int a=0 ; //アナログ電圧の変数
31
29
  int x=0 ; //一つ前のアナログ値を入力
32
30
 
33
31
  void setup(){
34
32
  //put your setup code here, to run once;
35
- Serial.begin(1200);
33
+ Serial.begin(1200);
36
34
  }
37
35
  void loop(){
38
36
  //配列の数が200なのでエラーを出さないようにする
@@ -46,29 +44,34 @@
46
44
  }
47
45
  }
48
46
  //アナログ入力が閾値を超えたときに時間を入れるに格納
49
- if(a>=0.8*threshold&&j==0){
47
+ if(a>=0.99*threshold&&j==0){
48
+ //4.9mV*20=98mVの時に分岐
49
+
50
50
  Serial.print("count");
51
51
  Serial.println(i);
52
- t[i]=millis();
52
+ tNow=millis();
53
53
 
54
54
  //i=0の時は計算できないので分岐
55
55
 
56
56
  if(i!=0){
57
+ to=tNow-tPrev;
58
+ tPrev = tNow ;
57
- to=t[i]-t[i-1]; //入れるに格納された秒数からRR間隔を計算
59
+ //入れるに格納された秒数からRR間隔を計算
58
- //ケーブルを通してPCに出力
60
+ //USVBケーブルを通してPCに出力
59
61
  Serial.println("RR");
60
62
  Serial.println(to);
61
63
  }
62
64
  i++; //次の配列へ
63
65
  j=1; //一度とったのでフラグをオンに
64
-
66
+ // Serial.end(); //通信終了
65
67
  }
66
68
  //フラグがオンの時に閾値を下回った時にオフにする
67
- if(a< 0.8*threshold&&j==1) {
69
+ if(a< 0.99*threshold&&j==1) {
68
70
  j=0;
69
71
  }
70
72
 
71
73
  }
74
+ ```ここに言語名を入力
72
75
 
73
76
 
74
77
  ```

3

画像の追加

2019/01/28 04:46

投稿

taki3005
taki3005

スコア12

title CHANGED
File without changes
body CHANGED
@@ -5,6 +5,8 @@
5
5
  現在、プログラムの確認のためファンクションジェネレータを用いて1Hz~10Hzの実行結果の変化を見たところ、
6
6
  全て150前後の結果が出てしまいます。
7
7
 
8
+ 入力波形は以下のような心電波形です。
9
+ ![イメージ説明](82b9f7e0bbdf867b07ebeba13908bb32.png)
8
10
 
9
11
  当方プログラミング初心者のため資料を参考にこのプログラムを作成しました。
10
12
  詳しい方がいらっしゃいましたらお助け頂けますと幸いです。

2

追記

2019/01/28 03:43

投稿

taki3005
taki3005

スコア12

title CHANGED
File without changes
body CHANGED
@@ -3,7 +3,7 @@
3
3
  私の作成したコードではシリアルモニタの出力結果は全て以下のようになってしまいます。
4
4
  コンパイル時のエラー等はありません。
5
5
  現在、プログラムの確認のためファンクションジェネレータを用いて1Hz~10Hzの実行結果の変化を見たところ、
6
- 全て150結果が出てしまいます。
6
+ 全て150前後の結果が出てしまいます。
7
7
 
8
8
 
9
9
  当方プログラミング初心者のため資料を参考にこのプログラムを作成しました。

1

追記

2019/01/23 06:54

投稿

taki3005
taki3005

スコア12

title CHANGED
@@ -1,1 +1,1 @@
1
- 【Arduino】シリアルモニタに値が表示されないです
1
+ 【Arduino】シリアルモニタに正しい値が表示されないです
body CHANGED
@@ -1,9 +1,9 @@
1
1
  ### 前提・実現したいこと
2
- 入力された生体信号(心電波形)のRR間隔の時間をシリアルモニタに表示させたいです
2
+ 入力された生体信号(心電波形)のRR間隔の時間をシリアルモニタに表示させたいです
3
- 私の作成したコードではシリアルモニタの出力結果は以下のようになってしまいます。
3
+ 私の作成したコードではシリアルモニタの出力結果は全て以下のようになってしまいます。
4
4
  コンパイル時のエラー等はありません。
5
+ 現在、プログラムの確認のためファンクションジェネレータを用いて1Hz~10Hzの実行結果の変化を見たところ、
5
- 入力の波形はこちらになります。
6
+ 全て150と結果が出てしいます。
6
- ![![イメージ説明](861a52b5132d061898587a28027abc82.png)]
7
7
 
8
8
 
9
9
  当方プログラミング初心者のため資料を参考にこのプログラムを作成しました。
@@ -11,8 +11,8 @@
11
11
  よろしくお願いいたします。
12
12
 
13
13
  ### 発生している問題・エラーメッセージ
14
+ ![イメージ説明](b11027f931092caa4655e8c63f822f43.png)
14
15
 
15
- ![イメージ説明](2f858e017738053780c66e5ec082c757.png)
16
16
 
17
17
  ### 該当のソースコード
18
18
 
@@ -30,6 +30,7 @@
30
30
 
31
31
  void setup(){
32
32
  //put your setup code here, to run once;
33
+ Serial.begin(1200);
33
34
  }
34
35
  void loop(){
35
36
  //配列の数が200なのでエラーを出さないようにする
@@ -44,7 +45,6 @@
44
45
  }
45
46
  //アナログ入力が閾値を超えたときに時間を入れるに格納
46
47
  if(a>=0.8*threshold&&j==0){
47
- Serial.begin(9600);
48
48
  Serial.print("count");
49
49
  Serial.println(i);
50
50
  t[i]=millis();
@@ -59,7 +59,7 @@
59
59
  }
60
60
  i++; //次の配列へ
61
61
  j=1; //一度とったのでフラグをオンに
62
- Serial.end(); //通信終了
62
+
63
63
  }
64
64
  //フラグがオンの時に閾値を下回った時にオフにする
65
65
  if(a< 0.8*threshold&&j==1) {