-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSDrec.ino
130 lines (112 loc) · 3.28 KB
/
SDrec.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#include <SPI.h>
#include <SD.h>
#include <Vector.h>
/*pinos SPI para o uno
** MOSI - pin 11
** MISO - pin 12
** CLK - pin 13
*/
const int sd_cs = 10;
bool err;
class Recorder{
private:
const int numArq = 2;
static char *nomes[];
File dataWrite;
File dataRead;
Vector<int> archiveStatus;//marca qual arquivo está sendo usado(1-leitura,2-escrita)
String data;//teste
void dataTreat(){
}//trata os dados brutos obtidos dos sensores para obter os valores que serão guardados no cartão sd
public:
void init(){
if (!SD.begin(sd_cs)) {
Serial.println("Card failed, or not present");
return;
}
Serial.println("card initialized.");//inicialização do sd
for(int i=0; i<numArq; i++){
archiveStatus.push_back(0);
}
}//construtor para ser chamado no setup cria e inicializa o Recorder
void rawDataGet(){
Serial.println("digite um dado");
while(!Serial.available()){
;
}
data = Serial.readString();//teste
//dataTreat(); no momento é desnecessauro
}//coleta os dados dos sensores
void data_sd_record(){
if(!dataWrite)Serial.println("cade o meu arquivo?");
dataWrite.print(data);
Serial.println("recorded");
Serial.println(data);
dataWrite.flush();
}//grava os dados no arquivo selecionado
void data_sd_read(){
dataRead.seek(0);
String temp = dataRead.readString();
Serial.println("ok");
while(temp != NULL){
Serial.println(temp);
temp = dataRead.readString();
Serial.println("read");
}
Serial.println("fim do arquivo");
}//le os dados do arquivo selecionado
void clearFile(int num){
File aux;
SD.remove(nomes[num]);//exclui o arquivo
aux = SD.open(nomes[num]);//recria o arquivo, mas em branco
aux.close();
}//deleta o arquivo num
void dataClear(){
File aux;
for(int i = 0; i<numArq; i++){
SD.remove(nomes[i]);//exclui o arquivo
aux = SD.open(nomes[i]);//recria o arquivo, mas em branco
aux.close();
}
}//limpa os dados gravados no cartão sd
bool setFileR(int num){
if (archiveStatus[num]) return 1;
dataRead.close();
dataRead = SD.open(nomes[num],FILE_READ);
for(int i=0;i<numArq;i++){
if(archiveStatus[i] == 1)archiveStatus[i] = 0;
}
archiveStatus[num] = 1;
return 0;
}//seleciona o arquivo de leitura
//retorna 1 caso o arquivo já esteja aberto como escrita
//ou 0 se foi bem sucedido
bool setFileW(int num){
if (archiveStatus[num]) return 1;
dataWrite.close();
dataWrite = SD.open(nomes[num],FILE_WRITE);
for(int i=0;i<numArq;i++){
if(archiveStatus[i] == 2)archiveStatus[i] = 0;
}
archiveStatus[num] = 2;
return 0;
}//seleciona o arquivo de escrita
//retorna 1 caso o arquivo já esteja aberto como leitura
//ou 0 se foi bem sucedido
void closeR(){
dataRead.close();
for(int i=0;i<numArq;i++){
if(archiveStatus[i] == 1)archiveStatus[i] = 0;
}
}//fecha o arquivo de leitura
void closeW(){
dataWrite.close();
for(int i=0;i<numArq;i++){
if(archiveStatus[i] == 2)archiveStatus[i] = 0;
}
}//fecha o arquivo de escrita
};//classe que grava no SD
char* Recorder::nomes[]={"dados/a.txt","dados/b.txt"};
//nomes dos arquivos que serão editados
//as pastas ja devem estar criadas, os arquivos não necessáriamente
Recorder rec;