UdonLibrary
1.0.0
機械システム研究部 C++ ライブラリ
Toggle main menu visibility
読み取り中…
検索中…
一致する文字列を見つけられません
Parameter.hpp
[詳解]
1
//
2
// SDカードにパラメータを保存するクラス
3
//
4
// Copyright (c) 2023-2023 udonrobo
5
//
6
// デフォルトではparameter.scvというファイルで保存される。読み取りと書き込みは同じファイル
7
// 小数のみ(10桁程度)
8
// 開発環境:Teensy4.1
9
//
10
11
#pragma once
12
13
#if defined(__MK20DX256__) || defined(__MK64FX512__) || defined(__MK66FX1M0__) || defined(__IMXRT1062__)
14
15
# include <SdFat.h>
16
17
namespace
Udon
18
{
19
21
class
Parameter
22
{
23
SdFs sd;
24
FsFile dataFile;
25
int
size;
26
const
char
* name;
27
double
* readData;
28
double
* writeData;
29
bool
Card_Insertion;
30
31
public
:
32
36
Parameter(
int
dataSize,
const
char
* fileName =
"parameter.csv"
)
37
: size(dataSize)
38
, name(fileName)
39
, readData(new double[size]())
40
, writeData(new double[size]())
41
, Card_Insertion(sd.begin(SdioConfig(FIFO_SDIO)))
42
{
43
}
44
48
void
setParameter(
int
dataNum,
double
data)
49
{
50
writeData[dataNum - 1] = data;
51
}
52
54
void
writeParameter()
55
{
56
if
(Card_Insertion)
57
{
58
dataFile.open(name, O_RDWR);
59
dataFile.seek(dataFile.size());
// ファイルの最後に移動
60
for
(
int
i = 0; i < size; i++)
61
{
62
dataFile.print(writeData[i]);
63
dataFile.print(
","
);
64
}
65
dataFile.println();
66
dataFile.close();
67
}
68
}
69
71
void
readParameter()
72
{
73
if
(Card_Insertion)
74
{
75
dataFile.open(name, O_RDWR);
76
String str;
77
while
(dataFile.available())
78
{
79
str = dataFile.readStringUntil(
'\n'
, size * 15);
80
}
81
char
c[size * 15];
82
str.toCharArray(c, size * 15);
83
char
tmp[15];
84
int32_t i = 0, j = 0, k = 0;
85
while
(k < size)
86
{
87
if
(c[i] ==
'\0'
|| c[i] ==
','
)
88
{
89
tmp[j] =
'\0'
;
90
readData[k++] = atof(tmp);
91
j = 0;
92
}
93
else
94
tmp[j++] = c[i];
95
i++;
96
}
97
dataFile.close();
98
}
99
else
100
{
101
for
(
int
i = 0; i < size; i++)
102
readData[i] = 0.0;
103
}
104
}
105
108
double
getParameter(
int
dataNum)
const
109
{
110
return
readData[dataNum - 1];
111
}
112
114
void
readShow(
char
end = {})
const
115
{
116
for
(
int
i = 0; i < size; i++)
117
{
118
Serial.print(readData[i]);
119
Serial.print(
"\t"
);
120
}
121
Serial.print(end);
122
}
123
125
void
writeShow(
char
end = {})
const
126
{
127
for
(
int
i = 0; i < size; i++)
128
{
129
Serial.print(writeData[i]);
130
Serial.print(
"\t"
);
131
}
132
Serial.print(end);
133
}
134
};
135
}
// namespace Udon
136
137
#endif
Udon
Definition
Bit.hpp:12