我对arduino很陌生,我不知道为什么会出现这个错误。任何帮助都将不胜感激。上述错误出现在设置函数中。我对功能还没有太大的经验,因为我只是在几个星期前才开始研究这些功能。
#include <Adafruit_BMP280.h> // For the purple BMP280 sensor board
#include <SoftwareSerial.h>
// Purple BMP280 Sensor Board
Adafruit_BMP280 bmp; //use I2C interface
Adafruit_Sensor *bmp_temp = bmp.getTemperatureSensor();
Adafruit_Sensor *bmp_pressure = bmp.getPressureSensor();
float temp;
float pressure;
float calculate_altitude(float temp, float pressure);
float altitude;
float altitude1;
float altitude2;
float altitude3;
float x;
float y;
float z;
// Initialising variables
void setup() {
//Setup for purple BMP280
Serial.begin(300);
Serial.println(F("BMP280 Sensor event test"));
if (!bmp.begin()) {
Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
while (1) delay(10);
}
//Default settings from datasheet
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, //Opertaing Mode
Adafruit_BMP280::SAMPLING_X2, //Temp. oversampling
Adafruit_BMP280::SAMPLING_X16, //Pressure oversampling
Adafruit_BMP280::FILTER_X16, //Filtering
Adafruit_BMP280::STANDBY_MS_500); //Standby time
bmp_temp->printSensorDetails();
//Calculation for altitude using temperature and pressure values
float calculate_altitude(float temp, float pressure);
{
float altitude;
altitude1 = 1013.25/(pressure);
altitude2 = pow(altitude1,0.190222560);
altitude3 = altitude2-1;
altitude = (altitude3*(temp +273.15))/0.0065;
return altitude;
}
}
void loop() {
//Obtaining temperature and pressure events off BMP280
sensors_event_t temp_event, pres_event;
bmp_temp->getEvent(&temp_event);
bmp_pressure->getEvent(&pres_event);
//Taking temperature and pressure values from the events
temp = temp_event.temperature;
pressure = pres_event.pressure;
altitude = calculate_altitude(temp, pressure);
//Reading acceleration values in X, Y and Z axis directions from accelerometer
x = analogRead(A1);
y = analogRead(A2);
z = analogRead(A3);
Serial.print(" temperature = ");
Serial.print(temp); //Print temperature value
Serial.print(",");
Serial.print(" pressure = ");
Serial.print(pressure); //Print pressure value
Serial.print(",");
Serial.print(" altitude = ");
Serial.print(altitude); //Read altitude value
Serial.print(",");
Serial.print(" x axis acceleration = ");
Serial.print(x); //Read acceleration in X direction
Serial.print(",");
Serial.print(" y axis acceleration = ");
Serial.print(y); //Read acceleration in Y direction
Serial.print(",");
Serial.print(" z axis acceleration = ");
Serial.println(z); //Read acceleration in Z direction
delay(100);
}我还在循环函数中得到这个错误:对`calculate_altitude(float,float)‘的未定义引用。如果这一点可以解释的话,我就不明白它意味着什么,也不明白如何解决这个问题。
发布于 2022-03-15 15:44:03
根据C标准(6.8.6.4返回声明)
带表达式的返回语句不应出现在返回类型为
的函数中。没有表达式的返回语句只能出现在返回类型为whose的函数中。
函数setup声明为返回类型void,它有一个带有表达式的返回语句。
void setup() {
//...
//Calculation for altitude using temperature and pressure values
float calculate_altitude(float temp, float pressure);
{
float altitude;
altitude1 = 1013.25/(pressure);
altitude2 = pow(altitude1,0.190222560);
altitude3 = altitude2-1;
altitude = (altitude3*(temp +273.15))/0.0065;
return altitude;
}
}这似乎是一个错误的结果。似乎您正在尝试定义函数calculate_altitude,并错误地将其放置在函数setup中。但是由于分号
float calculate_altitude(float temp, float pressure);
^^^编译器将其视为块作用域函数声明,因此返回语句属于函数setup,而不是函数calculate_altitude。
这种错误的原因是错误的代码格式。
发布于 2022-03-15 15:46:47
有了正确的缩进和我在上面的注释中描述的更正,您的代码应该是这样的:
#include <Adafruit_BMP280.h> // For the purple BMP280 sensor board
#include <SoftwareSerial.h>
// Purple BMP280 Sensor Board
Adafruit_BMP280 bmp; //use I2C interface
Adafruit_Sensor *bmp_temp = bmp.getTemperatureSensor();
Adafruit_Sensor *bmp_pressure = bmp.getPressureSensor();
float temp;
float pressure;
float calculate_altitude(float temp, float pressure);
float altitude;
float altitude1;
float altitude2;
float altitude3;
float x;
float y;
float z;
// Initialising variables
void setup()
{
//Setup for purple BMP280
Serial.begin(300);
Serial.println(F("BMP280 Sensor event test"));
if (!bmp.begin()) {
Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
while (1) delay(10);
}
} // this close-brace was missing
//Default settings from datasheet
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, //Opertaing Mode
Adafruit_BMP280::SAMPLING_X2, //Temp. oversampling
Adafruit_BMP280::SAMPLING_X16, //Pressure oversampling
Adafruit_BMP280::FILTER_X16, //Filtering
Adafruit_BMP280::STANDBY_MS_500); //Standby time
bmp_temp->printSensorDetails();
//Calculation for altitude using temperature and pressure values
float calculate_altitude(float temp, float pressure) //; - Extra semicolon
{
float altitude;
altitude1 = 1013.25/(pressure);
altitude2 = pow(altitude1,0.190222560);
altitude3 = altitude2-1;
altitude = (altitude3*(temp +273.15))/0.0065;
return altitude;
}// }这里有特制的紧支撑
void loop() {
//Obtaining temperature and pressure events off BMP280
sensors_event_t temp_event, pres_event;
bmp_temp->getEvent(&temp_event);
bmp_pressure->getEvent(&pres_event);
//Taking temperature and pressure values from the events
temp = temp_event.temperature;
pressure = pres_event.pressure;
altitude = calculate_altitude(temp, pressure);
//Reading acceleration values in X, Y and Z axis directions from accelerometer
x = analogRead(A1);
y = analogRead(A2);
z = analogRead(A3);
Serial.print(" temperature = ");
Serial.print(temp); //Print temperature value
Serial.print(",");
Serial.print(" pressure = ");
Serial.print(pressure); //Print pressure value
Serial.print(",");
Serial.print(" altitude = ");
Serial.print(altitude); //Read altitude value
Serial.print(",");
Serial.print(" x axis acceleration = ");
Serial.print(x); //Read acceleration in X direction
Serial.print(",");
Serial.print(" y axis acceleration = ");
Serial.print(y); //Read acceleration in Y direction
Serial.print(",");
Serial.print(" z axis acceleration = ");
Serial.println(z); //Read acceleration in Z direction
delay(100);
}(请注意,我没有Arduino,因此无法为您测试编译此代码。)但我纠正了明显的错误。
https://stackoverflow.com/questions/71484609
复制相似问题