UdonLibrary 1.0.0
機械システム研究部 C++ ライブラリ
読み取り中…
検索中…
一致する文字列を見つけられません
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
17namespace 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
Definition Bit.hpp:12