HI I try to use pms5003 and bme680 and SD card together but it has error .I am a environmental engineering and unfortunately i have never use Arduino
is there anyone who helps me?
Blockquote
//spi
//#include <SPI.h>
//sd card
#include <SD.h>
#include <Adafruit_BusIO_Register.h>
#include <Adafruit_I2CDevice.h>
#include <Adafruit_I2CRegister.h>
#include <Adafruit_SPIDevice.h>
//pms5003
#include <SoftwareSerial.h>
SoftwareSerial pmsSerial(2, 3);
//bme680
#include <Adafruit_BME680.h>
#include <bme68x.h>
#include <bme68x_defs.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include "Adafruit_BME680.h"
File dataFile;
#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME680 bme; // I2C
//Adafruit_BME680 bme(BME_CS); // hardware SPI
//Adafruit_BME680 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK);
void setup()
{
Serial.begin(9600);
while (!Serial)
; // wait for serial port to connect. Needed for native USB port only
Serial.print("Initializing SD card...");
if (!SD.begin())
{
Serial.println("initialization failed!");
while (1);
}
Serial.println("initialization done.");
delay(2000);
pmsSerial.begin(9600);
bme.begin(9600);
// Set up oversampling and filter initialization
bme.setTemperatureOversampling(BME680_OS_8X);
bme.setHumidityOversampling(BME680_OS_2X);
bme.setPressureOversampling(BME680_OS_4X);
bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
bme.setGasHeater(320, 150); // 320*C for 150 ms
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;
uint16_t line = 1;
void loop() {
delay(1000);
float temperature = bme.temperature;
float pressure = bme.pressure / 100.0;
float altitude = bme.readAltitude(SEALEVELPRESSURE_HPA);
float humidity = bme.humidity;
float gas = bme.gas_resistance / 1000.0;
double dewPoint = dewPointFast(temperature, humidity);
dataFile = SD.open("airquality.txt", FILE_WRITE);
// if the file opened okay, write to it:
if (dataFile)
{
// 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.print("\t\tPM 10: "); Serial.println(data.pm100_env);
Serial.println("---------------------------------------");
Serial.print("Particles > 0.3um / 0.1L air:"); Serial.println(data.particles_03um);
Serial.print("Particles > 0.5um / 0.1L air:"); Serial.println(data.particles_05um);
Serial.print("Particles > 1.0um / 0.1L air:"); Serial.println(data.particles_10um);
Serial.print("Particles > 2.5um / 0.1L air:"); Serial.println(data.particles_25um);
Serial.print("Particles > 5.0um / 0.1L air:"); Serial.println(data.particles_50um);
Serial.print("Particles > 10.0 um / 0.1L air:"); Serial.println(data.particles_100um);
Serial.println("---------------------------------------");
//bme680
Serial.print("Temperature = ");
Serial.print(temperature);
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.print(pressure);
Serial.println(" hPa");
Serial.print("Humidity = ");
Serial.print(humidity);
Serial.println(" %");
Serial.print("Dew Point = ");
Serial.print(dewPoint);
Serial.println(" *C");
Serial.print("Approx. Altitude = ");
Serial.print(altitude);
Serial.println(" m");
Serial.print("Gas = ");
Serial.print(gas);
Serial.println(" KOhms");
Serial.println();
// Write data to SD card file (DHT11Log.txt)
//pms5003
Serial.println();
dataFile.println("---------------------------------------"++);
dataFile.println("Concentration Units (standard)");
dataFile.print("PM 1.0: "); Serial.print(data.pm10_standard);
dataFile.print("\t\tPM 2.5: "); Serial.print(data.pm25_standard);
dataFile.print("\t\tPM 10: "); Serial.println(data.pm100_standard);
dataFile.println("---------------------------------------");
dataFile.println("Concentration Units (environmental)");
dataFile.print("PM 1.0: "); Serial.print(data.pm10_env);
dataFile.print("\t\tPM 2.5: "); Serial.print(data.pm25_env);
dataFile.print("\t\tPM 10: "); Serial.println(data.pm100_env);
dataFile.println("---------------------------------------");
dataFile.print("Particles > 0.3um / 0.1L air:"); Serial.println(data.particles_03um);
dataFile.print("Particles > 0.5um / 0.1L air:"); Serial.println(data.particles_05um);
dataFile.print("Particles > 1.0um / 0.1L air:"); Serial.println(data.particles_10um);
dataFile.print("Particles > 2.5um / 0.1L air:"); Serial.println(data.particles_25um);
dataFile.print("Particles > 5.0um / 0.1L air:"); Serial.println(data.particles_50um);
dataFile.print("Particles > 10.0 um / 0.1L air:"); Serial.println(data.particles_100um);
dataFile.println("---------------------------------------");
//bme680
dataFile.print("Temperature = ");
dataFile.print(temperature);
dataFile.println(" *C");
dataFile.print("Pressure = ");
dataFile.print(pressure);
dataFile.println(" hPa");
dataFile.print("Humidity = ");
dataFile.print(humidity);
dataFile.println(" %");
dataFile.print("Dew Point = ");
dataFile.print(dewPoint);
dataFile.println(" *C");
dataFile.print("Approx. Altitude = ");
dataFile.print(altitude);
dataFile.println(" m");
dataFile.print("Gas = ");
dataFile.print(gas);
dataFile.println(" KOhms");
dataFile.close();
}
// if the file didn't open, print an error:
else
Serial.println("error opening DHT11Log.txt");
}
horace
March 3, 2022, 6:07pm
2
what is the error?
do the devices all work OK when used in seperate programs?
The error is in this word "void loop() {". All module work separately, but apparently there is a problem in the code
Please include the entire error message. It is easy to do. There is a button (lower right of the IDE window) called "copy error message". Copy the error and paste into a post in code tags. Paraphrasing the error message leaves out important information.
Arduino: 1.8.19 (Windows 10), Board: "Arduino Uno"
C:\Users\RAYANG~1\AppData\Local\Temp\arduino_modified_sketch_939367\Advanced.ino: In function 'void setup()':
Advanced:74:13: error: a function-definition is not allowed here before '{' token
void loop() {
^
Advanced:188:1: error: expected '}' at end of input
}
^
exit status 1
a function-definition is not allowed here before '{' token
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
Where is the } to close the setup() function?
What Arduino board are you using?
its at the end of codes!!
is it wrong?
Yes, you need to close the setup function before the start of the loop() function and before the global definition of the pms5003data struct.
bme.setPressureOversampling(BME680_OS_4X);
bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
bme.setGasHeater(320, 150); // 320*C for 150 ms
} // inserted missing } to close the setup() function.
struct pms5003data
{
uint16_t framelen;
thanks for your help but now it has another error i cant do that
//spi
//#include <SPI.h>
//sd card
#include <SD.h>
#include <Adafruit_BusIO_Register.h>
#include <Adafruit_I2CDevice.h>
#include <Adafruit_I2CRegister.h>
#include <Adafruit_SPIDevice.h>
//pms5003
#include <SoftwareSerial.h>
SoftwareSerial pmsSerial(2, 3);
//bme680
#include <Adafruit_BME680.h>
#include <bme68x.h>
#include <bme68x_defs.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include "Adafruit_BME680.h"
File dataFile;
#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME680 bme; // I2C
//Adafruit_BME680 bme(BME_CS); // hardware SPI
//Adafruit_BME680 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK);
void setup()
{
Serial.begin(9600);
while (!Serial)
; // wait for serial port to connect. Needed for native USB port only
Serial.print("Initializing SD card...");
if (!SD.begin())
{
Serial.println("initialization failed!");
while (1);
}
Serial.println("initialization done.");
delay(2000);
pmsSerial.begin(9600);
bme.begin(9600);
// Set up oversampling and filter initialization
bme.setTemperatureOversampling(BME680_OS_8X);
bme.setHumidityOversampling(BME680_OS_2X);
bme.setPressureOversampling(BME680_OS_4X);
bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
bme.setGasHeater(320, 150); // 320*C for 150 ms
} // inserted missing } to close the setup() function.
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;
uint16_t line = 1;
void loop() {
delay(1000);
// Tell BME680 to begin measurement.
(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.print("\t\tPM 10: "); Serial.println(data.pm100_env);
Serial.println("---------------------------------------");
Serial.print("Particles > 0.3um / 0.1L air:"); Serial.println(data.particles_03um);
Serial.print("Particles > 0.5um / 0.1L air:"); Serial.println(data.particles_05um);
Serial.print("Particles > 1.0um / 0.1L air:"); Serial.println(data.particles_10um);
Serial.print("Particles > 2.5um / 0.1L air:"); Serial.println(data.particles_25um);
Serial.print("Particles > 5.0um / 0.1L air:"); Serial.println(data.particles_50um);
Serial.print("Particles > 10.0 um / 0.1L air:"); Serial.println(data.particles_100um);
Serial.println("---------------------------------------");
};
//bme680
if (!bme.endReading()) {
Serial.println(F("Failed to complete reading :("));
return;
}
Serial.print(F("Reading completed at "));
Serial.println(millis());
Serial.print(F("Temperature = "));
Serial.print(bme.temperature);
Serial.println(F(" *C"));
Serial.print(F("Pressure = "));
Serial.print(bme.pressure / 100.0);
Serial.println(F(" hPa"));
Serial.print(F("Humidity = "));
Serial.print(bme.humidity);
Serial.println(F(" %"));
Serial.print(F("Gas = "));
Serial.print(bme.gas_resistance / 1000.0);
Serial.println(F(" KOhms"));
Serial.print(F("Approx. Altitude = "));
Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
Serial.println(F(" m"));
Serial.println();
delay(2000);
}
Serial.println();
// Write data to SD card file (DHT11Log.txt)
//pms5003
Serial.println();
dataFile.println("---------------------------------------"++);
dataFile.println("Concentration Units (standard)");
dataFile.print("PM 1.0: "); Serial.print(data.pm10_standard);
dataFile.print("\t\tPM 2.5: "); Serial.print(data.pm25_standard);
dataFile.print("\t\tPM 10: "); Serial.println(data.pm100_standard);
dataFile.println("---------------------------------------");
dataFile.println("Concentration Units (environmental)");
dataFile.print("PM 1.0: "); Serial.print(data.pm10_env);
dataFile.print("\t\tPM 2.5: "); Serial.print(data.pm25_env);
dataFile.print("\t\tPM 10: "); Serial.println(data.pm100_env);
dataFile.println("---------------------------------------");
dataFile.print("Particles > 0.3um / 0.1L air:"); Serial.println(data.particles_03um);
dataFile.print("Particles > 0.5um / 0.1L air:"); Serial.println(data.particles_05um);
dataFile.print("Particles > 1.0um / 0.1L air:"); Serial.println(data.particles_10um);
dataFile.print("Particles > 2.5um / 0.1L air:"); Serial.println(data.particles_25um);
dataFile.print("Particles > 5.0um / 0.1L air:"); Serial.println(data.particles_50um);
dataFile.print("Particles > 10.0 um / 0.1L air:"); Serial.println(data.particles_100um);
dataFile.println("---------------------------------------");
//bme680
dataFile.print("Temperature = ");
dataFile.print(temperature);
dataFile.println(" *C");
dataFile.print("Pressure = ");
dataFile.print(pressure);
dataFile.println(" hPa");
dataFile.print("Humidity = ");
dataFile.print(humidity);
dataFile.println(" %");
dataFile.print("Dew Point = ");
dataFile.print(dewPoint);
dataFile.println(" *C");
dataFile.print("Approx. Altitude = ");
dataFile.print(altitude);
dataFile.println(" m");
dataFile.print("Gas = ");
dataFile.print(gas);
dataFile.println(" KOhms");
dataFile.close();
}
// if the file didn't open, print an error:
else
Serial.println("error opening DHT11Log.txt");
}
Why don't you post the error? It is just common sense that when you ask about an error to let us know what the error is.
Please include the entire error message. It is easy to do. There is a button (lower right of the IDE window) called "copy error message". Copy the error and paste into a post in code tags. Paraphrasing the error message leaves out important information.
Use the IDE autoformat tool (ctrl-t or Tools, Auto format) and you can see that you have a } misplaced and are closing the loop() function before the end.
Serial.println(F(" m"));
Serial.println();
delay(2000);
} // this closes the loop() function leaving the rest of the code outside a function.
Serial.println();
// Write data to SD card file (DHT11Log.txt)
//pms5003
Serial.println();
dataFile.println("-------------------------
What is that [ (readPMSdata(&pmsSerial)) ]? Is it supposed to be a function definition? If so it should not be in loop().
system
Closed
August 30, 2022, 7:35pm
18
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.