I want to make a data logger with multiple sensors, but i have problem when try to write PMS7003 reading result to SD card.
When i'm tried to combine the pms7003 code to datalogging code, the value of pms7003 in sd card always 0.
this is pms7003 reading code:
#include "PMS.h"
PMS pms(Serial1);
PMS::DATA data;
void setup(){
Serial.begin(9600);
Serial1.begin(9600);
}
void loop(){
if (pms.read(data)){
Serial.print("PM 2.5 (ug/m3): ");
Serial.println(data.PM_AE_UG_2_5);
Serial.println();
}
}
and this is data logging code after i'm combined:
#include <DFRobot_SHT20.h>
#include <SPI.h> //for the SD card module
#include <SD.h> // for the SD card
#include <RTClib.h> // for the RTC
#include "PMS.h"
File myFile;
const int chipSelect = 10;
RTC_DS1307 RTC;
DFRobot_SHT20 sht20;
PMS pms(Serial1);
PMS::DATA data;
void setup() {
Serial.begin(9600);
sht20.initSHT20(); // Init SHT20 Sensor
delay(100);
sht20.checkSHT20(); // Check SHT20 Sensor
Serial1.begin(9600);
while(!Serial);
Serial.println("ArduinoAll DataLogger Shield Test");
pinMode(SS, OUTPUT);
if(!SD.begin(53,51,50,52)) {
Serial.println("initialization failed!");
return;
// setup for the SD card
}
Serial.print("Initializing SD card...");
RTC.begin();
if(! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
RTC.adjust(DateTime(__DATE__, __TIME__));
}
Serial.println("initialization done.");
myFile=SD.open("DATA1.txt", FILE_WRITE);
if (myFile) {
Serial.println("File opened ok");
// print the headings for our data
myFile.println("Date,Time,Temperature,Humidity,PM2.5,");
}
myFile.close();
}
void loggingTime() {
DateTime now = RTC.now();
myFile = SD.open("DATA1.txt", FILE_WRITE);
if (myFile) {
myFile.print(now.year(), DEC);
myFile.print('/');
myFile.print(now.month(), DEC);
myFile.print('/');
myFile.print(now.day(), DEC);
myFile.print(',');
myFile.print(now.hour(), DEC);
myFile.print(':');
myFile.print(now.minute(), DEC);
myFile.print(':');
myFile.print(now.second(), DEC);
myFile.print(",");
}
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.println(now.day(), DEC);
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.println(now.second(), DEC);
myFile.close();
}
void loggingSensors() {
float humd = sht20.readHumidity(); // Read Humidity
float temp = sht20.readTemperature(); // Read Temperature
pms.read(data);
myFile=SD.open("DATA1.txt", FILE_WRITE);
if (myFile){
myFile.print(temp);
myFile.print(",");
myFile.print(humd);
myFile.print(",");
myFile.print(data.PM_AE_UG_2_5);
myFile.println(",");
myFile.close();
}
}
void loop() {
loggingTime();
loggingSensors();
delay(5000);
}
I suggest that i'm wrong at loggingSensors part.
The SD card result screenshot is attached below