質問編集履歴
9
解決しました
test
CHANGED
File without changes
|
test
CHANGED
@@ -12,39 +12,35 @@
|
|
12
12
|
|
13
13
|
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
入力波形は
|
15
|
+
入力波形は心電波形です。
|
18
|
-
|
19
|
-
![イメージ説明](82b9f7e0bbdf867b07ebeba13908bb32.png)
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
当方プログラミング初心者のため資料を参考にこのプログラムを作成しました。
|
24
|
-
|
25
|
-
詳しい方がいらっしゃいましたらお助け頂けますと幸いです。
|
26
|
-
|
27
|
-
よろしくお願いいたします。
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
こちらにも質問させていただいています。
|
32
|
-
|
33
|
-
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13202603858?__ysp=YXJkdWlubw%3D%3D
|
34
|
-
|
35
|
-
### 発生している問題・エラーメッセージ
|
36
|
-
|
37
|
-
![イメージ説明](7b0a64229f5ac986c683fd9ba5ef4c0b.png)
|
38
16
|
|
39
17
|
|
40
18
|
|
41
19
|
|
42
20
|
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
|
26
|
+
|
43
|
-
###
|
27
|
+
### 解決したコード
|
28
|
+
|
29
|
+
|
44
30
|
|
45
31
|
int now=0 ;
|
46
32
|
|
33
|
+
long i=0 ; //配列番号の管理
|
34
|
+
|
35
|
+
byte j=0 ; //フラグ管理
|
36
|
+
|
37
|
+
unsigned long tNow,tPrev;
|
38
|
+
|
39
|
+
word peak;
|
40
|
+
|
47
41
|
unsigned long time ;
|
42
|
+
|
43
|
+
//int pin=10 ;
|
48
44
|
|
49
45
|
|
50
46
|
|
@@ -52,7 +48,7 @@
|
|
52
48
|
|
53
49
|
// put your setup code here, to run once:
|
54
50
|
|
55
|
-
Serial.begin(
|
51
|
+
Serial.begin(9600);
|
56
52
|
|
57
53
|
}
|
58
54
|
|
@@ -62,27 +58,75 @@
|
|
62
58
|
|
63
59
|
// put your main code here, to run repeatedly:
|
64
60
|
|
65
|
-
now=analogRead(A5) ;
|
61
|
+
now=analogRead(A5) ;
|
66
62
|
|
67
63
|
time = millis() ;
|
68
64
|
|
69
65
|
|
70
66
|
|
71
|
-
Serial.print(time/1000) ;
|
67
|
+
Serial.print(time/1000) ;
|
72
68
|
|
73
69
|
Serial.print(",") ;
|
74
70
|
|
75
|
-
|
71
|
+
Serial.println(now*0.005);
|
76
72
|
|
77
|
-
Serial.println(now);
|
73
|
+
//Serial.println(now);
|
78
74
|
|
79
75
|
|
80
76
|
|
81
|
-
//delay(10);
|
77
|
+
//delay(10);
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
if(now>peak) {//ピーク値更新なら
|
82
|
+
|
83
|
+
peak=now;//保存して
|
84
|
+
|
85
|
+
tNow=millis();//時間を取得
|
86
|
+
|
87
|
+
j=1;//取得した
|
88
|
+
|
89
|
+
}
|
90
|
+
|
91
|
+
if(now<peak*7/10 && j==1) {//7割りに落ちた時にピーク確定。→集計
|
92
|
+
|
93
|
+
if(i){
|
94
|
+
|
95
|
+
//Serial.print("count:");
|
96
|
+
|
97
|
+
//Serial.print(i);
|
98
|
+
|
99
|
+
//Serial.print(" peak:");
|
100
|
+
|
101
|
+
//Serial.print(peak);
|
102
|
+
|
103
|
+
Serial.print(" RR:");
|
104
|
+
|
105
|
+
Serial.print(tNow-tPrev);
|
106
|
+
|
107
|
+
Serial.println("ms");
|
82
108
|
|
83
109
|
}
|
84
110
|
|
85
111
|
|
112
|
+
|
113
|
+
tPrev = tNow ;
|
114
|
+
|
115
|
+
peak=peak*8/10;//8割以上に上がったら再取得
|
116
|
+
|
117
|
+
i++;
|
118
|
+
|
119
|
+
j=0;
|
120
|
+
|
121
|
+
}
|
122
|
+
|
123
|
+
|
124
|
+
|
125
|
+
|
126
|
+
|
127
|
+
|
128
|
+
|
129
|
+
}
|
86
130
|
|
87
131
|
```ここに言語名を入力
|
88
132
|
|
8
test
CHANGED
File without changes
|
test
CHANGED
@@ -27,6 +27,10 @@
|
|
27
27
|
よろしくお願いいたします。
|
28
28
|
|
29
29
|
|
30
|
+
|
31
|
+
こちらにも質問させていただいています。
|
32
|
+
|
33
|
+
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13202603858?__ysp=YXJkdWlubw%3D%3D
|
30
34
|
|
31
35
|
### 発生している問題・エラーメッセージ
|
32
36
|
|
7
画像の変更
test
CHANGED
File without changes
|
test
CHANGED
@@ -30,7 +30,7 @@
|
|
30
30
|
|
31
31
|
### 発生している問題・エラーメッセージ
|
32
32
|
|
33
|
-
![イメージ説明](b
|
33
|
+
![イメージ説明](7b0a64229f5ac986c683fd9ba5ef4c0b.png)
|
34
34
|
|
35
35
|
|
36
36
|
|
6
再考後の質問
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
【Arduino】シリアルモニタに正しい値が表示されない
|
1
|
+
【Arduino】シリアルモニタに正しい値が表示されない
|
test
CHANGED
@@ -1,14 +1,16 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
2
|
|
3
|
-
入力された生体信号(心電波形)のRR間隔の時間を
|
3
|
+
入力された生体信号(心電波形)のRR間隔の時間を出力させるために
|
4
4
|
|
5
|
+
入力信号のデータを取得して、波形のグラフを作成したいです。
|
6
|
+
|
7
|
+
|
8
|
+
|
5
|
-
私の作成したコードではシ
|
9
|
+
私の作成したコードではArduinoに入力する前にオシロスコープで取得している波形とは異なってしまいます。
|
6
10
|
|
7
11
|
コンパイル時のエラー等はありません。
|
8
12
|
|
9
|
-
現在、プログラムの確認のためファンクションジェネレータを用いて1Hz~10Hzの実行結果の変化を見たところ、
|
10
13
|
|
11
|
-
全て150前後の結果が出てしまいます。
|
12
14
|
|
13
15
|
|
14
16
|
|
@@ -36,113 +38,47 @@
|
|
36
38
|
|
37
39
|
### 該当のソースコード
|
38
40
|
|
41
|
+
int now=0 ;
|
39
42
|
|
40
|
-
|
41
|
-
int i=0 ; //配列番号の管理
|
42
|
-
|
43
|
-
int j=0 ; //フラグ管理
|
44
|
-
|
45
|
-
//プログラム起動時間の変数
|
46
|
-
|
47
|
-
unsigned long ti ;
|
43
|
+
unsigned long time ;
|
48
|
-
|
49
|
-
unsigned long to ;
|
50
|
-
|
51
|
-
unsigned long tNow,tPrev ;
|
52
|
-
|
53
|
-
int threshold ; //閾値
|
54
|
-
|
55
|
-
int a=0 ; //アナログ電圧の変数
|
56
|
-
|
57
|
-
int x=0 ; //一つ前のアナログ値を入力
|
58
44
|
|
59
45
|
|
60
46
|
|
61
|
-
void setup(){
|
47
|
+
void setup() {
|
62
48
|
|
63
|
-
|
49
|
+
// put your setup code here, to run once:
|
64
50
|
|
65
|
-
|
51
|
+
Serial.begin(1200);
|
66
52
|
|
67
53
|
}
|
68
54
|
|
69
|
-
void loop(){
|
70
55
|
|
71
|
-
//配列の数が200なのでエラーを出さないようにする
|
72
56
|
|
73
|
-
|
57
|
+
void loop() {
|
74
58
|
|
75
|
-
|
59
|
+
// put your main code here, to run repeatedly:
|
76
60
|
|
77
|
-
|
61
|
+
now=analogRead(A5) ;//入力波形の取得
|
78
62
|
|
79
|
-
|
63
|
+
time = millis() ;
|
80
|
-
|
81
|
-
x=a;//波形の山が下り始めるところを見つける
|
82
|
-
|
83
|
-
if(x-threshold>0){
|
84
|
-
|
85
|
-
threshold=a; //R波のみ判定
|
86
|
-
|
87
|
-
}
|
88
|
-
|
89
|
-
}
|
90
|
-
|
91
|
-
//アナログ入力が閾値を超えたときに時間を入れるに格納
|
92
|
-
|
93
|
-
if(a>=0.5*threshold&&j==0){
|
94
|
-
|
95
|
-
//4.9mV*20=98mVの時に分岐
|
96
64
|
|
97
65
|
|
98
66
|
|
99
|
-
Serial.print(
|
67
|
+
Serial.print(time/1000) ; //mSからSに
|
100
68
|
|
101
|
-
Serial.print
|
69
|
+
Serial.print(",") ;
|
102
70
|
|
71
|
+
//Serial.println(now*0.0049); //電圧に変更
|
72
|
+
|
103
|
-
|
73
|
+
Serial.println(now);
|
104
74
|
|
105
75
|
|
106
76
|
|
107
|
-
//i=0の時は計算できないので分岐
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
if(i!=0){
|
112
|
-
|
113
|
-
to=tNow-tPrev;
|
114
|
-
|
115
|
-
tPrev = tNow ;
|
116
|
-
|
117
|
-
|
77
|
+
//delay(10); //必要(?)
|
118
|
-
|
119
|
-
//USVBケーブルを通してPCに出力
|
120
|
-
|
121
|
-
Serial.println("RR");
|
122
|
-
|
123
|
-
Serial.println(to);
|
124
78
|
|
125
79
|
}
|
126
80
|
|
127
|
-
i++; //次の配列へ
|
128
81
|
|
129
|
-
j=1; //一度とったのでフラグをオンに
|
130
|
-
|
131
|
-
// Serial.end(); //通信終了
|
132
|
-
|
133
|
-
}
|
134
|
-
|
135
|
-
//フラグがオンの時に閾値を下回った時にオフにする
|
136
|
-
|
137
|
-
if(a< 0.5*threshold&&j==1) {
|
138
|
-
|
139
|
-
j=0;
|
140
|
-
|
141
|
-
}
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
}
|
146
82
|
|
147
83
|
```ここに言語名を入力
|
148
84
|
|
5
コードの修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -90,7 +90,7 @@
|
|
90
90
|
|
91
91
|
//アナログ入力が閾値を超えたときに時間を入れるに格納
|
92
92
|
|
93
|
-
if(a>=0.
|
93
|
+
if(a>=0.5*threshold&&j==0){
|
94
94
|
|
95
95
|
//4.9mV*20=98mVの時に分岐
|
96
96
|
|
@@ -134,7 +134,7 @@
|
|
134
134
|
|
135
135
|
//フラグがオンの時に閾値を下回った時にオフにする
|
136
136
|
|
137
|
-
if(a< 0.
|
137
|
+
if(a< 0.5*threshold&&j==1) {
|
138
138
|
|
139
139
|
j=0;
|
140
140
|
|
4
コードの修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -38,10 +38,6 @@
|
|
38
38
|
|
39
39
|
|
40
40
|
|
41
|
-
|
42
|
-
|
43
|
-
```ここに言語名を入力
|
44
|
-
|
45
41
|
int i=0 ; //配列番号の管理
|
46
42
|
|
47
43
|
int j=0 ; //フラグ管理
|
@@ -52,7 +48,7 @@
|
|
52
48
|
|
53
49
|
unsigned long to ;
|
54
50
|
|
55
|
-
unsigned long t
|
51
|
+
unsigned long tNow,tPrev ;
|
56
52
|
|
57
53
|
int threshold ; //閾値
|
58
54
|
|
@@ -66,7 +62,7 @@
|
|
66
62
|
|
67
63
|
//put your setup code here, to run once;
|
68
64
|
|
69
|
-
Serial.begin(1200);
|
65
|
+
Serial.begin(1200);
|
70
66
|
|
71
67
|
}
|
72
68
|
|
@@ -94,13 +90,17 @@
|
|
94
90
|
|
95
91
|
//アナログ入力が閾値を超えたときに時間を入れるに格納
|
96
92
|
|
97
|
-
if(a>=0.
|
93
|
+
if(a>=0.99*threshold&&j==0){
|
94
|
+
|
95
|
+
//4.9mV*20=98mVの時に分岐
|
96
|
+
|
97
|
+
|
98
98
|
|
99
99
|
Serial.print("count");
|
100
100
|
|
101
101
|
Serial.println(i);
|
102
102
|
|
103
|
-
t
|
103
|
+
tNow=millis();
|
104
104
|
|
105
105
|
|
106
106
|
|
@@ -110,9 +110,13 @@
|
|
110
110
|
|
111
111
|
if(i!=0){
|
112
112
|
|
113
|
-
to=t
|
113
|
+
to=tNow-tPrev;
|
114
114
|
|
115
|
+
tPrev = tNow ;
|
116
|
+
|
117
|
+
//入れるに格納された秒数からRR間隔を計算
|
118
|
+
|
115
|
-
//ケーブルを通してPCに出力
|
119
|
+
//USVBケーブルを通してPCに出力
|
116
120
|
|
117
121
|
Serial.println("RR");
|
118
122
|
|
@@ -124,13 +128,13 @@
|
|
124
128
|
|
125
129
|
j=1; //一度とったのでフラグをオンに
|
126
130
|
|
127
|
-
|
131
|
+
// Serial.end(); //通信終了
|
128
132
|
|
129
133
|
}
|
130
134
|
|
131
135
|
//フラグがオンの時に閾値を下回った時にオフにする
|
132
136
|
|
133
|
-
if(a< 0.
|
137
|
+
if(a< 0.99*threshold&&j==1) {
|
134
138
|
|
135
139
|
j=0;
|
136
140
|
|
@@ -139,6 +143,8 @@
|
|
139
143
|
|
140
144
|
|
141
145
|
}
|
146
|
+
|
147
|
+
```ここに言語名を入力
|
142
148
|
|
143
149
|
|
144
150
|
|
3
画像の追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -11,6 +11,10 @@
|
|
11
11
|
全て150前後の結果が出てしまいます。
|
12
12
|
|
13
13
|
|
14
|
+
|
15
|
+
入力波形は以下のような心電波形です。
|
16
|
+
|
17
|
+
![イメージ説明](82b9f7e0bbdf867b07ebeba13908bb32.png)
|
14
18
|
|
15
19
|
|
16
20
|
|
2
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
現在、プログラムの確認のためファンクションジェネレータを用いて1Hz~10Hzの実行結果の変化を見たところ、
|
10
10
|
|
11
|
-
全て150
|
11
|
+
全て150前後の結果が出てしまいます。
|
12
12
|
|
13
13
|
|
14
14
|
|
1
追記
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
【Arduino】シリアルモニタに値が表示されないです
|
1
|
+
【Arduino】シリアルモニタに正しい値が表示されないです
|
test
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
2
|
|
3
|
-
入力された生体信号(心電波形)のRR間隔の時間をシリアルモニタに表示させたい
|
3
|
+
入力された生体信号(心電波形)のRR間隔の時間をシリアルモニタに表示させたいです。
|
4
4
|
|
5
|
-
私の作成したコードではシリアルモニタの出力結果は以下のようになってしまいます。
|
5
|
+
私の作成したコードではシリアルモニタの出力結果は全て以下のようになってしまいます。
|
6
6
|
|
7
7
|
コンパイル時のエラー等はありません。
|
8
8
|
|
9
|
-
|
9
|
+
現在、プログラムの確認のためファンクションジェネレータを用いて1Hz~10Hzの実行結果の変化を見たところ、
|
10
10
|
|
11
|
-
|
11
|
+
全て150と結果が出てしまいます。
|
12
12
|
|
13
13
|
|
14
14
|
|
@@ -24,9 +24,9 @@
|
|
24
24
|
|
25
25
|
### 発生している問題・エラーメッセージ
|
26
26
|
|
27
|
+
![イメージ説明](b11027f931092caa4655e8c63f822f43.png)
|
27
28
|
|
28
29
|
|
29
|
-
![イメージ説明](2f858e017738053780c66e5ec082c757.png)
|
30
30
|
|
31
31
|
|
32
32
|
|
@@ -62,6 +62,8 @@
|
|
62
62
|
|
63
63
|
//put your setup code here, to run once;
|
64
64
|
|
65
|
+
Serial.begin(1200);
|
66
|
+
|
65
67
|
}
|
66
68
|
|
67
69
|
void loop(){
|
@@ -89,8 +91,6 @@
|
|
89
91
|
//アナログ入力が閾値を超えたときに時間を入れるに格納
|
90
92
|
|
91
93
|
if(a>=0.8*threshold&&j==0){
|
92
|
-
|
93
|
-
Serial.begin(9600);
|
94
94
|
|
95
95
|
Serial.print("count");
|
96
96
|
|
@@ -120,7 +120,7 @@
|
|
120
120
|
|
121
121
|
j=1; //一度とったのでフラグをオンに
|
122
122
|
|
123
|
-
|
123
|
+
|
124
124
|
|
125
125
|
}
|
126
126
|
|