畑定点観測ロガー(5) – SDカードへのデータ保存(2)

前回、保存するための回路も作成したのでDHT22で取得したデータをSDカードに保存してみます。

回路図


ソースコード

//
//    FILE: SDCard_Save.ino
// PURPOSE: DHT22 + SDCard test sketch for Arduino
//
// SD card attached to SPI bus as follows:
//  CS       - pin 10
//  MOSI(DI) - pin 11
//  MISO(DO) - pin 12
//  SCK(CLK) - pin 13


#include <SD.h>
#include <dht22.h>

DHT22 DHT;

#define DHT22_PIN 2
#define SD_CS_PIN 10
#define SD_DI_PIN 11
#define SD_DO_PIN 12
#define SD_CL_PIN 13

void setup()
{
  Serial.begin(115200);

  Serial.print("Initializing SD card...");
  pinMode(SD_CS_PIN, OUTPUT);
  while (!SD.begin(SD_CS_PIN)) {
    Serial.println("Card failed, or not present!");
    delay(30000);
  }
  Serial.println("Card initialized.");

  Serial.print("DHT22 LIBRARY VERSION: ");
  Serial.println(DHT22_LIB_VERSION);
  Serial.println();
  Serial.println("State,\tTemperature (C),\tHumidity (%),\tDewpoint (C)");
  delay(2000); // Waits until a sensor is stabilized. 
}

void loop()
{
  // Read Data
  int chk = DHT.get(DHT22_PIN);
  String dataString="";
  switch (chk)
  {
  case DHT22_OK:
    char s[5];
    dtostrf(DHT.temperature, -1, 1, s);
    dataString += s;
    dataString += ",";
    dtostrf(DHT.humidity, -1, 1, s);
    dataString += s;
    dataString += ",";
    dtostrf(DHT.dewpoint, -1, 1, s);
    dataString += s;
    PrintToFile(dataString); 
    break;
  case DHT22_ERROR_CHECKSUM:
    PrintToFile("Checksum error,\t");
    break;
  case DHT22_ERROR_TIMEOUT:
    PrintToFile("Time out error,\t");
    break;
  default:
    PrintToFile("Unknown error,\t");
    break;
  }
  delay(10000);
}


// Subroutine for writing data in SD card, SDカードへのデータ書き込みのためのサブルーチン
void PrintToFile(String dataIn){
  File dataFile = SD.open("datalog.txt", FILE_WRITE);
  if (dataFile) {
    dataFile.println(dataIn);
    dataFile.close();
    Serial.println(dataIn);
  }
  else {
    Serial.println("error opening file");
  } 
}

[wpdm_file id=4]

コメントを残す

メールアドレスが公開されることはありません。