Ir ao conteúdo
  • Cadastre-se

Arduino Criar vários arquivos de dados guardados no cartão de SD no arduino


Posts recomendados

Pessoal preciso de ajuda num código arduino. Meu código realiza leitura e medição com o MPU6050, no caso uso o giroscópio, porém preciso armazenar os dados no cartão de memória, até ai sei fazer. A dificuldade é realizar guardar vários arquivos a quando pressionar um botão, exemplo: realizou uma leitura pressiono um botão e ele guardar os dados tipo coleta_1, depois leio outro dado e aperto ai cria coleta_2 e assim por diante, tudo isso porque preciso dessas coletas sem apagar as anteriores. Peço ajuda já olhei aqui no fórum e não achei nada a respeito.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Esse é o código,  ele tem um filtro complementar e salva no cartão SD sempre que ligo o arduino, preciso que ele grave arquivos diferentes apertando algum botão

// Librerias I2C para controlar el mpu6050
// la libreria MPU6050.h necesita I2Cdev.h, I2Cdev.h necesita Wire.h
#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);
}

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

ok...

O lance é você incrementar uma variável e somá-la ... concatená-la (strcat) a cada clique do botão ao nome do arquivo a ser gravado

Num insight rápido bem como numa googlada rápida, o termo inttostr me levou a

https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/

 

Penso que algo como:

int n;
String thisString = String(n);
n++;

você pode concatenar thisString no nome do arquivo coleta e vai de coleta0, coleta1, coleta2... a cada apertada no botão. Concatene também ".txt".

Obs: nunca precisei fazer isso e não uso arduino portando é só conceito e não detalho.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

... de fato numa pesquisada pra você , o compilador arduino mastiga tudo.

https://docs.arduino.cc/built-in-examples/strings/StringAdditionOperator

A princípio basta somar .. algo como...

int n;
//...
String coleta="coleta_" + n + ".txt";
dataFile = SD.open(coleta, FILE_WRITE);
n++;
//...

testa e me conta. Quero saber se minha intuição de 2ª está a funcionar...🤪

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

1ª mente.. de nada 😑

char n=0;
void loop(){  
//...
String coleta="coleta_" + n + String(".txt");
//Serial.println(coleta);
n++;
//... 
 
}

Testa de novo ,... de nada de novo 😐 ...  e olha de novo em...

https://docs.arduino.cc/built-in-examples/strings/StringAdditionOperator

😒

 

 sabia...

Em 25/05/2022 às 20:58, Jackson10 disse:

Vou testar amanhã e falo pra você

 

  • Haha 1
Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Bom dia amigo, não deu muito certo infelizmente.  O projeto que preciso seria assim:
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. 

Grato desde já

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...