Main Site Documentation

Data Logger


#1

I am attempting to create a temperature data logger that will write to an excel file on a usb flash drive. I am needing some guidance as to where to even begin with writing to a .csv file on a usb flash drive using usb host module.

Thanks in Advance


#2

Take a look at the System.IO namespace. You need to reference System.IO.dll… There are File.Write methods there you can use


#3

After some searches on Google, I have found some code using System.IO similar to this…



void usbHost_USBDriveConnected(UsbHost sender, GT.StorageDevice storageDevice)
        {
            stream = storageDevice.Open("tempFile\\Data.csv", FileMode.OpenOrCreate, FileAccess.ReadWrite);
            writer = new StreamWriter(stream);
            writer.Write("Time,Temp");
                       
        }


I am fairly new to c# programming and have only had a brief introduction to the System.IO class.

Any help in this area would be greatly appreciated


#4

This should get you going… (code is not tested in real life…)

using System;
using System.Collections;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Presentation;
using Microsoft.SPOT.Presentation.Controls;
using Microsoft.SPOT.Presentation.Media;
using Microsoft.SPOT.Presentation.Shapes;
using Microsoft.SPOT.Touch;

using Gadgeteer.Networking;
using GT = Gadgeteer;
using GTM = Gadgeteer.Modules;
using Gadgeteer.Modules.GHIElectronics;
using System.IO;
using System.Text;

namespace GadgeteerApp3SdCardWriteTest
{
    public partial class Program
    {
        // thread that does the logging
        private Thread _loggerThread;

        // separator used to separate all the logged elements on one line
        private readonly char _separator = ';';

        // This method is run when the mainboard is powered up or reset.   
        void ProgramStarted()
        {
            InitSensors();

            _loggerThread = new Thread(new ThreadStart(DoLogging));

            sdCard.SDCardMounted += sdCard_SDCardMounted;
            sdCard.SDCardUnmounted += sdCard_SDCardUnmounted;

            // Use Debug.Print to show messages in Visual Studio's "Output" window during debugging.
            Debug.Print("Program Started");
        }

        private void InitSensors()
        {
            // init your sensors
        }

        private void DoLogging()
        {
            // get sensor data ..
            var fakeSensorData = new object[] { 1.0, 5, true, false, "GOOD", "BAD", "OFFLINE" };
            var timestamp = DateTime.Now;

            // log to file
            WriteToFile(timestamp, fakeSensorData);
        }

        void WriteToFile(DateTime timestamp, params object[] sensorValues)
        {
            if (sdCard.IsCardInserted && sdCard.IsCardMounted)
            {
                using (var fileStream = new FileStream("data.csv", FileMode.OpenOrCreate))
                {
                    var line = new StringBuilder();

                    line.Append(timestamp.ToUniversalTime());

                    for (var i = 0; i != sensorValues.Length; i++)
                    {
                        // add separator
                        line.Append(_separator);

                        // and sensor value
                        line.Append(sensorValues[i].ToString());
                    }

                    // add line break 
                    line.Append('\n');

                    // get 
                    byte[] data = Encoding.UTF8.GetBytes(line.ToString());

                    // write the data and close the file
                    fileStream.Write(data, 0, data.Length);
                    fileStream.Close();
                }
            }
        }

        void sdCard_SDCardUnmounted(SDCard sender)
        {
            // stop logging
            _loggerThread.Start();
        }

        void sdCard_SDCardMounted(SDCard sender, GT.StorageDevice SDCard)
        {
            // start logging 
            _loggerThread.Suspend();
        }

    }
}