none
LNK2019에러가 발생합니다. RRS feed

  • 질문

  • // Main.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include "arduino.h"
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        return RunArduinoSketch();
    }
    
    //
    //    FILE: dht_test.ino
    //  AUTHOR: Rob Tillaart
    // VERSION: 0.1.08
    // PURPOSE: DHT Temperature & Humidity Sensor library for Arduino
    //     URL: http://arduino.cc/playground/Main/DHTLib
    //
    // Released to the public domain
    //
    
    
    
    dht DHT;
    
    #define DHT11_PIN  4
    
    
    void setup()
    {
    	Serial.begin(115200);
    }
    
    void loop()
    {	
    	uint8_t chk = DHT.read11(DHT11_PIN); //이부분에서 에러가 발생합니다.
    	
    	switch (chk)
    	{
    	case DHTLIB_OK:
    		Serial.print("OK,\t");
    		break;
    	case DHTLIB_ERROR_CHECKSUM:
    		Serial.print("Checksum error,\t");
    		break;
    	case DHTLIB_ERROR_TIMEOUT:
    		Serial.print("Time out error,\t");
    		break;
    	case DHTLIB_ERROR_CONNECT:
    		Serial.print("Connect error,\t");
    		break;
    	case DHTLIB_ERROR_ACK_L:
    		Serial.print("Ack Low error,\t");
    		break;
    	case DHTLIB_ERROR_ACK_H:
    		Serial.print("Ack High error,\t");
    		break;
    	default:
    		Serial.print("Unknown error,\t");
    		break;
    	}
    
    	*/
    	// DISPLAY DATA
    	Log(L"hum: \n", DHT.humidity);
    	Log(L"tem: \n", DHT.temperature);
    
    	delay(1000);
    }
    //
    // END OF FILE
    //


    //
    //    FILE: dht.h
    //  AUTHOR: Rob Tillaart
    // VERSION: 0.1.20
    // PURPOSE: DHT Temperature & Humidity Sensor library for Arduino
    //     URL: http://arduino.cc/playground/Main/DHTLib
    //
    // HISTORY:
    // see dht.cpp file
    //
    
    #ifndef dht_h
    #define dht_h
    
    #if ARDUINO < 100
    #include <WProgram.h>
    #include <pins_arduino.h>  // fix for broken pre 1.0 version - TODO TEST
    #else
    #include <Arduino.h>
    #endif
    
    #define DHT_LIB_VERSION "0.1.20"
    
    #define DHTLIB_OK                   0
    #define DHTLIB_ERROR_CHECKSUM       -1
    #define DHTLIB_ERROR_TIMEOUT        -2
    #define DHTLIB_ERROR_CONNECT        -3
    #define DHTLIB_ERROR_ACK_L          -4
    #define DHTLIB_ERROR_ACK_H          -5
    
    #define DHTLIB_DHT11_WAKEUP         18
    #define DHTLIB_DHT_WAKEUP           1
    
    #define DHTLIB_DHT11_LEADING_ZEROS  1
    #define DHTLIB_DHT_LEADING_ZEROS    6
    
    // max timeout is 100 usec.
    // For a 16 Mhz proc 100 usec is 1600 clock cycles
    // loops using DHTLIB_TIMEOUT use at least 4 clock cycli
    // so 100 us takes max 400 loops
    // so by dividing F_CPU by 40000 we "fail" as fast as possible
    #define DHTLIB_TIMEOUT 400 // (F_CPU/40000)
    
    class dht
    {
    public:
        // return values:
        // DHTLIB_OK
        // DHTLIB_ERROR_CHECKSUM
        // DHTLIB_ERROR_TIMEOUT
        // DHTLIB_ERROR_CONNECT
        // DHTLIB_ERROR_ACK_L
        // DHTLIB_ERROR_ACK_H
    
        int8_t read11(uint8_t pin);
        
    	//int8_t read(uint8_t pin);
    
        //inline int8_t read21(uint8_t pin) { return read(pin); };
        //inline int8_t read22(uint8_t pin) { return read(pin); };
        //inline int8_t read33(uint8_t pin) { return read(pin); };
        //inline int8_t read44(uint8_t pin) { return read(pin); };
    
        double humidity;
        double temperature;
    
    private:
        uint8_t bits[5];  // buffer to receive data
        int8_t _readSensor(uint8_t pin, uint8_t wakeupDelay, uint8_t leadingZeroBits);
    };
    #endif
    //
    // END OF FILE
    //


    //
    //    FILE: dht.cpp
    //  AUTHOR: Rob Tillaart
    // VERSION: 0.1.20
    // PURPOSE: DHT Temperature & Humidity Sensor library for Arduino
    //     URL: http://arduino.cc/playground/Main/DHTLib
    //
    // HISTORY:
    // 0.1.20 Reduce footprint (34 bytes) by using int8_t as error codes.
    //        (thanks to chaveiro)
    // 0.1.19 masking error for DHT11 - FIXED (thanks Richard for noticing)
    // 0.1.18 version 1.16/17 broke the DHT11 - FIXED
    // 0.1.17 replaced micros() with adaptive loopcount
    //        removed DHTLIB_INVALID_VALUE
    //        added  DHTLIB_ERROR_CONNECT
    //        added  DHTLIB_ERROR_ACK_L  DHTLIB_ERROR_ACK_H
    // 0.1.16 masking unused bits (less errors); refactored bits[]
    // 0.1.15 reduced # micros calls 2->1 in inner loop.
    // 0.1.14 replace digital read with faster (~3x) code
    //        => more robust low MHz machines.
    //
    // 0.1.13 fix negative temperature
    // 0.1.12 support DHT33 and DHT44 initial version
    // 0.1.11 renamed DHTLIB_TIMEOUT
    // 0.1.10 optimized faster WAKEUP + TIMEOUT
    // 0.1.09 optimize size: timeout check + use of mask
    // 0.1.08 added formula for timeout based upon clockspeed
    // 0.1.07 added support for DHT21
    // 0.1.06 minimize footprint (2012-12-27)
    // 0.1.05 fixed negative temperature bug (thanks to Roseman)
    // 0.1.04 improved readability of code using DHTLIB_OK in code
    // 0.1.03 added error values for temp and humidity when read failed
    // 0.1.02 added error codes
    // 0.1.01 added support for Arduino 1.0, fixed typos (31/12/2011)
    // 0.1.00 by Rob Tillaart (01/04/2011)
    //
    // inspired by DHT11 library
    //
    // Released to the public domain
    //
    
    #include "dht.h"
    
    /////////////////////////////////////////////////////
    //
    // PUBLIC
    //
    
    int8_t dht::read11(uint8_t pin)
    {
        // READ VALUES
        int8_t result = _readSensor(pin, DHTLIB_DHT11_WAKEUP, DHTLIB_DHT11_LEADING_ZEROS);
    
        // these bits are always zero, masking them reduces errors.
        bits[0] &= 0x7F;
        bits[2] &= 0x7F;
    
        // CONVERT AND STORE
        humidity    = bits[0];  // bits[1] == 0;
        temperature = bits[2];  // bits[3] == 0;
    
        // TEST CHECKSUM
        // bits[1] && bits[3] both 0
        uint8_t sum = bits[0] + bits[2];
        if (bits[4] != sum)
        {
            return DHTLIB_ERROR_CHECKSUM;
        }
        return result;
    }
    
    
    /////////////////////////////////////////////////////
    //
    // PRIVATE
    //
    
    int8_t dht::_readSensor(uint8_t pin, uint8_t wakeupDelay, uint8_t leadingZeroBits)
    {
        // INIT BUFFERVAR TO RECEIVE DATA
        uint8_t mask = 128;
        uint8_t idx = 0;
    
        uint8_t data = 0;
        uint8_t state = LOW;
        uint8_t pstate = LOW;
        uint16_t zeroLoop = DHTLIB_TIMEOUT;
        uint16_t delta = 0;
    
        leadingZeroBits = 40 - leadingZeroBits; // reverse counting...
    
        // replace digitalRead() with Direct Port Reads.
        // reduces footprint ~100 bytes => portability issue?
        // direct port read is about 3x faster
        uint8_t bit = digitalPinToBitMask(pin);
        uint8_t port = digitalPinToPort(pin);
        volatile uint8_t *PIR = portInputRegister(port);
    
        // REQUEST SAMPLE
        pinMode(pin, OUTPUT);
        digitalWrite(pin, LOW); // T-be
        delay(wakeupDelay);
        digitalWrite(pin, HIGH); // T-go
        pinMode(pin, INPUT);
    
        uint16_t loopCount = DHTLIB_TIMEOUT * 2;  // 200uSec max
        // while(digitalRead(pin) == HIGH)
        while ((*PIR & bit) != LOW )
        {
            if (--loopCount == 0) return DHTLIB_ERROR_CONNECT;
        }
    
        // GET ACKNOWLEDGE or TIMEOUT
        loopCount = DHTLIB_TIMEOUT;
        // while(digitalRead(pin) == LOW)
        while ((*PIR & bit) == LOW )  // T-rel
        {
            if (--loopCount == 0) return DHTLIB_ERROR_ACK_L;
        }
    
        loopCount = DHTLIB_TIMEOUT;
        // while(digitalRead(pin) == HIGH)
        while ((*PIR & bit) != LOW )  // T-reh
        {
            if (--loopCount == 0) return DHTLIB_ERROR_ACK_H;
        }
    
        loopCount = DHTLIB_TIMEOUT;
    
        // READ THE OUTPUT - 40 BITS => 5 BYTES
        for (uint8_t i = 40; i != 0; )
        {
            // WAIT FOR FALLING EDGE
            state = (*PIR & bit);
            if (state == LOW && pstate != LOW)
            {
                if (i > leadingZeroBits) // DHT22 first 6 bits are all zero !!   DHT11 only 1
                {
                    zeroLoop = min(zeroLoop, loopCount);
                    delta = (DHTLIB_TIMEOUT - zeroLoop)/4;
                }
                else if ( loopCount <= (zeroLoop - delta) ) // long -> one
                {
                    data |= mask;
                }
                mask >>= 1;
                if (mask == 0)   // next byte
                {
                    mask = 128;
                    bits[idx] = data;
                    idx++;
                    data = 0;
                }
                // next bit
                --i;
    
                // reset timeout flag
                loopCount = DHTLIB_TIMEOUT;
            }
            pstate = state;
            // Check timeout
            if (--loopCount == 0)
            {
                return DHTLIB_ERROR_TIMEOUT;
            }
    
        }
        pinMode(pin, OUTPUT);
        digitalWrite(pin, HIGH);
    
        return DHTLIB_OK;
    }
    //
    // END OF FILE
    //

    소스는 예제로 나와 있는것을 돌리는 것입니다.

    에러메세지는 다음과 같습니다.

    오류	1	error LNK2019: "public: signed char __thiscall dht::read11(unsigned char)" (?read11@dht@@QAECE@Z) 외부 기호(참조 위치: "void __cdecl loop(void)" (?loop@@YAXXZ) 함수)에서 확인하지 못했습니다.	c:\Users\Scott\Documents\Visual Studio 2013\Projects\dht01\dht01\Main.obj	dht01
    

    헤더화일과 cpp파일을 프로젝트 디렉토리에 사입하였고

    빌드하였습니다.

    windows iot 를 공부하고 있는중이며

    처음으로 비주얼을 사용하고 있습니다. 2013커뮤니티 버전

    보드는 갈릴레오 1세대 버전이며 

    dht11 센서(온도센서)를 사용하고자 합니다.

    그럼.

    2015년 8월 26일 수요일 오전 8:01

답변

  • 글쎄요..제가 그것까지는 장담을 못할 것 같네요.

    라이브러리 제공하는 쪽에 문의하셔야 할듯 합니다.

    • 답변으로 표시됨 SMPark82 2015년 9월 3일 목요일 오전 12:35
    2015년 8월 27일 목요일 오전 1:05

모든 응답

  • dht.cpp 파일을 Visual Studio 프로젝트에 포함시키셨나요?

    cpp 파일이 프로젝트에 포함되지 않으면 컴파일되지 않기때문에 위와 같은 링크 에러가 발생할 수 있습니다.

    프로젝트에 cpp 파일을 추가하려면 탐색기에서 파일을 Solution Explorer에 드래그&드랍 하셔도 되고,

    프로젝트에서 Add -> Existing Items 를 선택하여 추가하셔도 됩니다.

    2015년 8월 26일 수요일 오전 8:05
  • 오류	3	error C3861: 'digitalPinToBitMask': 식별자를 찾을 수 없습니다.	c:\users\scott\documents\visual studio 2013\projects\dhtlib\dht.cpp	120	1	dht01
    오류	4	error C3861: 'digitalPinToPort': 식별자를 찾을 수 없습니다.	c:\users\scott\documents\visual studio 2013\projects\dhtlib\dht.cpp	121	1	dht01
    오류	5	error C3861: 'portInputRegister': 식별자를 찾을 수 없습니다.	c:\users\scott\documents\visual studio 2013\projects\dhtlib\dht.cpp	122	1	dht01
    

    소스폴더에 추가를 하면 

    위와같은 에러메세지가 나옵니다.

    어떻게 해야 하나요.

    2015년 8월 26일 수요일 오전 8:39
  • 해당 매크로 값은 pins_arduino.h 파일 또는 Arduino.h 파일에 정의되어 있을텐데요.

    위에서 언급한 파일이 존재하는지, 제대로 include 되었는지 등등 확인해보세요.

    2015년 8월 26일 수요일 오전 8:46
  • 두 파일에서 위 매크로를 찾아보았지만

    없는데요...

    그럼 라이브러리가 잘못된건가요?

    2015년 8월 26일 수요일 오전 8:59
  • 근데 wprogram.h파일은 안보입니다.

    이 파일이 없어서 그런건가요?

    2015년 8월 26일 수요일 오전 9:02
  • 매크로 조건에 의해 Arduino.h 파일만 인클루드 된 것 같구요, 구글에서 이 파일 검색해보니 에러나는 매크로가 다 정의되어 있네요.
    2015년 8월 26일 수요일 오전 9:32
  • 그러면 어떻게 해야 하나요?

    	8	IntelliSense: 식별자 "digitalPinToBitMask"이(가) 정의되어 있지 않습니다.	c:\Users\Scott\Documents\Visual Studio 2013\Projects\dht03\dht03\DHT.cpp	13	10	dht03
    

    다른 라이브러리를 다운받아 해도 똑같이 이런 에러가 나오네요.

    2015년 8월 27일 목요일 오전 12:37
  • 아두이노에 있는 arduino,h파일과

    마소에서 제작한 arduino.h파일이 다르네요.

    이런경우에는 복사해서 넣으면 되나요?

    일부 복사하여 넣었더니 에러가 나서요.

    2015년 8월 27일 목요일 오전 12:48
  • 글쎄요..제가 그것까지는 장담을 못할 것 같네요.

    라이브러리 제공하는 쪽에 문의하셔야 할듯 합니다.

    • 답변으로 표시됨 SMPark82 2015년 9월 3일 목요일 오전 12:35
    2015년 8월 27일 목요일 오전 1:05
  • 네 알겠습니다 . 답변해 주셔서 감사합니다. 너무 고맙습니다. 
    2015년 8월 27일 목요일 오전 1:43