Помогите с dht11

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем Realtec, 9 ноя 2014.

  1. Realtec

    Realtec Нуб

    dht11 работает то есть выдаёт температуру и влажность, но я подключил его к реле и он работать перестал, скорее всего проблема в коде(может быть я входы и выходы для датчика неправильно прописал),подскажите пожалуйста кто понимает.
    Код (Text):

    int coll_1 = 12;            //1 куллер
    int coll_2= 11;            //2 куллер
    int lamp = 9;              //лампа
    int pomp = 13;              //помпа
    int temp = 30;              //температура включения куллеров
    int vlag = 99;              //влажность включения помпы
    int temp_raz = 99;          //разница температуры
    int vlag_raz = 99;          //разница влажности
    int sensePin=2;            //фоторезистор
    int val ;

    ///---Не моё---///
    const int VAL_PROBE = 1; // Analog pin 0
    const int MOISTURE_LEVEL = 250; // the value after the LED goes ON
    #define DHT11_PIN 0 // Устанавливаем для работы 0 аналоговый порт

    byte read_dht11_dat()

    {
      byte i = 0;
      byte result=0;
      for(i=0; i< 8; i++)
      {
        while(!(PINC & _BV(DHT11_PIN)))
        {
        }; // Ждем, пока на 0 аналоговом порте не будет '1'
        delayMicroseconds(30);
        if(PINC & _BV(DHT11_PIN)) // Если после 30 мкс на 0 аналоговом порте до сих пор '1'
          result |=(1<<(7-i)); // Записываем результат
        while((PINC & _BV(DHT11_PIN))); // Ждем окончания '1'
      }
      return result;
    }
    ///---Не моё---///

    int Fcoll(int i){      //управление куллерами
      digitalWrite(coll_1, i);
      digitalWrite(coll_2, i);
    }

    int Flamp(int i){      //управление лампой
      digitalWrite(lamp, i);
    }

    int Fpomp(int i){      //управление помпой
      digitalWrite(pomp, i);
    }

    void setup() {
      Serial.begin(9600);
      pinMode(coll_1, OUTPUT);  //1 куллер
      pinMode(coll_2, OUTPUT);  //2 куллер
      pinMode(lamp, OUTPUT);    //лампа
      pinMode(pomp, OUTPUT);    // помпа
      ///---Не моё---///
      DDRC |= _BV(DHT11_PIN); // Устанавливаем 0 аналоговый порт, как output
      PORTC |= _BV(DHT11_PIN); // Устанавливаем начальное значение порта в '1'
      Serial.begin(9600);
      Serial.println("Ready");
      analogReference(DEFAULT);
      ///---Не моё---///
    }

    ///---Не моё---///
    void LedState(int state) {
        digitalWrite(13, state);
    }
    ///---Не моё---///

    void loop() {
    ///---Не моё---///
    int moisture = analogRead(VAL_PROBE);
        Serial.println(moisture);
        if(moisture > MOISTURE_LEVEL) {
            LedState(HIGH);
        } else  {
            LedState(LOW);
        }
        delay(100);
        byte dht11_dat[5];
      byte dht11_in;
      byte i;
      PORTC &= ~_BV(DHT11_PIN);
      delay(18);
      PORTC |= _BV(DHT11_PIN);
      delayMicroseconds(1);
      DDRC &= ~_BV(DHT11_PIN); // Устанавливаем 0 аналоговый порт, как input
      delayMicroseconds(40);
      dht11_in = PINC & _BV(DHT11_PIN); // считываем только 0 порт
      if(dht11_in)
      {
        Serial.println("dht11 start condition 1 not met"); // Ждем ответ от DHT:  LOW
        delay(1000);
        return;
      }
      delayMicroseconds(80);
      dht11_in = PINC & _BV(DHT11_PIN); //
      if(!dht11_in)
      {
        Serial.println("dht11 start condition 2 not met"); // Ждем второй ответ от DHT: HIGH
        return;
      }
      delayMicroseconds(80);// Готовимся к приему данных
      for (i=0; i<5; i++)
      {
        dht11_dat[i] = read_dht11_dat();
      } // Получаем 40 бит данных
      DDRC |= _BV(DHT11_PIN); // Устанавливаем 0 аналоговый порт в положение output, после того, как все данные получены
      PORTC |= _BV(DHT11_PIN); // Устанавливаем значение этого порта в '1', после того, как все данные получены
      byte dht11_check_sum = dht11_dat[0]+dht11_dat[1]+dht11_dat[2]+dht11_dat[3];// Проверяем контрольную сумму
      if(dht11_dat[4]!= dht11_check_sum)
      {
        Serial.println("DHT11 checksum error");
      }
      Serial.print("Current humdity = ");
      Serial.print(dht11_dat[0], DEC);
      Serial.print(".");
      Serial.print(dht11_dat[1], DEC);
      Serial.print("% ");
      Serial.print("temperature = ");
      Serial.print(dht11_dat[2], DEC);
      Serial.print(".");
      Serial.print(dht11_dat[3], DEC);
      Serial.println("C ");
      delay(2000); // Время ожидания датчика
    ///---Не моё---///
    if(dht11_dat[0] <= temp){
      Fcoll(HIGH);
    }
    if(dht11_dat[2] <= vlag){
      Fpomp(HIGH);
    }
    if(dht11_dat[0] >= temp_raz){
      Fcoll(LOW);
    }
    if(dht11_dat[2] >= vlag_raz){
      Fpomp(LOW);
    }
    val=analogRead(sensePin);
    if(val<800)Flamp(HIGH);
    else Flamp(LOW);
    }