气象台代码

#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;
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值