Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino中的core.a(main.cpp.o)错误是什么?_C_Arduino_Temperature - Fatal编程技术网

Arduino中的core.a(main.cpp.o)错误是什么?

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

我正在用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\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的库文件中,并且成功了。谢谢!