Amigos preciso de ajuda, pois tenho um código que faz a leitura e medição com mpu6050 no caso uso o giroscópio e preciso guardar esses dados no cartao sd, porém preciso realizar várias leituras. Eu preciso que ao pressionar o botão o cartão salve a primeira leitura e fique assim, por exemplo, coleta_1, ai depois aperto de novo e salva coleta_2 e assim por diante, sempre criando um arquivo novo sem apagar as leituras anteriores. Já pesquisei bastante e tentei várias coisas e por isso estou recorrrendo a esse fórum. O código é
#include <I2Cdev.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include "MPU6050.h"
// Pino ligado ao CS do modulo
const int chipSelect = 4;
//criar um objeto File para manipular um arquivo
File dataFile;
// O endereço do MPU6050 pode ser 0x68 ou 0x69, dependendo
// do estado de AD0. Se não for especificado, 0x68 estará implícito
MPU6050 sensor;
// Valores RAW (não processados) do acelerômetro e giroscópio nos eixos x,y,z
int ax, ay, az;
int gx, gy, gz;
long tempo_prev;
float dt;
float ang_x, ang_y, ang_z;
float ang_x_prev, ang_y_prev, ang_z_prev;
void setup() {
Serial.begin(115200); //Iniciando porta serial
Wire.begin(); //Iniciando I2C
sensor.initialize(); //Iniciando o sensor
if (sensor.testConnection()){
Serial.println("Sensor iniciado correctamente");
}
else {
Serial.println("Erro ao iniciar o sensor");
}
Serial.println("Inicializando cartao SD...");
//Inicia a comunicacao com o modulo SD
if (!SD.begin(chipSelect))
{
Serial.println("Falha ao acessar o cartao !");
Serial.println("Verifique o cartao/conexoes e reinicie o Arduino...");
return;
}
Serial.println("Cartao iniciado corretamente !");
}
void loop(){
//Abre o arquivo coleta.txt
dataFile = SD.open("coleta.txt", FILE_WRITE);
// Ler as aceleracões e velocidades angulares
sensor.getAcceleration(&ax, &ay, &az);
sensor.getRotation(&gx, &gy, &gz);
dt = (millis()-tempo_prev)/1000.0;
tempo_prev=millis();
//Calcular os ângulos com acelerômetro
float accel_ang_x=atan(ay/sqrt(pow(ax,2) + pow(az,2)))*(180.0/3.14);
float accel_ang_y=atan(-ax/sqrt(pow(ay,2) + pow(az,2)))*(180.0/3.14);
float accel_ang_z=atan((sqrt(pow(ax,2)+pow(ay,2)))/az)*(180.0/3.14);
//Calcular ângulo de rotação com giroscopio e filtro complementar
ang_x = 0.98*(ang_x_prev+(gx/131)*dt) + 0.02*accel_ang_x;
ang_y = 0.98*(ang_y_prev+(gy/131)*dt) + 0.02*accel_ang_y;
ang_z = 0.98*(ang_z_prev+(gz/131)*dt) + 0.02*accel_ang_z;
ang_x_prev=ang_x;
ang_y_prev=ang_y;
ang_z_prev=ang_z;
/*
ang_x=ang_x*250.0/32768.0;
ang_y=ang_y*250.0/32768.0;
ang_z=ang_z*250.0/32768.0;
*/
//Mostrar os angulos separadas
//Serial.print("Rotação em X: ");
Serial.print(ang_x); Serial.print("\t");
Serial.print("\t");
//Serial.print("Rotação em Y: ");
Serial.print(ang_y); Serial.print("\t");
Serial.print("\t");
//Serial.print("Rotação em z: ");
Serial.print(ang_z); //Serial.print("\t");
//Serial.println(tempo);
Serial.print("\r\n");
if (dataFile){
//dataFile.print("Rotação em X: ");
dataFile.print(ang_x); Serial.print("\t");
dataFile.print("\t");
//dataFile.print("Rotação em Y: ");
dataFile.print(ang_y); Serial.print("\t");
dataFile.print("\t");
//dataFile.print("Rotação em z: ");
dataFile.print(ang_z); //dataFile.print("\t");
//dataFile.println(tempo);
dataFile.print("\r\n");
//Fecha o arquivo
dataFile.close();
}
//Exibe um erro se não conseguir abrir o arquivo
else
{
Serial.println("Erro ao abrir o arquivo coleta.txt");
}
delay(1);
}
Leia com atenção o tópico para novos usuários do fórum. How to get the best out of this forum
Como está em inglês, se tiver dificuldade use o tradutor do google.
Para que possamos ajuda-lo, post seu código, mas não esqueça que ao postar use as tags </>.
Ao usar SD em "Arduino" somente poderá usar nomes de arquivo com 8 dígitos, então no seu projeto você poderia usar de coleta_0 até coleta_9, pois a partir de 9 o nome do arquivo teria mais que 8 dígitos.
pq ainda não consegui incrementar, nesse código ele apenas salva simples quando ligo o arduino e faço a medição com mpu6050. Eu preciso de ajuda pra criar a lógica do botão
Testei aqui o que acontece, quando o botao tá em nível lógico baixo o código gráva cada loop que o código faz, ou seja, ele tá gravando uma linha em cada arquivo e não a leitura completa em cada arquivo. Era pra guardar os dados de uma leitura completa, assim se eu to fazendo uma medição e por exemplo durou tantos segundos o arquivo vai ser cole_1 ai quando a perto de novo começa a gravar o segundo arquivo cole_2 e assim por diante
Bom dia, olá!
Deixa eu explicar melhor. Esse projeto vai medir o tremor de motor e preciso guardar os dados apertando num botão. Por exemplo, o motor está rodando e quero gravar a leitura de tremor ai aperto o botão e depois preciso parar de gravar entao aperto outro. E cada nova leitura ele vai mudar o nome do arquivo: coleta_1, coleta_2,coleta_3, pra que eu não precise estar tirando o cartão de memória para passar pro computador e depois realizar nova coleta, ou seja, posso fazer dezenas de leituras num mesmo cartão sem sobreescrever
OPA, boa noite!
Cara, montei cirvuito como esse e não funcionou do jeito q eu esperava. Nessa imagem está a leitura, na segunda imagem é quando aperto no botão. Observe que quando aperto no botão ele salva apenas uma linha, preciso q salve toda leitura até onde eu apertar e ele encerrar a gravação e se preparar pra proxima