Ir ao conteúdo

Posts recomendados

Postado

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
Postado

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
  • Membro VIP
Postado

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.

  • Membro VIP
Postado

... 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...🤪

 

  • Membro VIP
Postado

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
Postado

Eu sou imensamente grato de verdade pela disponibilidade me ajudar, as vezes na correria esqueço, mas sou agradecido mesmo. Vou testar amanhã e falo pra você

  • Curtir 1
  • Obrigado 1
  • 2 semanas depois...
Postado

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á

  • Membro VIP
Postado
Em 05/06/2022 às 11:01, Jackson10 disse:

não deu muito certo infelizmente. 

 

Em 22/05/2022 às 09:25, .if disse:

mostra o que fizeste

...

 

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!