Arduino中的core.a(main.cpp.o)错误是什么?
我正在用Arduino编写代码,突然出现以下错误:Arduino中的core.a(main.cpp.o)错误是什么?,c,arduino,temperature,C,Arduino,Temperature,我正在用Arduino编写代码,突然出现以下错误: core.a(main.cpp.o): In function `main': D:\Personal\Arduino\arduino-1.0.4-windows\arduino- 1.0.4\hardware\arduino\cores\arduino/main.cpp:11: undefined reference to `setup' D:\Personal\Arduino\arduino-1.0.4-windows\arduin
core.a(main.cpp.o): In function `main':
D:\Personal\Arduino\arduino-1.0.4-windows\arduino- 1.0.4\hardware\arduino\cores\arduino/main.cpp:11: undefined reference to `setup'
D:\Personal\Arduino\arduino-1.0.4-windows\arduino-1.0.4\hardware\arduino\cores\arduino/main.cpp:14: undefined reference to `loop'
我不知道那是什么意思。这是我的密码:
#ifndef dht_h
#define dht_h
#if ARDUINO < 100
#include <WProgram.h>
#else
#include <Arduino.h>
#endif
#define DHT_LIB_VERSION "0.1.05"
#define DHTLIB_OK 0
#define DHTLIB_ERROR_CHECKSUM -1
#define DHTLIB_ERROR_TIMEOUT -2
#define DHTLIB_INVALID_VALUE -999
#include <dht.h>
#define TIMEOUT 10000
class dht
{
public:
int read22(uint8_t pin);
double humidity;
double temperature;
private:
uint8_t bits[5]; // Buffer to receive data
int read(uint8_t pin);
};
#endif
// return values:
// DHTLIB_OK
// DHTLIB_ERROR_CHECKSUM
// DHTLIB_ERROR_TIMEOUT
int dht::read22(uint8_t pin)
{
// READ VALUES
int rv = read(pin);
if (rv != DHTLIB_OK)
{
humidity = DHTLIB_INVALID_VALUE; // Invalid value, or is NaN prefered?
temperature = DHTLIB_INVALID_VALUE; // Invalid value
return rv;
}
// CONVERT AND STORE
humidity = word(bits[0], bits[1]) * 0.1;
if (bits[2] & 0x80) // negative temperature
{
temperature = word(bits[2]&0x7F, bits[3]) * 0.1;
temperature *= -1.0;
}
else
{
temperature = word(bits[2], bits[3]) * 0.1;
}
// TEST CHECKSUM
uint8_t sum = bits[0] + bits[1] + bits[2] + bits[3];
if (bits[4] != sum) return DHTLIB_ERROR_CHECKSUM;
return DHTLIB_OK;
}
//Private
// return values:
// DHTLIB_OK
// DHTLIB_ERROR_TIMEOUT
int dht::read(uint8_t pin)
{
// INIT BUFFERVAR TO RECEIVE DATA
uint8_t cnt = 7;
uint8_t idx = 0;
// EMPTY BUFFER
for (int i=0; i< 5; i++) bits[i] = 0;
// REQUEST SAMPLE
pinMode(pin, OUTPUT);
digitalWrite(pin, LOW);
delay(20);
digitalWrite(pin, HIGH);
delayMicroseconds(40);
pinMode(pin, INPUT);
// GET ACKNOWLEDGE or TIMEOUT
unsigned int loopCnt = TIMEOUT;
while(digitalRead(pin) == LOW)
if (loopCnt-- == 0) return DHTLIB_ERROR_TIMEOUT;
loopCnt = TIMEOUT;
while(digitalRead(pin) == HIGH)
if (loopCnt-- == 0) return DHTLIB_ERROR_TIMEOUT;
// READ THE OUTPUT - 40 BITS => 5 BYTES
for (int i=0; i<40; i++)
{
loopCnt = TIMEOUT;
while(digitalRead(pin) == LOW)
if (loopCnt-- == 0)
return DHTLIB_ERROR_TIMEOUT;
unsigned long t = micros();
loopCnt = TIMEOUT;
while(digitalRead(pin) == HIGH)
if (loopCnt-- == 0)
return DHTLIB_ERROR_TIMEOUT;
if ((micros() - t) > 40)
bits[idx] |= (1 << cnt);
if (cnt == 0) // Next byte?
{
cnt = 7;
idx++;
}
else
cnt--;
}
return DHTLIB_OK;
}
\ifndef dht\u h
#定义dht_h
#如果ARDUINO<100
#包括
#否则
#包括
#恩迪夫
#定义DHT_LIB_版本“0.1.05”
#定义DHTLIB_OK 0
#定义DHTLIB_错误_校验和-1
#定义DHTLIB_错误_超时-2
#定义DHTLIB_无效_值-999
#包括
#定义超时10000
dht级
{
公众:
int read22(uint8_t引脚);
双湿度;
双温;
私人:
uint8_t位[5];//用于接收数据的缓冲区
内部读取(uint8_t引脚);
};
#恩迪夫
//返回值:
//DHTLIB_OK
//DHTLIB_错误_校验和
//DHTLIB\u错误\u超时
int dht::read22(uint8_t引脚)
{
//读取值
int rv=读数(引脚);
如果(rv!=DHTLIB_正常)
{
湿度=DHTLIB_无效_值;//无效值,还是首选NaN?
温度=DHTLIB\u无效\u值;//无效值
返回rv;
}
//转换存储
湿度=字(位[0],位[1])*0.1;
if(位[2]&0x80)//负温度
{
温度=字(位[2]&0x7F,位[3])*0.1;
温度*=-1.0;
}
其他的
{
温度=字(位[2],位[3])*0.1;
}
//测试校验和
uint8_t sum=位[0]+位[1]+位[2]+位[3];
如果(位[4]!=sum)返回DHTLIB_错误_校验和;
返回DHTLIB_OK;
}
//私人的
//返回值:
//DHTLIB_OK
//DHTLIB\u错误\u超时
int dht::读取(uint8\U t引脚)
{
//初始化BUFFERVAR以接收数据
uint8_t cnt=7;
uint8_t idx=0;
//空缓冲区
对于(int i=0;i<5;i++)位[i]=0;
//索取样品
引脚模式(引脚,输出);
数字写入(引脚,低电平);
延迟(20);
数字写入(引脚,高);
延迟微秒(40);
引脚模式(引脚,输入);
//获取确认或超时
unsigned int loopCnt=超时;
while(数字读取(引脚)=低)
如果(loopCnt-->=0)返回DHTLIB_错误_超时;
loopCnt=超时;
而(数字读取(引脚)=高)
如果(loopCnt-->=0)返回DHTLIB_错误_超时;
//读取输出-40位=>5字节
对于(int i=0;i 40)
位[idx]|=(1每个Arduino程序都需要函数setup()
和loop()
,您没有这两个函数
你也许应该退房
您应该将它们添加到主文件中(通常是在IDE中创建的第一个文件).您给出的代码与此无关,但您之前的代码与此无关。您如何编译草图?您是否使用Arduino IDE?当您要在加载草图的窗口上编译草图时,是否单击验证或上传?草图是包含循环()的文件
和setup()
函数(参见前面的问题)。是否在包含setup()
和loop()的窗口中单击验证
?好的,那么您没有解决之前的问题,只是用另一个问题替换了一个问题。请删除此问题,因为它对您或网站的未来读者都没有用处。每个ardiuno程序都需要一个setup()和一个loop()函数,但不是每个文件。我担心这个问题的提问者会试图将setup()和loop()添加到此dht对象中,而不是将setup()和loop()添加到他的主文件中。@John b,我将此代码添加到dht的库文件中,并且成功了。谢谢!