Подключение сенсора SHT1x

Тема в разделе "Arduino & Shields", создана пользователем Vir, 17 янв 2013.

  1. Vir

    Vir Гик

    Всем привет.

    Пытаюсь подключить сенсор SHT1x. Для этого использую пример с оф. сайта производителя. Но ничего не выходит. Вот скетч:
    Код (Text):
    #include <SHT1x.h>
     
    // Specify data and clock connections and instantiate SHT1x object
    #define dataPin 10
    #define clockPin 11
    SHT1x sht1x(dataPin, clockPin);
     
    void setup()
    {
      Serial.begin(38400); // Open serial connection to report values to host
      Serial.println("Starting up");
    }
     
    void loop()
    {
      float temp_c;
      float temp_f;
      float humidity;
     
      // Read values from the sensor
      temp_c = sht1x.readTemperatureC();
      temp_f = sht1x.readTemperatureF();
      humidity = sht1x.readHumidity();
     
      // Print the values to the serial port
      Serial.print("Temperature: ");
      Serial.print(temp_c, DEC);
      Serial.print("C / ");
      Serial.print(temp_f, DEC);
      Serial.print("F. Humidity: ");
      Serial.print(humidity);
      Serial.println("%");
     
      delay(2000);
    }
    При попытке компиляции получаю следующие ошибки:
    Код (Text):
    test_ino.cpp.o: In function `global constructors keyed to sht1x':
    test_ino.cpp:38: undefined reference to `SHT1x::readTemperatureC()'
    test_ino.cpp:38: undefined reference to `SHT1x::readTemperatureF()'
    test_ino.cpp:38: undefined reference to `SHT1x::readHumidity()'
    test_ino.cpp:9: undefined reference to `SHT1x::SHT1x(int, int)'
    collect2: ld returned 1 exit status
    В чём может быть причина?

    Код SHT1x.h:
    Код (Text):
    #ifndef SHT1x_h
    #define SHT1x_h
     
    #if (ARDUINO >= 100)
    #include <Arduino.h>
    #else
    #include <WProgram.h>
    #endif
     
    class SHT1x
    {
      public:
        SHT1x(int dataPin, int clockPin);
        float readHumidity();
        float readTemperatureC();
        float readTemperatureF();
      private:
        int _dataPin;
        int _clockPin;
        int _numBits;
        float readTemperatureRaw();
        int shiftIn(int _dataPin, int _clockPin, int _numBits);
        void sendCommandSHT(int _command, int _dataPin, int _clockPin);
        void waitForResultSHT(int _dataPin);
        int getData16SHT(int _dataPin, int _clockPin);
        void skipCrcSHT(int _dataPin, int _clockPin);
    };
     
    #endif
     
  2. nailxx

    nailxx Официальный Нерд Администратор

    Это ошибка линкера, которая говорит о том, что объектый файл, являющийся результатом компиляции .cpp файла библиотеки, по тем или иным причинам не участвовал в линковке.

    Скорее всего вы не корректно разместили библиотеку. По какому пути она у вас? Какие файлы в директории? Можете выдать verbose-компиляции?
     
  3. Vir

    Vir Гик

    Уп-с... в очередной раз, глупая ошибка, связанная с тем, что я не положил cpp файл в директорию с библиотеками =(

    Всё заработало, спасибо!
     
  4. Vir

    Vir Гик

    Тем не менее, очень странные данные я с сенсора получаю:

    Код (Text):
    -39.27
    -39.62
    -37.46
    -37.81
    -38.06
    -38.15
    -38.21
    -38.38
    -38.48
    -38.52
    Код:
    Код (Text):
    #define DATA_PIN  42
    #define CLOCK_PIN 43
     
    SHT1x sht1x(DATA_PIN, CLOCK_PIN);
     
    float temperatureInbox;
    float humidityInbox;
     
    void SHT1xSensorInit()
    {
    }
     
    void SHT1xSensorHandler()
    {
      temperatureInbox = sht1x.readTemperatureC();
      humidityInbox = sht1x.readHumidity();
     
      Serial.println(temperatureInbox);
      delay(100);
    }
     
    float getTemperatureInbox()
    {
      return temperatureInbox;
    }
     
    float getHumidityInbox()
    {
      return humidityInbox;
    }
     
  5. Равиль

    Равиль Нуб

    Vir, что в итоге в со странными данными? У меня тоже самое.
    Вывожу в браузере через интернет-шилд: Температура -40.01 Влажность -4.69