First let me start by saying "long time listener, first time caller" I am trying to learn C and write good Code, easily understood and modular. With modular testing in mind I am trying to build a simple function I can use in a larger program to log time and temperature to a SD card. So with that in mind I want create a file, and then write to that file logging time and temperature every minute. At this point I have updated the firmware of OpenLog and have it doing the test sketch, I have written a simple sketch myself to write data to the card. I have not been able to create a file or add to it. Here is my code, I have tried to keep it really simple you can see what didn't work commented out.
Thank you in advance for looking at this.
/*
Arduino TX to OpenLog RXI
Arduino 5V to OpenLog VCC
Arduino GND to OpenLog GND
A simple test sketch to show writing to a file
*/
#include <SoftwareSerial.h>
#include <SdFat.h>
SdFile file;
int ledPin = 13; //Status LED connected to digital pin 13
int i =0; // declare i an integer
SdFat sd;
SdFile myFile;
void setup()
{ //beginning void setup
pinMode(ledPin, OUTPUT); // set the Pin to output
Serial.begin(9600); //Serial.begin(9600); //9600bps is default for OpenLog
delay(1000); //Wait a second for OpenLog to init
//Works with Arduino v1.0 This section does not work at all
// Serial.print(26);
// Serial.print(26);
// Serial.print(26);
// new myFile;
// myFile.open("AAAATEST.TXT");
for(int i = 1 ; i < 10 ; i++){ // beginning for loop
Serial.print(i); // prints the number of the loop
Serial.println("Excellent First Test"); // junk line for something to print and test
} // end for loop
}// end void setup
void loop()
{// beginning void loop
}// end void loop
Well actually the code does work, it prints the 1-9 for loop, so sorry for my ignorance but I didn't see any ititilization in the OpenLog setup sketch and so didn't include any. Suggestions for code I will happily work in, compile and test.
Hi, I am having the same problem, I bought the openlog and I haven’t been able to use it. First how do we connect it to arduino Uno so that I can make it to create a csv file and then every 3 or 4 minutes add the data from some sensors to the file? I have searched the web but I haven’t found a solution. I have an example from Tutorial 11 for Arduino: SD Cards and Datalogging – JeremyBlum.com but he is using SPI connection.
//Program by Jeremy Blum
//www.jeremyblum.com
//SD Card Demonstration
//Some code from public domain work by Tom Igoe
#include <SD.h> //SD Card Library
#include <Wire.h> //I2C Library
//SPI SD Card Pins
//MOSI = Pin 11
//MISO = Pin 12
//SCLK = PIN 13
int CS_pin = 10;
int pow_pin = 8;
//I2C Temperature Pins
//SDA = Analog Pin 4
//SCL = Analog Pin 5
//IR Distance Sensor Pins
int IR1_pin = 2;
int IR2_pin = 3;
//Light Sensor Pins
int light_pin = 1;
float refresh_rate = 0.0; //Dataloger Refresh Rate
int temp_address = 72; //Address of the I2C Temp Sensor
long id = 1; //Use this to store the id # of our reading.
void setup()
{
Wire.begin();
Serial.begin(9600);
Serial.println("Initializing Card");
//CS Pin is an output
pinMode(CS_pin, OUTPUT);
//SD Card will Draw Power from Pin 8, so set it high
pinMode(pow_pin, OUTPUT);
digitalWrite(pow_pin, HIGH);
//Initialize Card
if (!SD.begin(CS_pin))
{
Serial.println("Card Failure");
return;
}
Serial.println("Card Ready");
//Read the Configuration information (COMMANDS.txt)
File commandFile = SD.open("COMMANDS.txt");
if (commandFile)
{
Serial.println("Reading Command File");
float decade = pow(10, (commandFile.available() - 1));
while(commandFile.available())
{
float temp = (commandFile.read() - '0');
refresh_rate = temp*decade+refresh_rate;
decade = decade/10;
}
Serial.print("Refresh Rate = ");
Serial.print(refresh_rate);
Serial.println("ms");
commandFile.close();
}
else
{
Serial.println("Could not read command file.");
return;
}
//Write Log File Header
File logFile = SD.open("LOG.csv", FILE_WRITE);
if (logFile)
{
logFile.println(", , , ,"); //Just a leading blank line, incase there was previous data
String header = "ID, Light, Temp, IR1, IR2";
logFile.println(header);
logFile.close();
Serial.println(header);
}
else
{
Serial.println("Couldn't open log file");
}
}
void loop()
{
//Check Light Level
int light_level = analogRead(light_pin);
//Read Temperature
Wire.beginTransmission(temp_address); //Start talking
Wire.send(0); //Ask for Register zero
Wire.endTransmission(); //Complete Transmission
Wire.requestFrom(temp_address, 1); //Request 1 Byte
while(Wire.available() == 0); //wait for response
int temp_c = Wire.receive(); // Get the temp
int temp_f = round(temp_c*9.0/5.0 +32.0); //Convert to stupid American units
//Read Distances
int IR1_val = analogRead(IR1_pin);
int IR2_val = analogRead(IR2_pin);
//Create Data string for storing to SD card
//We will use CSV Format
String dataString = String(id) + ", " + String(light_level) + ", " + String(temp_f) + ", " + String(IR1_val) + ", " + String(IR2_val);
//Open a file to write to
//Only one file can be open at a time
File logFile = SD.open("LOG.csv", FILE_WRITE);
if (logFile)
{
logFile.println(dataString);
logFile.close();
Serial.println(dataString);
}
else
{
Serial.println("Couldn't open log file");
}
//Increment ID number
id++;
delay(refresh_rate);
}
can you help me please or point me something to read about it?