質問編集履歴
2
回答を実施した際の疑問点
title
CHANGED
File without changes
|
body
CHANGED
@@ -105,4 +105,133 @@
|
|
105
105
|
}
|
106
106
|
```
|
107
107
|
### 補足情報
|
108
|
-
・Test_Data型の変数は本来100個ほどあるのですが、見づらくなってしまうので例として4個で記述しました
|
108
|
+
・Test_Data型の変数は本来100個ほどあるのですが、見づらくなってしまうので例として4個で記述しました
|
109
|
+
|
110
|
+
###回答を頂いた例を参考にして
|
111
|
+
ポインタ・列挙体・オペレータを使用する方法を試しましたが、全てやりたかったことが実現できました。
|
112
|
+
が、やりたいことは出来たのですが全ての方法で微妙に差があるためどれが適した方法なのか悩ましいです。
|
113
|
+
個人的にはオペレータを使用した方法がクラスの使用時にシンプルかと思いましたが、メリット・デメリットありますでしょうか?
|
114
|
+
|
115
|
+
【TEST.h】
|
116
|
+
```c
|
117
|
+
#ifndef TEST_H
|
118
|
+
#define TEST_H
|
119
|
+
#include "arduino.h"
|
120
|
+
|
121
|
+
class TEST {
|
122
|
+
public:
|
123
|
+
struct Test_Data {
|
124
|
+
int32_t Val;
|
125
|
+
uint16_t Offset;
|
126
|
+
String Name;
|
127
|
+
};
|
128
|
+
|
129
|
+
//この変数に配列の様にアクセスしたい 例)TestAry[2].Valと記述するとLength.Valにアクセスできる等
|
130
|
+
Test_Data Height; //[0]
|
131
|
+
Test_Data Weight; //[1]
|
132
|
+
Test_Data Length; //[2]
|
133
|
+
Test_Data Position; //[3]
|
134
|
+
|
135
|
+
//ポインタ//////////////////////////////////////////////////
|
136
|
+
Test_Data *DataAry_P[4] = {
|
137
|
+
&Height,
|
138
|
+
&Weight,
|
139
|
+
&Length,
|
140
|
+
&Position
|
141
|
+
};
|
142
|
+
|
143
|
+
//列挙体//////////////////////////////////////////////////
|
144
|
+
enum TestIndex {
|
145
|
+
H_Index,
|
146
|
+
W_Index,
|
147
|
+
L_Index,
|
148
|
+
P_Index
|
149
|
+
};
|
150
|
+
|
151
|
+
Test_Data DataAry_E[sizeof(TestIndex)];
|
152
|
+
|
153
|
+
Test_Data &H(){return DataAry_E[H_Index];}
|
154
|
+
Test_Data &W(){return DataAry_E[W_Index];}
|
155
|
+
Test_Data &L(){return DataAry_E[L_Index];}
|
156
|
+
Test_Data &P(){return DataAry_E[P_Index];}
|
157
|
+
|
158
|
+
//オペレータ//////////////////////////////////////////////////
|
159
|
+
Test_Data& operator[] (uint8_t n) {
|
160
|
+
switch (n) {
|
161
|
+
case 0: return Height;
|
162
|
+
case 1: return Weight;
|
163
|
+
case 2: return Length;
|
164
|
+
case 3: return Position;
|
165
|
+
}
|
166
|
+
};
|
167
|
+
|
168
|
+
bool Test_A;
|
169
|
+
bool Test_B;
|
170
|
+
bool Test_C;
|
171
|
+
|
172
|
+
|
173
|
+
private:
|
174
|
+
};
|
175
|
+
#endif
|
176
|
+
```
|
177
|
+
|
178
|
+
【Main.ino】
|
179
|
+
```c
|
180
|
+
#include "TEST.h"
|
181
|
+
TEST test;
|
182
|
+
|
183
|
+
uint32_t LastTime;
|
184
|
+
uint32_t Cnt;
|
185
|
+
|
186
|
+
void setup() {
|
187
|
+
Serial.begin(9600);
|
188
|
+
|
189
|
+
LastTime = millis();
|
190
|
+
}
|
191
|
+
|
192
|
+
void loop() {
|
193
|
+
if (millis() - LastTime >= 1000) {
|
194
|
+
LastTime = millis();
|
195
|
+
Serial.println(Cnt);
|
196
|
+
|
197
|
+
//オペレータ//////////////////////////////////////////////////
|
198
|
+
test.Height.Val = 1;
|
199
|
+
test.Weight.Val = 2;
|
200
|
+
test.Length.Val = 3;
|
201
|
+
test.Position.Val = 4;
|
202
|
+
Serial.print("Operator:");
|
203
|
+
for (uint8_t i = 0; i <= 3; i++) {
|
204
|
+
Serial.print(test[i].Val);
|
205
|
+
Serial.print(", ");
|
206
|
+
}
|
207
|
+
Serial.println();
|
208
|
+
|
209
|
+
//列挙体//////////////////////////////////////////////////
|
210
|
+
test.H().Val = 100;
|
211
|
+
test.W().Val = 200;
|
212
|
+
test.L().Val = 300;
|
213
|
+
test.P().Val = 400;
|
214
|
+
Serial.print("Enumerate:");
|
215
|
+
for (uint8_t i = 0; i <= 3; i++) {
|
216
|
+
Serial.print(test.DataAry_E[i].Val);
|
217
|
+
Serial.print(", ");
|
218
|
+
}
|
219
|
+
Serial.println();
|
220
|
+
|
221
|
+
//ポインタ//////////////////////////////////////////////////
|
222
|
+
test.DataAry_P[0]->Val = 1000;
|
223
|
+
(*test.DataAry_P[1]).Val = 2000;
|
224
|
+
test.DataAry_P[2]->Val = 3000;
|
225
|
+
test.DataAry_P[3]->Val = 4000;
|
226
|
+
Serial.print("Pointer:");
|
227
|
+
for (uint8_t i = 0; i <= 3; i++) {
|
228
|
+
Serial.print(test.DataAry_P[i]->Val);
|
229
|
+
Serial.print(", ");
|
230
|
+
}
|
231
|
+
Serial.println();
|
232
|
+
|
233
|
+
Serial.println();
|
234
|
+
Cnt++;
|
235
|
+
}
|
236
|
+
}
|
237
|
+
```
|
1
タグの追加
title
CHANGED
File without changes
|
body
CHANGED
File without changes
|