Typické využití jednočipových počítačů je kontinuální sběr dat ze senzorů. V následujícím příkladu si ukážeme, jak využít SD kartu pro záznam informací ze senzoru. Tentokrát použijeme desku FEZ Spider, ale identicky, kromě inicializace SD karty, se to bude chovat i na jiných deskách, např. FEZ Panda II.

Zapojení

  • FEZ Spider – řídící deska
  • UsbClientDP – deska napájení
  • Barometr – čidlo atmosférického tlaku a teploty
  • SDCard – čtečka SD karet
  • MulticolorLed – kontrolní LED, blikne červeně při chybě zápisu na SD, jinak zeleně

clip_image002

Schéma zapojení příkladu

Časovač

Pro periodické spouštění kódu, např. čtení dat ze senzorů, se typicky používají systémové časovače. My využijeme objekt Timer. Abychom mohli přistupovat k senzoru, musíme jako parametr state, předat odkaz na objekt barometru.

Barometr

Vývojové prostředí vám automaticky vytvoří objekt barometr, který vám zpřístupňuje informace o tlaku (hPa) a teplotě (°C). Tyto informace čtete asynchronně (metoda RequestMeasurement), proto je třeba si zaregistrovat událost MeasurementCompleteEventHandler.

Multicolor LED

Tuto část můžete klidně vynechat. Multicolor LED používáme pouze jako zpětnou vazbu, že se něco děje. V době psaní tohoto článku byla ovladači pro Multicolor LED chyba, takže je prohozena zelená a modrá barva.

clip_image004

Zdrojový kód

using System.Threading;
using Microsoft.SPOT;
 
using Gadgeteer.Modules.Seeed;
using System.IO;
using Gadgeteer.Modules.GHIElectronics;
using System;
 
namespace SimpleDataLogger
{
    public partial class Program
    {
        // časovač
        Timer t = null;
 
        // soubor, kam se budou ukládat data
        static string dataFilePath = @"\SD\DATA.TXT";
 
        // doba bliknutí kontrolní diody
        static TimeSpan ledTime = new TimeSpan(0, 0, 1);
       
        // callback pro Timer
        static void ReadData(object o)
        {
            // Požádání o data z barometru
            ((Barometer)o).RequestMeasurement();
        }
 
        void ProgramStarted()
        {
            // inicializace karty
            if (sdCard.IsCardInserted && !sdCard.IsCardMounted)
            {
                sdCard.MountSDCard();
            }
 
            // čtení dat z barometru je asynchronní
            barometer.MeasurementComplete += new Barometer.MeasurementCompleteEventHandler(barometer_MeasurementComplete);
 
            // vytvoření časovače - callback, parametr, prodleva startu, perioda opakování
            t = new Timer(new TimerCallback(ReadData), barometer, 5000, 5000);
        }
 
 
 
        void barometer_MeasurementComplete(Barometer sender, Barometer.SensorData sensorData)
        {
            // pomocný výpis
            Debug.Print(sensorData.ToString());
 
            // test připojení karty
            if (!sdCard.IsCardMounted)
            {
                led.BlinkOnce(Gadgeteer.Color.Red, ledTime);
                return;
            }
            
            led.BlinkOnce(Gadgeteer.Color.Green, ledTime);
 
            // zápis na SD kartu
            StreamWriter sw = new StreamWriter(File.Open(dataFilePath, FileMode.Append, FileAccess.Write));
            sw.WriteLine(sensorData.Pressure + ";" + sensorData.Temperature);
            sw.Flush();
            sw.Close();
        }
    }
}

Štěpán