質問編集履歴
9
解決しました
title
CHANGED
File without changes
|
body
CHANGED
@@ -5,42 +5,64 @@
|
|
5
5
|
私の作成したコードではArduinoに入力する前にオシロスコープで取得している波形とは異なってしまいます。
|
6
6
|
コンパイル時のエラー等はありません。
|
7
7
|
|
8
|
+
入力波形は心電波形です。
|
8
9
|
|
9
|
-
入力波形は以下のような心電波形です。
|
10
|
-

|
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
|
-

|
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(
|
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) ;
|
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
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
|

|
18
20
|
|
7
画像の変更
title
CHANGED
File without changes
|
body
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
よろしくお願いいたします。
|
15
15
|
|
16
16
|
### 発生している問題・エラーメッセージ
|
17
|
-

|
18
18
|
|
19
19
|
|
20
20
|
### 該当のソースコード
|
6
再考後の質問
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
|

|
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
|
-
|
25
|
+
// put your setup code here, to run once:
|
33
|
-
|
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
|
-
|
31
|
+
now=analogRead(A5) ;//入力波形の取得
|
51
|
-
Serial.println(i);
|
52
|
-
|
32
|
+
time = millis() ;
|
53
33
|
|
34
|
+
Serial.print(time/1000) ; //mSからSに
|
35
|
+
Serial.print(",") ;
|
54
|
-
//
|
36
|
+
//Serial.println(now*0.0049); //電圧に変更
|
37
|
+
Serial.println(now);
|
55
38
|
|
56
|
-
if(i!=0){
|
57
|
-
to=tNow-tPrev;
|
58
|
-
tPrev = tNow ;
|
59
|
-
|
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
コードの修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -44,7 +44,7 @@
|
|
44
44
|
}
|
45
45
|
}
|
46
46
|
//アナログ入力が閾値を超えたときに時間を入れるに格納
|
47
|
-
if(a>=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.
|
69
|
+
if(a< 0.5*threshold&&j==1) {
|
70
70
|
j=0;
|
71
71
|
}
|
72
72
|
|
4
コードの修正
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
|
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.
|
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
|
-
|
52
|
+
tNow=millis();
|
53
53
|
|
54
54
|
//i=0の時は計算できないので分岐
|
55
55
|
|
56
56
|
if(i!=0){
|
57
|
+
to=tNow-tPrev;
|
58
|
+
tPrev = tNow ;
|
57
|
-
|
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.
|
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
画像の追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -5,6 +5,8 @@
|
|
5
5
|
現在、プログラムの確認のためファンクションジェネレータを用いて1Hz~10Hzの実行結果の変化を見たところ、
|
6
6
|
全て150前後の結果が出てしまいます。
|
7
7
|
|
8
|
+
入力波形は以下のような心電波形です。
|
9
|
+

|
8
10
|
|
9
11
|
当方プログラミング初心者のため資料を参考にこのプログラムを作成しました。
|
10
12
|
詳しい方がいらっしゃいましたらお助け頂けますと幸いです。
|
2
追記
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
追記
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
|
-
]
|
7
7
|
|
8
8
|
|
9
9
|
当方プログラミング初心者のため資料を参考にこのプログラムを作成しました。
|
@@ -11,8 +11,8 @@
|
|
11
11
|
よろしくお願いいたします。
|
12
12
|
|
13
13
|
### 発生している問題・エラーメッセージ
|
14
|
+

|
14
15
|
|
15
|
-

|
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
|
-
|
62
|
+
|
63
63
|
}
|
64
64
|
//フラグがオンの時に閾値を下回った時にオフにする
|
65
65
|
if(a< 0.8*threshold&&j==1) {
|