датчик температуры DTH11 + attiny2313a

Тема в разделе "Arduino & Shields", создана пользователем Максим B, 17 июл 2013.

  1. Максим B

    Максим B Гуру

    Всем привет. Пробую работать с программатором через arduino v3. Со светодиодами все получилось. Теперь хочу подключить датчик температуры и залить такой скетч
    Код (C):
    // подключаем библиотеку
    #include <dht.h>
     
    // создаём объект-сенсор
    DHT sensor = DHT();
     
    void setup()
    {
        Serial.begin(9600);
     
        // методом attach объявляем к какому контакту подключен
        // сенсор. В нашем примере это нулевой аналоговый контакт
        sensor.attach(1);
        //
        // после подачи питания ждём секунду до готовности сенсора к работе
        delay(1000);
    }
     
    void loop()
    {
        // метод update заставляет сенсор выдать текущие измерения
        sensor.update();
     
        switch (sensor.getLastError())
        {
            case DHT_ERROR_OK:
                char msg[128];
                // данные последнего измерения можно считать соответствующими
                // методами
                sprintf(msg, "Temperature = %dC, Humidity = %d%%",
                        sensor.getTemperatureInt(), sensor.getHumidityInt());
                Serial.println(msg);
                break;
            case DHT_ERROR_START_FAILED_1:
                Serial.println("Error: start failed (stage 1)");
                break;
            case DHT_ERROR_START_FAILED_2:
                Serial.println("Error: start failed (stage 2)");
                break;
            case DHT_ERROR_READ_TIMEOUT:
                Serial.println("Error: read timeout");
                break;
            case DHT_ERROR_CHECKSUM_FAILURE:
                Serial.println("Error: checksum error");
                break;
        }
     
        delay(2000);
    }
    Компилятор выдает такую ошибку:
    c:/arduino-1.0.4/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr25/crttn2313.o:(.init9+0x2): relocation truncated to fit: R_AVR_13_PCREL against symbol `exit' defined in .fini9 section in c:/arduino-1.0.4/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/avr25\libgcc.a(_exit.o).

    Что не так???
     
  2. nailxx

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

    Это не компилятор, это линкер ругается. При этом не могу понять на что. Это всё, что он выводит?
     
  3. Максим B

    Максим B Гуру

    Да (( Если в данной строке сделать так sensor.attach(A0); , то все ОК. А если сделать как у меня sensor.attach(1); , то ошибка. Я хотел получить значения температуры с Attiny 2313
     
  4. Unixon

    Unixon Оракул Модератор

    А размер кода какой получается?
     
  5. Максим B

    Максим B Гуру

    Размер скетча в двоичном коде: 5 004 байт (из 30 720 байт максимум)
     
  6. Unixon

    Unixon Оракул Модератор

    Ну а у ATtiny2313 всего 1Kb памяти для кода, вы написали программу в 5 раз больше, чем может поместиться в этот контроллер. Вы же его используете, да?
     
  7. Максим B

    Максим B Гуру

  8. Megakoteyka

    Megakoteyka Оракул Модератор

    Не стоит отчаиваться, попробуйте переписать код на чистом С, без использования библиотек ))
     
  9. fr0ster

    fr0ster Гик

    У вас в схеме предусмотрено подключение по сериал порту?
    Зачем в setup() вызов Serial.begin(9600)?
    Мк attiny2313a у вас чистый или с ардуиновским бутлодером?
    Потом правильный вызов sensor.attach(A0), A0 это целочисленная константа.

    В общем возможно вам просто код вызывающий serial надо выкинуть, он только на плате будет работать или если ваша схема умеет писать в последовательный порт.
     
  10. Максим B

    Максим B Гуру

    1. Нет нет предусмотрено
    2. Взял готовый рабочий код.
    3. Мк attiny2313a - чистый, заливаю в него скетч через ардуино.

    А как тогда исправить код ??? Просто в си не силен. Спасибо.
     
  11. fr0ster

    fr0ster Гик

    Возможно так.
    Вместо закоментированного кода вставьте свою обработку.
    Код (C):
    // подключаем библиотеку
    #include <dht.h>
     
    // создаём объект-сенсор
    DHT sensor = DHT();
     
    void setup()
    {
        // методом attach объявляем к какому контакту подключен
        // сенсор. В нашем примере это нулевой аналоговый контакт
        sensor.attach(A0);
        //
        // после подачи питания ждём секунду до готовности сенсора к работе
        delay(1000);
    }
     
    void loop()
    {
        // метод update заставляет сенсор выдать текущие измерения
        sensor.update();
     
        switch (sensor.getLastError())
        {
            case DHT_ERROR_OK:
    //          char msg[128];
    //          // данные последнего измерения можно считать соответствующими
    //          // методами
    //          sprintf(msg, "Temperature = %dC, Humidity = %d%%",
    //                  sensor.getTemperatureInt(), sensor.getHumidityInt());
    //          Serial.println(msg);
                break;
            case DHT_ERROR_START_FAILED_1:
    //          Serial.println("Error: start failed (stage 1)");
                break;
            case DHT_ERROR_START_FAILED_2:
    //          Serial.println("Error: start failed (stage 2)");
                break;
            case DHT_ERROR_READ_TIMEOUT:
    //          Serial.println("Error: read timeout");
                break;
            case DHT_ERROR_CHECKSUM_FAILURE:
    //          Serial.println("Error: checksum error");
                break;
        }
     
        delay(2000);
    }
     
  12. Максим B

    Максим B Гуру

    пасиб. буду пробовать