質問編集履歴

2

回答を実施した際の疑問点

2021/05/09 14:18

投稿

YDTM5
YDTM5

スコア5

test CHANGED
File without changes
test CHANGED
@@ -213,3 +213,261 @@
213
213
  ### 補足情報
214
214
 
215
215
  ・Test_Data型の変数は本来100個ほどあるのですが、見づらくなってしまうので例として4個で記述しました
216
+
217
+
218
+
219
+ ###回答を頂いた例を参考にして
220
+
221
+ ポインタ・列挙体・オペレータを使用する方法を試しましたが、全てやりたかったことが実現できました。
222
+
223
+ が、やりたいことは出来たのですが全ての方法で微妙に差があるためどれが適した方法なのか悩ましいです。
224
+
225
+ 個人的にはオペレータを使用した方法がクラスの使用時にシンプルかと思いましたが、メリット・デメリットありますでしょうか?
226
+
227
+
228
+
229
+ 【TEST.h】
230
+
231
+ ```c
232
+
233
+ #ifndef TEST_H
234
+
235
+ #define TEST_H
236
+
237
+ #include "arduino.h"
238
+
239
+
240
+
241
+ class TEST {
242
+
243
+ public:
244
+
245
+ struct Test_Data {
246
+
247
+ int32_t Val;
248
+
249
+ uint16_t Offset;
250
+
251
+ String Name;
252
+
253
+ };
254
+
255
+
256
+
257
+ //この変数に配列の様にアクセスしたい 例)TestAry[2].Valと記述するとLength.Valにアクセスできる等
258
+
259
+ Test_Data Height; //[0]
260
+
261
+ Test_Data Weight; //[1]
262
+
263
+ Test_Data Length; //[2]
264
+
265
+ Test_Data Position; //[3]
266
+
267
+
268
+
269
+ //ポインタ//////////////////////////////////////////////////
270
+
271
+ Test_Data *DataAry_P[4] = {
272
+
273
+ &Height,
274
+
275
+ &Weight,
276
+
277
+ &Length,
278
+
279
+ &Position
280
+
281
+ };
282
+
283
+
284
+
285
+ //列挙体//////////////////////////////////////////////////
286
+
287
+ enum TestIndex {
288
+
289
+ H_Index,
290
+
291
+ W_Index,
292
+
293
+ L_Index,
294
+
295
+ P_Index
296
+
297
+ };
298
+
299
+
300
+
301
+ Test_Data DataAry_E[sizeof(TestIndex)];
302
+
303
+
304
+
305
+ Test_Data &H(){return DataAry_E[H_Index];}
306
+
307
+ Test_Data &W(){return DataAry_E[W_Index];}
308
+
309
+ Test_Data &L(){return DataAry_E[L_Index];}
310
+
311
+ Test_Data &P(){return DataAry_E[P_Index];}
312
+
313
+
314
+
315
+ //オペレータ//////////////////////////////////////////////////
316
+
317
+ Test_Data& operator[] (uint8_t n) {
318
+
319
+ switch (n) {
320
+
321
+ case 0: return Height;
322
+
323
+ case 1: return Weight;
324
+
325
+ case 2: return Length;
326
+
327
+ case 3: return Position;
328
+
329
+ }
330
+
331
+ };
332
+
333
+
334
+
335
+ bool Test_A;
336
+
337
+ bool Test_B;
338
+
339
+ bool Test_C;
340
+
341
+
342
+
343
+
344
+
345
+ private:
346
+
347
+ };
348
+
349
+ #endif
350
+
351
+ ```
352
+
353
+
354
+
355
+ 【Main.ino】
356
+
357
+ ```c
358
+
359
+ #include "TEST.h"
360
+
361
+ TEST test;
362
+
363
+
364
+
365
+ uint32_t LastTime;
366
+
367
+ uint32_t Cnt;
368
+
369
+
370
+
371
+ void setup() {
372
+
373
+ Serial.begin(9600);
374
+
375
+
376
+
377
+ LastTime = millis();
378
+
379
+ }
380
+
381
+
382
+
383
+ void loop() {
384
+
385
+ if (millis() - LastTime >= 1000) {
386
+
387
+ LastTime = millis();
388
+
389
+ Serial.println(Cnt);
390
+
391
+
392
+
393
+ //オペレータ//////////////////////////////////////////////////
394
+
395
+ test.Height.Val = 1;
396
+
397
+ test.Weight.Val = 2;
398
+
399
+ test.Length.Val = 3;
400
+
401
+ test.Position.Val = 4;
402
+
403
+ Serial.print("Operator:");
404
+
405
+ for (uint8_t i = 0; i <= 3; i++) {
406
+
407
+ Serial.print(test[i].Val);
408
+
409
+ Serial.print(", ");
410
+
411
+ }
412
+
413
+ Serial.println();
414
+
415
+
416
+
417
+ //列挙体//////////////////////////////////////////////////
418
+
419
+ test.H().Val = 100;
420
+
421
+ test.W().Val = 200;
422
+
423
+ test.L().Val = 300;
424
+
425
+ test.P().Val = 400;
426
+
427
+ Serial.print("Enumerate:");
428
+
429
+ for (uint8_t i = 0; i <= 3; i++) {
430
+
431
+ Serial.print(test.DataAry_E[i].Val);
432
+
433
+ Serial.print(", ");
434
+
435
+ }
436
+
437
+ Serial.println();
438
+
439
+
440
+
441
+ //ポインタ//////////////////////////////////////////////////
442
+
443
+ test.DataAry_P[0]->Val = 1000;
444
+
445
+ (*test.DataAry_P[1]).Val = 2000;
446
+
447
+ test.DataAry_P[2]->Val = 3000;
448
+
449
+ test.DataAry_P[3]->Val = 4000;
450
+
451
+ Serial.print("Pointer:");
452
+
453
+ for (uint8_t i = 0; i <= 3; i++) {
454
+
455
+ Serial.print(test.DataAry_P[i]->Val);
456
+
457
+ Serial.print(", ");
458
+
459
+ }
460
+
461
+ Serial.println();
462
+
463
+
464
+
465
+ Serial.println();
466
+
467
+ Cnt++;
468
+
469
+ }
470
+
471
+ }
472
+
473
+ ```

1

タグの追加

2021/05/09 14:18

投稿

YDTM5
YDTM5

スコア5

test CHANGED
File without changes
test CHANGED
File without changes