Basic SD Card Reader:
// Write to SD card
#include <SD.h>
//Set by default for the SD library
//MOSI = pin 11
//MISO = pin 12
//SCLK = pin 13
//We alwasy need to set the CS Pin
const int CS_PIN = 10;
void setup() {
Serial.begin(9600);
Serial.println("Initializing Card");
//CS pin is an output
pinMode(CS_PIN, OUTPUT);
if (!SD.begin(CS_PIN))
{
Serial.println("Card failure");
return;
}
Serial.println("Card Ready");
}
void loop() {
long timeStamp = millis();
String dataString = "Hello There!";
//Open a file and write to it.
File dataFile = SD.open("Sensor1.csv", FILE_WRITE);
if (dataFile)
{
dataFile.print(timeStamp);
dataFile.print(",");
dataFile.println(dataString);
dataFile.close(); //Data isnt actually written until we close the connection!
//Print same thing to the screen for debugging
Serial.print(timeStamp);
Serial.print(",");
Serial.println(dataString);
}
else
{
Serial.print("Couldn't open log file");
}
delay(5000);
}
SD Card Reader with Command File:
//SD read and write
#include <SD.h>
//Set by default for the SD card library
const int CS_PIN = 10;
const int POW_PIN = 8;
//Default rate of 5 seconds
int refresh_rate = 5000;
void setup() {
Serial.begin(9600);
Serial.println("Initializing Card");
//CS pin is an output
pinMode(CS_PIN, OUTPUT);
digitalWrite(POW_PIN, HIGH);
if (!SD.begin(CS_PIN))
{
Serial.println("Card Failure");
return;
}
Serial.println("Card Ready");
//Read the configuration info (speed.txt)
File commandFile = SD.open("speed.txt");
if (commandFile)
{
Serial.println("Reading Command File");
while(commandFile.available())
{
refresh_rate = commandFile.parseInt();
}
Serial.print("Refresh Rate = ");
Serial.print(refresh_rate);
Serial.println("ms");
commandFile.close(); //Close the file when finished
File dataFile = SD.open("sensor1.csv", FILE_WRITE);
dataFile.println("-----New Data Set-----");
dataFile.println("Time,TempC,TempF");
dataFile.close();
Serial.println("-----New Data Set-----");
Serial.println("Time\tTempC\tTempF");
}
else
{
Serial.println("Could not read command file.");
return;
}
}
void loop() {
long timeStamp = millis();
String dataString = "Hello There!";
//Open a file and write to it.
File dataFile = SD.open("sensor1.csv", FILE_WRITE);
if (dataFile)
{
dataFile.print(timeStamp);
dataFile.print(",");
dataFile.println(dataString);
dataFile.close(); //Data isnt actually written until we close the connection!
//Print same thing to the screen for debugging
Serial.print(timeStamp);
Serial.print(",");
Serial.println(dataString);
}
else
{
Serial.println("Couldn't open log file");
}
delay(refresh_rate);
}
HOMEWORK:
SD Card Reader with Temperature Sensor:
//SD read and write
#include <SD.h>
//Set by default for the SD card library
const int CS_PIN = 10;
const int POW_PIN = 8;
//Default rate of 5 seconds
int refresh_rate = 5000;
/*-----Temperature Sensor Constants------*/
const int temp_pin = A0;
int temp_reading = 0;
float voltage = 0; // setup some variables
float celsius = 0;
float farenheit ;
void setup() {
Serial.begin(9600);
Serial.println("Initializing Card");
//CS pin is an output
pinMode(CS_PIN, OUTPUT);
digitalWrite(POW_PIN, HIGH);
if (!SD.begin(CS_PIN))
{
Serial.println("Card Failure");
return;
}
Serial.println("Card Ready");
//Read the configuration info (speed.txt)
File commandFile = SD.open("speed.txt");
if (commandFile)
{
Serial.println("Reading Command File");
while(commandFile.available())
{
refresh_rate = commandFile.parseInt();
}
Serial.print("Refresh Rate = ");
Serial.print(refresh_rate);
Serial.println("ms");
commandFile.close(); //Close the file when finished
File dataFile = SD.open("sensor1.csv", FILE_WRITE);
dataFile.println("-----New Data Set-----");
dataFile.println("Time,TempC,TempF");
dataFile.close();
Serial.println("-----New Data Set-----");
Serial.println("Time\tTempC\tTempF");
}
else
{
Serial.println("Could not read command file.");
return;
}
}
void loop() {
long timeStamp = millis();
while (timeStamp < 60040)
{
long timeStamp = millis();
temperature_function();
String dataString = "Hello There!";
//Open a file and write to it.
File dataFile = SD.open("sensor1.csv", FILE_WRITE);
if (dataFile)
{
dataFile.print(timeStamp*.001);
dataFile.print(",");
dataFile.print(celsius);
dataFile.print(",");
dataFile.println(farenheit);
// dataFile.println(dataString);
dataFile.close(); //Data isnt actually written until we close the connection!
//Print same thing to the screen for debugging
Serial.print(timeStamp*.001);
Serial.print("\t");
Serial.print(celsius);
Serial.print("\t");
Serial.println(farenheit);
//Serial.println(dataString);
}
else
{
Serial.println("Couldn't open log file");
}
delay(refresh_rate);
}
}
void temperature_function()
{
temp_reading = analogRead(temp_pin);
voltage = ((float)temp_reading*5000)/1024; // convert sensor value to millivolts
voltage = voltage-500; // remove voltage offset
celsius = voltage/10; // convert millivolts to Celsius
farenheit = ((celsius*1.8)+32);
// Serial.print(temp_reading);
// Serial.print(" Temperature: "); // these four lines send the temp to the port
// Serial.print(celsius);
// Serial.print(" degrees C ");
// Serial.print(farenheit);
//Serial.println(" degrees F");
// delay(1000);
}
Temperature Sensor with SD Card Reader and Interrupts:
//Use Hardware and Timer Interrupts for Fun with Sound
//Include the TimerOne library
#include <TimerOne.h>
#include <SD.h>
//Button pins
const int BUTTON_INT = 0;
const int BUTTON2_INT =1;
//Set by default for the SD card library
const int CS_PIN = 10;
const int POW_PIN = 8;
//Volatile variables can change inside interrupts
volatile int refresh_rate = 0; // in ms
volatile long timeStamp;
/*-----Temperature Sensor Constants------*/
const int temp_pin = A0;
int temp_reading = 0;
float voltage = 0; // setup some variables
float celsius = 0;
float farenheit ;
void setup()
{
//Set up Serial
Serial.begin(9600);
Serial.println("Initializing Card");
//CS pin is an output
pinMode(CS_PIN, OUTPUT);
pinMode(POW_PIN, OUTPUT);
digitalWrite(POW_PIN, HIGH);
if (!SD.begin(CS_PIN))
{
Serial.println("Card Failure");
return;
}
Serial.println("Card Ready");
//Read the configuration info (speed.txt)
File commandFile = SD.open("speed.txt");
if (commandFile)
{
Serial.println("Reading Command File");
while(commandFile.available())
{
refresh_rate = commandFile.parseInt();
}
Serial.print("Refresh Rate = ");
Serial.print(refresh_rate);
Serial.println("ms");
commandFile.close(); //Close the file when finished
File dataFile = SD.open("sensor1.csv", FILE_WRITE);
dataFile.println("-----New Data Set-----");
dataFile.println("Time,TempC,TempF");
dataFile.close();
Serial.println("-----New Data Set-----");
Serial.println("Time\tTempC\tTempF");
}
else
{
Serial.println("Could not read command file.");
return;
}
//The pin is inverted, so we want to look at the rising edge
attachInterrupt(BUTTON_INT, increaseDelay, RISING);
//attachInterrupt(BUTTON2_INT, decreaseDelay, RISING);
//Set up timer interrupt
Timer1.initialize(refresh_rate*1000); //Set a timer of length 1 seconds
Timer1.attachInterrupt(printData); //Runs "temperature function" on each
//time interrupt
}
void increaseDelay()
{
if (refresh_rate >= 18)
refresh_rate++;
else
refresh_rate = 18;
Serial.print("New Refresh Rate:");
Serial.println(refresh_rate);
}
void decreaseDelay()
{
if (refresh_rate > 18)
refresh_rate--;
else
refresh_rate = 18;
Serial.print("Decrease:");
Serial.println(refresh_rate);
}
void loop() {
temperature_function();
//Open a file and write to it.
File dataFile = SD.open("sensor1.csv", FILE_WRITE);
if (dataFile)
{
dataFile.print(timeStamp);
dataFile.print(",");
dataFile.print(celsius);
dataFile.print(",");
dataFile.println(farenheit);
dataFile.close(); //Data isnt actually written until we close the connection!
//Print same thing to the screen for debugging
Serial.print(timeStamp);
Serial.print("\t");
Serial.print(celsius);
Serial.print("\t");
Serial.println(farenheit);
//Serial.println(dataString);
}
else
{
Serial.println("Couldn't open log file");
}
}
void printData()
{
timeStamp = millis();
}
void temperature_function()
{
temp_reading = analogRead(temp_pin);
voltage = ((float)temp_reading*5000)/1024; // convert sensor value to millivolts
voltage = voltage-500; // remove voltage offset
celsius = voltage/10; // convert millivolts to Celsius
farenheit = ((celsius*1.8)+32);
}
No comments:
Post a Comment