The sgp30 and mq7 works but when I insert the pms5003 code, it won't work. please help
#include <LiquidCrystal.h>
#include "SparkFun_SGP30_Arduino_Library.h" // Click here to get the library: http://librarymanager/All#SparkFun_SGP30
#include <Wire.h>
#include <SoftwareSerial.h>
SoftwareSerial pmsSerial(2, 3);
SGP30 mySensor;
LiquidCrystal lcd(5, 6, 7, 8, 9, 10);
int sensorPin = A0; // select the input pin for the CO sensor
int sensorValue = 0; // variable to store the value coming from the sensor
void setup() {
lcd.begin (16,2);
lcd.setCursor(5,0);
lcd.print("SGP30");;
lcd.setCursor(4,1);
lcd.print("TESTING");
delay (3000);
lcd.clear();
Serial.begin(9600);
Wire.begin();
//Initialize sensor
if (mySensor.begin() == false)
{
Serial.println("No SGP30 Detected. Check connections.");
while (1);
}
//Initializes sensor for air quality readings
//measureAirQuality should be called in one second increments after a call to initAirQuality
mySensor.initAirQuality();
pinMode(LED_BUILTIN, OUTPUT);
// initialize the serial port
Serial.begin(9600);
// our debugging output
Serial.begin(9600);
// sensor baud rate is 9600
pmsSerial.begin(9600);
struct pms5003data {
uint16_t framelen;
uint16_t pm10_standard, pm25_standard, pm100_standard;
uint16_t pm10_env, pm25_env, pm100_env;
uint16_t particles_03um, particles_05um, particles_10um, particles_25um, particles_50um, particles_100um;
uint16_t unused;
uint16_t checksum;
};
struct pms5003data data;
}
void loop() {
delay(3000);
mySensor.measureAirQuality();
Serial.print("CO2: ");
Serial.print(mySensor.CO2);
Serial.print(" ppm");
Serial.print(" TVOC: ");
Serial.print(mySensor.TVOC);
Serial.println(" ppb");
lcd.setCursor(0,0);
lcd.print("CO2:");
lcd.setCursor(5,0);
lcd.print(mySensor.CO2);
lcd.setCursor(9,0);
lcd.print(" ppm");
lcd.setCursor(0,1);
lcd.print("TVOC:");
lcd.setCursor(6,1);
lcd.print(mySensor.TVOC);
lcd.setCursor(9,1);
lcd.println(" ppb ");
//MQ7
analogWrite(LED_BUILTIN, 255); // turn the heater fully on
delay(3000); // heat for 60 second
// now reduce the heating power
analogWrite(LED_BUILTIN, 72); // turn the heater to approx 1,4V
delay(3000); // wait for 90 seconds
// we need to read the sensor at 5V, but must not let it heat up. So hurry!
digitalWrite(LED_BUILTIN, HIGH);
delay (50); //don't know how long to wait without heating up too much. Getting an analog read apparently takes 100uSec
// read the value from the sensor:
sensorValue = analogRead(sensorPin);
Serial.println(sensorValue);
if (readPMSdata(&pmsSerial)) {
// reading data was successful!
Serial.println();
Serial.println("---------------------------------------");
Serial.println("Concentration Units (standard)");
Serial.print("PM 1.0: "); Serial.print(data.pm10_standard);
Serial.print("\t\tPM 2.5: "); Serial.print(data.pm25_standard);
Serial.print("\t\tPM 10: "); Serial.println(data.pm100_standard);
Serial.println("---------------------------------------");
Serial.println("Concentration Units (environmental)");
Serial.print("PM 1.0: "); Serial.print(data.pm10_env);
Serial.print("\t\tPM 2.5: "); Serial.print(data.pm25_env);
Serial.println("\t\tPM 10: "); Serial.println(data.pm100_env);
}
boolean readPMSdata(Stream *s) {
if (! s->available()) {
return false;
}
// Read a byte at a time until we get to the special '0x42' start-byte
if (s->peek() != 0x42) {
s->read();
return false;
}
// Now read all 32 bytes
if (s->available() < 32) {
return false;
}
uint8_t buffer[32];
uint16_t sum = 0;
s->readBytes(buffer, 32);
// get checksum ready
for (uint8_t i=0; i<30; i++) {
sum += buffer[i];
}
/* debugging
for (uint8_t i=2; i<32; i++) {
Serial.print("0x"); Serial.print(buffer[i], HEX); Serial.print(", ");
}
Serial.println();
*/
// The data comes in endian'd, this solves it so it works on all platforms
uint16_t buffer_u16[15];
for (uint8_t i=0; i<15; i++) {
buffer_u16[i] = buffer[2 + i*2 + 1];
buffer_u16[i] += (buffer[2 + i*2] << 8);
}
// put it into a nice struct :)
memcpy ((void *)&data, (void *)buffer_u16, 30);
if (sum != data.checksum) {
Serial.println("Checksum failure");
return false;
}
// success!
return true;
}