使用SD卡保存CSV数据文件-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2365|回复: 0

使用SD卡保存CSV数据文件

[复制链接]
发表于 2020-1-7 19:39 | 显示全部楼层 |阅读模式
    CSV是一种常用的文本数据格式记录文件,使用逗号来分割字段,以下示例将演示如何通过CSV文件记录按下A,B,C按键的真实时间。你可以将按键替换为传感器,比如记录一天当中的温湿度数据。
IMG_1776.JPG
[mw_shl_code=arduino,true]#include <M5Stack.h>
#include <WiFi.h>
#include <time.h>

char ssid[] = "M5-5G";
char pass[] = "Office@888888";

char ntpServer[] = "cn.pool.ntp.org";  //连接中国NTP服务器
const long gmtOffset_sec = 8 * 3600; //格林尼治时间GMT8
const int  daylightOffset_sec = 28800; //设置时差
struct tm timeinfo;
String dateStr;
String timeStr;

File file;

const char* fname = "/btnevent_log.csv"; //路径名称
char *eventName[] = { "按下按键A", "按下按键B", "按下按键C" }; //保存内容

void getTimeFromNTP(){   //获取NTP时间

  configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
  while (!getLocalTime(&timeinfo)) {
    delay(1000);
  }
}

void getTime(){    //屏幕打印

  getLocalTime(&timeinfo);
  dateStr = (String)(timeinfo.tm_year + 1900)
          + "/" + (String)(timeinfo.tm_mon + 1)
          + "/" + (String)timeinfo.tm_mday;
  timeStr = (String)timeinfo.tm_hour
          + ":" + (String)timeinfo.tm_min
          + ":" + (String)timeinfo.tm_sec;

  M5.Lcd.setTextColor(WHITE,BLACK);
  M5.Lcd.setCursor(0, 50, 1);
  M5.Lcd.println(dateStr + "   ");
  M5.Lcd.println(timeStr + "   ");
}


void writeData(char *paramStr) {   //向SD卡写入数据

  file = SD.open(fname, FILE_APPEND);
  file.println(dateStr + "," + timeStr + "," + paramStr);
  file.close();
}

void setup()
{
  M5.begin();
  M5.Lcd.fillScreen(BLACK);
  M5.Lcd.setTextSize(2);
  M5.Lcd.setTextColor(WHITE,BLACK);
  M5.Lcd.println("CSV Writer");

  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    M5.Lcd.print(".");
  }
  M5.Lcd.println("\nWiFi connected.");

  getTimeFromNTP();

}

void loop()
{
  M5.update();

  getTime();

  M5.Lcd.setCursor(0, 100, 1);


  if (M5.BtnA.wasPressed()) {
    M5.Lcd.print("Button A Pressed");
    writeData(eventName[0]);
  }
  if (M5.BtnB.wasPressed()) {
    M5.Lcd.print("Button B Pressed");
    writeData(eventName[1]);
  }
  if (M5.BtnC.wasPressed()) {
    M5.Lcd.print("Button C Pressed");
    writeData(eventName[2]);
  }
}[/mw_shl_code]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 08:42 , Processed in 0.075464 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表