質問編集履歴

3

似た質問を違うサイトでもしてしまったから

2021/02/03 12:42

投稿

Yokkii
Yokkii

スコア2

test CHANGED
@@ -1 +1 @@
1
- Arduinoのデータ取得方法についてのプログラム
1
+ データ取得方法についてのプログラム
test CHANGED
@@ -1,291 +1,3 @@
1
- ### 前提・実現したいこと
1
+ わからないことは聞いて解決するもよし、自分で解決するのもよし
2
2
 
3
-
4
-
5
- Arduinoで2つのエンコーダの1パルス出力された時の経過時間を計測するプログラムを考えています。
6
-
7
-
8
-
9
- そこで考えたのが、
10
-
11
- 3周分のデータを取得⇒SDカードに保存⇒3周分のデータを取得(前のデータを書き換え)
12
-
13
- ⇒SDカードに保存(前のデータに加える)
14
-
15
- を繰り返せば、SDカードに保存する時間分だけ遅れが生じるが、何周分のデータも取れるのではないかと考えました。
16
-
17
-
18
-
19
- 〇前提条件
20
-
21
- それぞれのエンコーダにはギアが付いていてかみ合っている状態です
22
-
23
- エンコーダの分解能は2880と3600です
24
-
25
- 一回転は約2秒
26
-
27
- 必要なデータ数は9周分のデータ(つまり3周を3回)
28
-
29
-
30
-
31
- ### 発生している問題・エラーメッセージ
32
-
33
-
34
-
35
- Arduino Dueのメモリ容量が96KBでエンコーダの3周分のデータしか取れない
36
-
37
-
38
-
39
-
40
-
41
- ### 該当のソースコード
42
-
43
-
44
-
45
- ```ここに言語名を入力
46
-
47
- #include <SD.h>
48
-
49
- #define chipSelect 4
50
-
51
- #define Pina 6 // 2 つのピンに名前を付けておく
52
-
53
- #define Pinb 2
54
-
55
- #define Pinc 5
56
-
57
- const int numa = 10800; // 駆動歯車:2880
58
-
59
- const int numb = 10800; // 被動歯車:3600
60
-
61
- const int numc = 3; //被動歯車Z相
62
-
63
- boolean V1a, V2a, V1b, V2b, V1c, V2c;
64
-
65
- File dataFile;
66
-
67
- static unsigned long startTime;
68
-
69
- int i1,i2,i3;
70
-
71
- void setup(){
72
-
73
- Serial.begin (9600);
74
-
75
-
76
-
77
- Serial.print(F("Initializing SD card..."));
78
-
79
- pinMode(10, OUTPUT);
80
-
81
- if (!SD.begin(chipSelect)){
82
-
83
- Serial.println(F("Card failed, or not present"));
84
-
85
- while(1);
86
-
87
- }
88
-
89
- Serial.println(F("ok."));
90
-
91
- dataFile = SD.open("datalog.txt", FILE_WRITE);
92
-
93
- Serial.println(F("Recored start!"));
94
-
95
- startTime=micros();
96
-
97
-
98
-
99
- pinMode(Pina, INPUT);//6(金属)
100
-
101
- pinMode(Pinb, INPUT);//2(プラスチック)
102
-
103
- pinMode(Pinc, INPUT);//Z相
104
-
105
- pinMode(LED_BUILTIN, OUTPUT);
106
-
107
- V1a =0;
108
-
109
- V2a =0;
110
-
111
- V1b =0;
112
-
113
- V2b =0;
114
-
115
- V1c =0;
116
-
117
- V2c =0;
118
-
119
- i1=0;
120
-
121
- i2=0;
122
-
123
- i3=0;
124
-
125
- }
126
-
127
- void loop(){
128
-
129
- int j,k,l;
130
-
131
- static unsigned long t1[numa+3]={0}, t2[numb+3]={0},t3[numc+3]={0};
132
-
133
- V2a = digitalRead(Pina); // 2 つのピンで読んだ値を V1 と V2 に
134
-
135
- V2b = digitalRead(Pinb);
136
-
137
- V2c = digitalRead(Pinc);
138
-
139
-
140
-
141
- if(g=0,g<numg,g++){
142
-
143
-
144
-
145
- if( V1c==0 && V2c>=1 && i3<numc){
146
-
147
- t3[i3] = micros();
148
-
149
- i3++;
150
-
151
- }
152
-
153
-
154
-
155
- if(V1a==0 && V2a>=1){
156
-
157
- t1[i1] = micros();
158
-
159
- i1++;
160
-
161
- }
162
-
163
-
164
-
165
- if(V1b==0 && V2b>=1){
166
-
167
- t2[i2] = micros();
168
-
169
- i2++;
170
-
171
- }
172
-
173
- if(i2>=numb){
174
-
175
- Serial.print("data record finished");
176
-
177
- if(((micros()-startTime)%1000000000)<50000000){
178
-
179
- for(l=0;l<numc;l++){
180
-
181
- dataFile.println(t3[l]);
182
-
183
- delay(5);
184
-
185
- }
186
-
187
- for(j=0,k=0;j<numa && k<numb ;j++,k++){
188
-
189
- dataFile.print(t1[j]);
190
-
191
- dataFile.print(" ");
192
-
193
- dataFile.println(t2[k]);
194
-
195
- delay(5);
196
-
197
- }
198
-
199
- }
200
-
201
- for(l=0;l<numc;l++){
202
-
203
- Serial.println(t3[l],4);
204
-
205
- delay(20);
206
-
207
- }
208
-
209
- for(j=0,k=0;j<numa && k<numb ;j++,k++){
210
-
211
- Serial.print(t1[j],4);
212
-
213
- Serial.print(",");
214
-
215
- Serial.println(t2[k],4);
216
-
217
- delay(20);
218
-
219
- }
220
-
221
-
222
-
223
- i1=0;
224
-
225
- i2=0;
226
-
227
- i3=0;
228
-
229
- if((micros()-startTime)>40000000){ // 1,000,000micros=1sec 40s
230
-
231
- dataFile.flush();
232
-
233
- dataFile.close();
234
-
235
- Serial.println(F("finished"));
236
-
237
- while(1){
238
-
239
- digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
240
-
241
- delay(5000); // wait for a second
242
-
243
- digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
244
-
245
- delay(5000); // wait for a second
246
-
247
- }
248
-
249
- }
250
-
251
- }
252
-
253
-
254
-
255
- V1a=V2a;
256
-
257
- V1b=V2b;
258
-
259
- V1c=V2c;
260
-
261
- }
262
-
263
-
264
-
265
- ```
266
-
267
-
268
-
269
- ### 試したこと
270
-
271
-
272
-
273
- 今のプログラムを書き換えて、エンコーダのデータを9周分取得しSDカードに保存するプログラムを書きたい
274
-
275
-
276
-
277
- ➀このやり方は可能かどうか
278
-
279
- ➁どういうプログラムにする
3
+ こと利用して勉強するべし
280
-
281
- ➂簡単でいいのでプログラムを書いて説明していただきたい
282
-
283
-
284
-
285
-
286
-
287
- ### 補足情報(FW/ツールのバージョンなど)
288
-
289
-
290
-
291
- ここにより詳細な情報を記載してください。

2

書式の改善

2021/02/03 12:42

投稿

Yokkii
Yokkii

スコア2

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,8 @@
1
+ ### 前提・実現したいこと
2
+
3
+
4
+
1
- Arduinoで2つのエンコーダの1パルス出力された時の経過時間を計測するプログラムを考えています。前回の質問で、Arduino Dueのメモリ容量が96KBでエンコーダの3周分のデータしか取れないことがわかりました。
5
+ Arduinoで2つのエンコーダの1パルス出力された時の経過時間を計測するプログラムを考えています。
2
6
 
3
7
 
4
8
 
@@ -12,9 +16,261 @@
12
16
 
13
17
 
14
18
 
19
+ 〇前提条件
20
+
21
+ それぞれのエンコーダにはギアが付いていてかみ合っている状態です
22
+
23
+ エンコーダの分解能は2880と3600です
24
+
25
+ 一回転は約2秒
26
+
15
- ただ、プログラム書き方がいいちわかません
27
+ 必要なデータ数は9周分データ(つまり3周を3回)
28
+
29
+
30
+
16
-
31
+ ### 発生している問題・エラーメッセージ
32
+
33
+
34
+
35
+ Arduino Dueのメモリ容量が96KBでエンコーダの3周分のデータしか取れない
36
+
37
+
38
+
39
+
40
+
41
+ ### 該当のソースコード
42
+
43
+
44
+
45
+ ```ここに言語名を入力
46
+
47
+ #include <SD.h>
48
+
49
+ #define chipSelect 4
50
+
51
+ #define Pina 6 // 2 つのピンに名前を付けておく
52
+
53
+ #define Pinb 2
54
+
55
+ #define Pinc 5
56
+
57
+ const int numa = 10800; // 駆動歯車:2880
58
+
59
+ const int numb = 10800; // 被動歯車:3600
60
+
61
+ const int numc = 3; //被動歯車Z相
62
+
63
+ boolean V1a, V2a, V1b, V2b, V1c, V2c;
64
+
65
+ File dataFile;
66
+
67
+ static unsigned long startTime;
68
+
69
+ int i1,i2,i3;
70
+
71
+ void setup(){
72
+
73
+ Serial.begin (9600);
74
+
75
+
76
+
77
+ Serial.print(F("Initializing SD card..."));
78
+
79
+ pinMode(10, OUTPUT);
80
+
81
+ if (!SD.begin(chipSelect)){
82
+
83
+ Serial.println(F("Card failed, or not present"));
84
+
85
+ while(1);
86
+
87
+ }
88
+
89
+ Serial.println(F("ok."));
90
+
91
+ dataFile = SD.open("datalog.txt", FILE_WRITE);
92
+
93
+ Serial.println(F("Recored start!"));
94
+
95
+ startTime=micros();
96
+
97
+
98
+
99
+ pinMode(Pina, INPUT);//6(金属)
100
+
101
+ pinMode(Pinb, INPUT);//2(プラスチック)
102
+
103
+ pinMode(Pinc, INPUT);//Z相
104
+
105
+ pinMode(LED_BUILTIN, OUTPUT);
106
+
107
+ V1a =0;
108
+
109
+ V2a =0;
110
+
111
+ V1b =0;
112
+
113
+ V2b =0;
114
+
115
+ V1c =0;
116
+
117
+ V2c =0;
118
+
119
+ i1=0;
120
+
121
+ i2=0;
122
+
123
+ i3=0;
124
+
125
+ }
126
+
127
+ void loop(){
128
+
129
+ int j,k,l;
130
+
131
+ static unsigned long t1[numa+3]={0}, t2[numb+3]={0},t3[numc+3]={0};
132
+
133
+ V2a = digitalRead(Pina); // 2 つのピンで読んだ値を V1 と V2 に
134
+
135
+ V2b = digitalRead(Pinb);
136
+
137
+ V2c = digitalRead(Pinc);
138
+
139
+
140
+
141
+ if(g=0,g<numg,g++){
142
+
143
+
144
+
145
+ if( V1c==0 && V2c>=1 && i3<numc){
146
+
147
+ t3[i3] = micros();
148
+
149
+ i3++;
150
+
151
+ }
152
+
153
+
154
+
155
+ if(V1a==0 && V2a>=1){
156
+
157
+ t1[i1] = micros();
158
+
159
+ i1++;
160
+
161
+ }
162
+
163
+
164
+
165
+ if(V1b==0 && V2b>=1){
166
+
167
+ t2[i2] = micros();
168
+
169
+ i2++;
170
+
171
+ }
172
+
173
+ if(i2>=numb){
174
+
175
+ Serial.print("data record finished");
176
+
177
+ if(((micros()-startTime)%1000000000)<50000000){
178
+
179
+ for(l=0;l<numc;l++){
180
+
181
+ dataFile.println(t3[l]);
182
+
183
+ delay(5);
184
+
185
+ }
186
+
187
+ for(j=0,k=0;j<numa && k<numb ;j++,k++){
188
+
189
+ dataFile.print(t1[j]);
190
+
191
+ dataFile.print(" ");
192
+
193
+ dataFile.println(t2[k]);
194
+
195
+ delay(5);
196
+
197
+ }
198
+
199
+ }
200
+
201
+ for(l=0;l<numc;l++){
202
+
203
+ Serial.println(t3[l],4);
204
+
205
+ delay(20);
206
+
207
+ }
208
+
209
+ for(j=0,k=0;j<numa && k<numb ;j++,k++){
210
+
211
+ Serial.print(t1[j],4);
212
+
213
+ Serial.print(",");
214
+
215
+ Serial.println(t2[k],4);
216
+
217
+ delay(20);
218
+
219
+ }
220
+
221
+
222
+
223
+ i1=0;
224
+
225
+ i2=0;
226
+
227
+ i3=0;
228
+
229
+ if((micros()-startTime)>40000000){ // 1,000,000micros=1sec 40s
230
+
231
+ dataFile.flush();
232
+
233
+ dataFile.close();
234
+
235
+ Serial.println(F("finished"));
236
+
237
+ while(1){
238
+
239
+ digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
240
+
241
+ delay(5000); // wait for a second
242
+
243
+ digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
244
+
245
+ delay(5000); // wait for a second
246
+
247
+ }
248
+
249
+ }
250
+
251
+ }
252
+
253
+
254
+
255
+ V1a=V2a;
256
+
257
+ V1b=V2b;
258
+
259
+ V1c=V2c;
260
+
261
+ }
262
+
263
+
264
+
265
+ ```
266
+
267
+
268
+
269
+ ### 試したこと
270
+
271
+
272
+
17
- if文で1ごとにカウント10ウントしたら終了するようにプログラムとか?
273
+ 今のプログラムを書き換エンコーダのデータを9分取得SDードに保存するプログラムを書きたい
18
274
 
19
275
 
20
276
 
@@ -26,226 +282,10 @@
26
282
 
27
283
 
28
284
 
29
- 可能な範囲でよろしいので回答していただけると幸いです
285
+
30
-
31
-
32
-
33
-
34
-
35
- **スケッチ**
286
+
36
-
37
- #include <SD.h>
38
-
39
- #define chipSelect 4
40
-
41
- #define Pina 6 // 2 つに名前を付けておく
287
+ ### 補足情報(FW/ツールバージョなど)
42
-
43
- #define Pinb 2
288
+
44
-
45
- #define Pinc 5
289
+
46
-
47
- const int numa = 10800; // 駆動歯車:2880
290
+
48
-
49
- const int numb = 10800; // 被動歯車:3600
50
-
51
- const int numc = 3; //被動歯車Z相
52
-
53
- boolean V1a, V2a, V1b, V2b, V1c, V2c;
54
-
55
- File dataFile;
56
-
57
- static unsigned long startTime;
58
-
59
- int i1,i2,i3;
60
-
61
- void setup(){
62
-
63
- Serial.begin (9600);
291
+ ここにより詳細な情報を記載してください。
64
-
65
-
66
-
67
- Serial.print(F("Initializing SD card..."));
68
-
69
- pinMode(10, OUTPUT);
70
-
71
- if (!SD.begin(chipSelect)){
72
-
73
- Serial.println(F("Card failed, or not present"));
74
-
75
- while(1);
76
-
77
- }
78
-
79
- Serial.println(F("ok."));
80
-
81
- dataFile = SD.open("datalog.txt", FILE_WRITE);
82
-
83
- Serial.println(F("Recored start!"));
84
-
85
- startTime=micros();
86
-
87
-
88
-
89
- pinMode(Pina, INPUT);//6(金属)
90
-
91
- pinMode(Pinb, INPUT);//2(プラスチック)
92
-
93
- pinMode(Pinc, INPUT);//Z相
94
-
95
- pinMode(LED_BUILTIN, OUTPUT);
96
-
97
- V1a =0;
98
-
99
- V2a =0;
100
-
101
- V1b =0;
102
-
103
- V2b =0;
104
-
105
- V1c =0;
106
-
107
- V2c =0;
108
-
109
- i1=0;
110
-
111
- i2=0;
112
-
113
- i3=0;
114
-
115
- }
116
-
117
- void loop(){
118
-
119
- int j,k,l;
120
-
121
- static unsigned long t1[numa+3]={0}, t2[numb+3]={0},t3[numc+3]={0};
122
-
123
- V2a = digitalRead(Pina); // 2 つのピンで読んだ値を V1 と V2 に
124
-
125
- V2b = digitalRead(Pinb);
126
-
127
- V2c = digitalRead(Pinc);
128
-
129
-
130
-
131
- if(g=0,g<numg,g++){
132
-
133
-
134
-
135
- if( V1c==0 && V2c>=1 && i3<numc){
136
-
137
- t3[i3] = micros();
138
-
139
- i3++;
140
-
141
- }
142
-
143
-
144
-
145
- if(V1a==0 && V2a>=1){
146
-
147
- t1[i1] = micros();
148
-
149
- i1++;
150
-
151
- }
152
-
153
-
154
-
155
- if(V1b==0 && V2b>=1){
156
-
157
- t2[i2] = micros();
158
-
159
- i2++;
160
-
161
- }
162
-
163
- if(i2>=numb){
164
-
165
- Serial.print("data record finished");
166
-
167
- if(((micros()-startTime)%1000000000)<50000000){
168
-
169
- for(l=0;l<numc;l++){
170
-
171
- dataFile.println(t3[l]);
172
-
173
- delay(5);
174
-
175
- }
176
-
177
- for(j=0,k=0;j<numa && k<numb ;j++,k++){
178
-
179
- dataFile.print(t1[j]);
180
-
181
- dataFile.print(" ");
182
-
183
- dataFile.println(t2[k]);
184
-
185
- delay(5);
186
-
187
- }
188
-
189
- }
190
-
191
- for(l=0;l<numc;l++){
192
-
193
- Serial.println(t3[l],4);
194
-
195
- delay(20);
196
-
197
- }
198
-
199
- for(j=0,k=0;j<numa && k<numb ;j++,k++){
200
-
201
- Serial.print(t1[j],4);
202
-
203
- Serial.print(",");
204
-
205
- Serial.println(t2[k],4);
206
-
207
- delay(20);
208
-
209
- }
210
-
211
-
212
-
213
- i1=0;
214
-
215
- i2=0;
216
-
217
- i3=0;
218
-
219
- if((micros()-startTime)>40000000){ // 1,000,000micros=1sec 40s
220
-
221
- dataFile.flush();
222
-
223
- dataFile.close();
224
-
225
- Serial.println(F("finished"));
226
-
227
- while(1){
228
-
229
- digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
230
-
231
- delay(5000); // wait for a second
232
-
233
- digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
234
-
235
- delay(5000); // wait for a second
236
-
237
- }
238
-
239
- }
240
-
241
- }
242
-
243
-
244
-
245
- V1a=V2a;
246
-
247
- V1b=V2b;
248
-
249
- V1c=V2c;
250
-
251
- }

1

書式の改善

2021/01/29 13:11

投稿

Yokkii
Yokkii

スコア2

test CHANGED
File without changes
test CHANGED
@@ -18,6 +18,18 @@
18
18
 
19
19
 
20
20
 
21
+ ➀このやり方は可能かどうか
22
+
23
+ ➁どういうプログラムにするか
24
+
25
+ ➂簡単でいいのでプログラムを書いて説明していただきたい
26
+
27
+
28
+
29
+ 可能な範囲でよろしいので回答していただけると幸いです
30
+
31
+
32
+
21
33
 
22
34
 
23
35
  **スケッチ**