#include <Wire.h> //这个是iic需要
#include <SPI.h> //SD卡要
#include <SD.h>
#include "Adafruit_Si7021.h" //温度湿度传感器,这里可能式<>符号
#include <BH1750FVI.h> //光传感器
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
/* * SD card attached to SPI bus as follows:
** MOSI - pin 11
** MISO - pin 12
** CLK/sck - pin 13
** CS - pin 4 (片选信号管脚,可以改变)
SD卡需要格式化为FAT32或FAT16格式,电源电压4.5-5.5v 电流0.2-200ma
*/
const int chipSelect = 4; //SD卡片选型号脚
Adafruit_Si7021 sensor = Adafruit_Si7021(); //实化Si7021
BH1750FVI LightSensor(BH1750FVI::k_DevModeContLowRes); //光传感器
Adafruit_BMP280 bme;
String TimeString = ""; // 记录时间的字符串
String Filename = ""; //每天文件的名字不同
String SDfile = "";
bool stringComplete = false; // whether the string is complete
bool flag = false;
void setup() {
Serial.begin(115200);
TimeString.reserve(200); // 如何写了这一句则处理速度等快。这样更快
pinMode(10, OUTPUT);
if (!SD.begin(chipSelect)) {
digitalWrite(10, HIGH); //sd卡不正常工作就点亮10脚的LED
Serial.println("sd error");
}
if (!bme.begin()) {
digitalWrite(10, HIGH); //BMP280不正常工作就点亮10脚的LED
Serial.println("bme error");
}
if (!sensor.begin()) {
digitalWrite(10, HIGH); //Si7021不正常工作就点亮10脚的LED
Serial.println("7021 error");
}
LightSensor.begin(); //光传感器不正常工作就点亮10脚的LED
}
void loop() {
if (stringComplete) {
/*写入温度到达temp.txt*/
float temp = sensor.readTemperature(); //将温度值赋值给datalog
int hum = sensor.readHumidity(); //将湿度值赋给hum
float Pressure = bme.readPressure(); //读取大气压力
int lux = LightSensor.GetLightIntensity(); //读取光的强度
Filename = TimeString.substring(1,10); //将数据存进CSV文件中去,以当天的日期为文件名 0-9
Filename.replace(" ", ".csv");
/*Serial.println(Filename);
Serial.println(temp);
Serial.println(hum);
Serial.println(Pressure);
Serial.println(lux);*/
File dataFile = SD.open(Filename, FILE_WRITE);
// if the file is available, write to it:
if (dataFile) {
dataFile.print(TimeString);
dataFile.print(",");
dataFile.print(temp);
dataFile.print(",");
dataFile.print(hum);
dataFile.print(",");
dataFile.print(Pressure);
dataFile.print(",");
dataFile.print(lux);
dataFile.close();
}
else {
digitalWrite(10, HIGH); //如果写入失败,就点亮10脚
// Serial.println("write error");
}
//以下为初始化
TimeString = "";
Filename = "";
stringComplete = false;
}
}
void serialEvent() {
while (Serial.available()) {
char inChar = (char)Serial.read();
if (inChar != '\r' && flag == true) { //字符的结尾要是回车
TimeString += inChar;
}
else if (inChar == '@') {
flag = true;
}
else if (inChar == '\r'&& flag == true) {
stringComplete = true;
}
}
}
气象台代码
最新推荐文章于 2022-03-02 14:24:38 发布