質問編集履歴

3

意見をいただき、試したこと

2020/09/15 12:59

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -219,3 +219,227 @@
219
219
  スケッチの改善点あれば教えていただきたいです
220
220
 
221
221
  よろしくお願いします
222
+
223
+
224
+
225
+ ご意見を頂き、ファイル内容を配列に格納してみるやり方でやってみました。まだ動作を見た感じ、最後の値のみでしか回転させていなかったです。
226
+
227
+ ```
228
+
229
+ #include<SD.h>
230
+
231
+ #include<SPI.h>
232
+
233
+
234
+
235
+ int APHASE=2; //AIN1へ接続
236
+
237
+ int AENBL=3; //AIN2へ接続
238
+
239
+ int BPHASE=6; //BIN1へ接続
240
+
241
+ int BENBL=7; //BIN2へ接続
242
+
243
+ volatile int count=0; //LED用のカウンター
244
+
245
+ volatile int RotCounter=0; //現在の回転角(0,1,2,3)
246
+
247
+ volatile int TimeDivCounter=0; //割り込みのカウンター用
248
+
249
+ volatile int datacount=0; //データ用のカウンター
250
+
251
+ volatile int num[5];
252
+
253
+
254
+
255
+ ISR(TIMER1_COMPA_vect){ //1ms(0.001s)で読みだす
256
+
257
+ //18度回転の処理
258
+
259
+ int i=0;
260
+
261
+ if(TimeDivCounter==0){//==のあとの数字はSDの値
262
+
263
+ switch(RotCounter){
264
+
265
+ case 0:
266
+
267
+ digitalWrite(APHASE, LOW);
268
+
269
+ digitalWrite(AENBL, HIGH);
270
+
271
+ digitalWrite(BPHASE, LOW);
272
+
273
+ digitalWrite(BENBL, HIGH);
274
+
275
+ break;
276
+
277
+ case 1:
278
+
279
+ digitalWrite(APHASE, HIGH);
280
+
281
+ digitalWrite(AENBL, HIGH);
282
+
283
+ digitalWrite(BPHASE, LOW);
284
+
285
+ digitalWrite(BENBL, HIGH);
286
+
287
+ break;
288
+
289
+ case 2:
290
+
291
+ digitalWrite(APHASE, HIGH);
292
+
293
+ digitalWrite(AENBL, HIGH);
294
+
295
+ digitalWrite(BPHASE, HIGH);
296
+
297
+ digitalWrite(BENBL, HIGH);
298
+
299
+ break;
300
+
301
+ case 3:
302
+
303
+ digitalWrite(APHASE, LOW);
304
+
305
+ digitalWrite(AENBL, HIGH);
306
+
307
+ digitalWrite(BPHASE, HIGH);
308
+
309
+ digitalWrite(BENBL, HIGH);
310
+
311
+ break;
312
+
313
+ }
314
+
315
+ RotCounter++;
316
+
317
+
318
+
319
+ if(RotCounter>=4){
320
+
321
+ RotCounter=0;
322
+
323
+ }
324
+
325
+ TimeDivCounter=0;
326
+
327
+ i++;
328
+
329
+ if(i>=6){
330
+
331
+ i=5;
332
+
333
+ }
334
+
335
+ }else{
336
+
337
+ TimeDivCounter++;
338
+
339
+ }
340
+
341
+ }
342
+
343
+
344
+
345
+ void setup() {
346
+
347
+ pinMode(APHASE,OUTPUT);
348
+
349
+ pinMode(AENBL,OUTPUT);
350
+
351
+ pinMode(BPHASE,OUTPUT);
352
+
353
+ pinMode(BENBL,OUTPUT);
354
+
355
+ digitalWrite(AENBL,HIGH);
356
+
357
+ digitalWrite(BENBL,HIGH);
358
+
359
+
360
+
361
+ Serial.begin(9600);
362
+
363
+ while (!Serial) {
364
+
365
+ ;
366
+
367
+ }
368
+
369
+ Serial.println("SDカードの初期化");
370
+
371
+
372
+
373
+ if (!SD.begin(4)) {
374
+
375
+ Serial.println("初期化に失敗");
376
+
377
+ while(1);
378
+
379
+ }
380
+
381
+ Serial.println("初期化完了");
382
+
383
+
384
+
385
+ File dataFile = SD.open("data.txt");
386
+
387
+ if(dataFile){
388
+
389
+ char s;
390
+
391
+ String d;
392
+
393
+ int i=0;
394
+
395
+ while(dataFile.available()){
396
+
397
+ s=dataFile.read();
398
+
399
+ if(s=='\r'){//もし改行が来たら
400
+
401
+ d.trim(); //空白文字を取り除く
402
+
403
+ num[i]=d.toInt(); //整数に変換
404
+
405
+ Serial.println(num[i]);
406
+
407
+ i++;
408
+
409
+ d="";
410
+
411
+ }else{
412
+
413
+ d+=s;
414
+
415
+ }
416
+
417
+ }
418
+
419
+ dataFile.close();
420
+
421
+ }else{
422
+
423
+ Serial.println(F("error opening data.txt"));
424
+
425
+ }
426
+
427
+
428
+
429
+ TCCR1A = 0b00000010;
430
+
431
+ TCCR1B = 0b00000011;
432
+
433
+ TIMSK1 = 0b00000010;
434
+
435
+ OCR1A = 24;
436
+
437
+ }
438
+
439
+
440
+
441
+ void loop(){
442
+
443
+ }
444
+
445
+ ```

2

2020/09/15 12:59

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,208 @@
1
+ ```
2
+
3
+ #include<SD.h>
4
+
5
+ #include<SPI.h>
6
+
7
+
8
+
9
+ int APHASE=2;
10
+
11
+ int AENBL=3;
12
+
13
+ int BPHASE=6;
14
+
15
+ int BENBL=7;
16
+
17
+ volatile int count=0; //LED用のカウンター
18
+
19
+ volatile int RotCounter=0; //現在の回転角(0,1,2,3)
20
+
21
+ volatile int TimeDivCounter=0; //割り込みのカウンター用
22
+
1
- https://writening.net/page?Z7GaGU
23
+ volatile int datacount=0; //データ用のカウンター
24
+
25
+ volatile int val;
26
+
27
+
28
+
29
+ ISR(TIMER1_COMPA_vect){ //1ms(0.001s)で読みだす
30
+
31
+ //18度回転の処理
32
+
33
+ if(TimeDivCounter==val){//==のあとの数字はSDの値
34
+
35
+ switch(RotCounter){
36
+
37
+ case 0:
38
+
39
+ digitalWrite(APHASE, LOW);
40
+
41
+ digitalWrite(AENBL, HIGH);
42
+
43
+ digitalWrite(BPHASE, LOW);
44
+
45
+ digitalWrite(BENBL, HIGH);
46
+
47
+ break;
48
+
49
+ case 1:
50
+
51
+ digitalWrite(APHASE, HIGH);
52
+
53
+ digitalWrite(AENBL, HIGH);
54
+
55
+ digitalWrite(BPHASE, LOW);
56
+
57
+ digitalWrite(BENBL, HIGH);
58
+
59
+ break;
60
+
61
+ case 2:
62
+
63
+ digitalWrite(APHASE, HIGH);
64
+
65
+ digitalWrite(AENBL, HIGH);
66
+
67
+ digitalWrite(BPHASE, HIGH);
68
+
69
+ digitalWrite(BENBL, HIGH);
70
+
71
+ break;
72
+
73
+ case 3:
74
+
75
+ digitalWrite(APHASE, LOW);
76
+
77
+ digitalWrite(AENBL, HIGH);
78
+
79
+ digitalWrite(BPHASE, HIGH);
80
+
81
+ digitalWrite(BENBL, HIGH);
82
+
83
+ break;
84
+
85
+ }
86
+
87
+ RotCounter++;
88
+
89
+
90
+
91
+ if(RotCounter>=4){
92
+
93
+ RotCounter=0;
94
+
95
+ }
96
+
97
+ TimeDivCounter=0;
98
+
99
+ }else{
100
+
101
+ TimeDivCounter++;
102
+
103
+ }
104
+
105
+ }
106
+
107
+
108
+
109
+ void setup() {
110
+
111
+ pinMode(APHASE,OUTPUT);
112
+
113
+ pinMode(AENBL,OUTPUT);
114
+
115
+ pinMode(BPHASE,OUTPUT);
116
+
117
+ pinMode(BENBL,OUTPUT);
118
+
119
+ digitalWrite(AENBL,HIGH);
120
+
121
+ digitalWrite(BENBL,HIGH);
122
+
123
+
124
+
125
+ Serial.begin(9600);
126
+
127
+ while (!Serial) {
128
+
129
+ ;
130
+
131
+ }
132
+
133
+ Serial.println("SDカードの初期化");
134
+
135
+
136
+
137
+ if (!SD.begin(4)) {
138
+
139
+ Serial.println("初期化に失敗");
140
+
141
+ while(1);
142
+
143
+ }
144
+
145
+ Serial.println("初期化完了");
146
+
147
+
148
+
149
+ File dataFile = SD.open("data.txt");
150
+
151
+ if(dataFile){
152
+
153
+ char buffer[65];
154
+
155
+ while(dataFile.available()){
156
+
157
+ int length=dataFile.available();
158
+
159
+ if(length>64){
160
+
161
+ length=64;
162
+
163
+ }
164
+
165
+ dataFile.read(buffer,length);
166
+
167
+ buffer[length]='\0';
168
+
169
+ Serial.write(buffer,length);
170
+
171
+ val=atoi(buffer);
172
+
173
+ }
174
+
175
+ dataFile.close();
176
+
177
+ }else{
178
+
179
+ Serial.println(F("error opening data.txt"));
180
+
181
+ }
182
+
183
+
184
+
185
+ DDRB=0b00000100;
186
+
187
+ TCCR1A = 0b00000010;
188
+
189
+ TCCR1B = 0b00000011;
190
+
191
+ TIMSK1 = 0b00000010;
192
+
193
+ OCR1A = 249;
194
+
195
+ }
196
+
197
+
198
+
199
+ void loop(){
200
+
201
+ }
202
+
203
+
204
+
205
+ ```
2
206
 
3
207
 
4
208
 

1

実際の動きの修正

2020/09/14 12:16

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -6,11 +6,11 @@
6
6
 
7
7
  今SDカードにあるファイルには1行ずつ値が入っており、その値を割り込み関数内にあるvalに代入してモータを回転させたいです。
8
8
 
9
- ファイルには1500,500,2500...と1行ずつ入っていてvalに代入されるとそれぞれ1.5s,0.5s,2.5s...おきにモーターを回転させます。今の動きというのがマーでおおよそで測りました、3sに回転しているのです。
9
+ ファイルには1500,2500,500...と1行ずつ入っていてvalに代入されるとそれぞれ1.5s,2.5s,0.5s...おきにモーターを回転させます。今の動きというのがファルにある最後の数1500valに入って1.5sおきに回転してします。
10
10
 
11
11
 
12
12
 
13
- setup内に書かれている、ファイルの読み取りコードこれ1行ずつ値入れられてないのしょうか?
13
+ setup内に書かれている、ファイルの読み取りコードこれ1行ずつvalに値入れその都度回せるようにしたいです。
14
14
 
15
15
  スケッチの改善点あれば教えていただきたいです
16
16