Go Down

Topic: sd card data logging issues  (Read 203 times) previous topic - next topic

datskunchala

hello everyone I am trying to log data from a microcontroller to uno using uart (stm controller to Arduino UNO ) and I have interfaced the sd card module using spi and the problem I am facing currently is

I am able to create a file on the sd card and write data to it and when I check the sdcard a file is being created with particular size like 4kb or something and when I try to open the file and the see the data logged in it I find no data and the file is almost empty with no data found(at least garbage/unrecognized formats)
 and below you can find my code                                                                   
                                                           thankyou



<code>
#include<SPI.h>
#include<SD.h>
int chipselect = 10;
File file;

void setup() {
  // put your setup code here, to run once:
Serial.begin(115200);
if(!SD.begin(chipselect))
{
  Serial.print("sdcard\n");
  while(1);
}
else
{
  Serial.print(" sdcard present\n");
  }
}

void loop() {
  // put your main code here, to run repeatedly:
  /*serial code*/
  //start
  Serial.print("entered uart code\n");
 
while (Serial.available() == 0);
int val = Serial.read() ;
delay(10);
Serial.write(val);
Serial.print("exiting uart code\n");
//end
delay(40);
/*sdcard code*/
//start

File file = SD.open("STM12.dat",FILE_WRITE);
Serial.print("entered sd card code\n");
//delay(1);
if(file)
//delay(10);
Serial.print("created file\n");
{
  while(file.available())
  Serial.print("file is available for writing\n");
  delay(10);
  file.println(val,DEC);
  delay(10);
  Serial.print("typecasted and wrote the data to file\n");
  delay(10);
  file.close();
  delay(10);
  Serial.print("fileclosed\n");
  delay(10);
  Serial.print("exiting sd code\n");
delay(10);
  Serial.print(file.read());
}
}</code>

datskunchala

<code>/*** MOSI - pin 11
 ** MISO - pin 12
 ** CLK - pin 13
 ** CS - pin 10 */
 /*stm32 boards
  * PA1(RX -STM)-Tx(arduino)
  * PA0(TX -STM)-RX(arduino)
  */














#include<SPI.h>
#include<SD.h>
int chipselect = 10;
File file;

void setup() {
  // put your setup code here, to run once:
Serial.begin(115200);
if(!SD.begin(chipselect))
{
  Serial.print("sdcard\n");
  while(1);
}
else
{
  Serial.print(" sdcard present\n");
  }
}

void loop() {
  // put your main code here, to run repeatedly:
  /*serial code*/
  //start
  Serial.print("entered uart code\n");
 
while (Serial.available() == 0);
int val = Serial.read() ;
delay(10);
Serial.write(val);
Serial.print("exiting uart code\n");
//end
delay(40);
/*sdcard code*/
//start

File file = SD.open("STM12.dat",FILE_WRITE);
Serial.print("entered sd card code\n");
//delay(1);
if(file)
//delay(1);
Serial.print("created file\n");
{
  while(file.available())
  Serial.print("file is available for writing\n");
  delay(1);
  file.println(val,DEC);
  delay(10);
  Serial.print("typecasted and wrote the data to file\n");
  delay(1);
  file.close();
  delay(1);
  Serial.print("fileclosed\n");
  delay(1);
  Serial.print("exiting sd code\n");
  Serial.print(file.read());
}
}</code>

Lucario448

First: here the tags are square brackets [], not actually HTML.

Second: available() is only used when reading. After opening a file with FILE_WRITE, this function will return zero unless the "cursor" is positioned (seek()) anywhere but the end of the file.

Third: attempting to read a closed file will always yield -1 (255 as a byte).

Fourth: read() is for binary/string data. If you want to retrieve a value that is written in ASCII text, then probably you may want to go with parseInt() instead.

Go Up