Не работает DHT11 на leonardo

Обсуждаем Arduino, Raspberry Pi и другие электронные компоненты и проекты DIY
Ответить
avlev
Сообщения: 1
Зарегистрирован: 19 окт 2012, 17:04

Не работает DHT11 на leonardo

Сообщение avlev »

У меня не удалось подключить датчик влажности DHT11 к arduino leonardo. Скрипты, которые лежат на сайте производителя работают с UNO норамльно, а с леонардо выдают ошибку dht11 start condition 2 not met
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
Сообщения: 1020
Зарегистрирован: 22 окт 2010, 23:57

Re: Не работает DHT11 на leonardo

Сообщение Mr.Kubikus »

Привет!

Скрипты, которые лежат на сайте DFROBOT немного кривоваты в плане того, что они работают с аппаратным обеспечением на очень низком уровне

Мне удалось заставить работать DHT11 с Leonardo на таком примере:

Код: Выделить всё

#define dht11_pin 2 //Digital Pin 2 on Leonardo
  
byte read_dht11_dat()
{
  byte i = 0;
  byte result=0;
  for(i=0; i< 8; i++)
  {
    while (!digitalRead(dht11_pin));
    delayMicroseconds(30);
    if (digitalRead(dht11_pin) != 0 )
      bitSet(result, 7-i);
    while (digitalRead(dht11_pin));
  }
  return result;
}
  
  
void setup()
{
  pinMode(dht11_pin, OUTPUT);
  digitalWrite(dht11_pin, HIGH);
  Serial.begin(9600);
  Serial.println("Ready");
}
      
void loop()   
{
  byte dht11_dat[5];  
  byte dht11_in;
  byte i;// start condition
       
  digitalWrite(dht11_pin, LOW);
  delay(18);
  digitalWrite(dht11_pin, HIGH);
  delayMicroseconds(1);
  pinMode(dht11_pin, INPUT);
  delayMicroseconds(40);    
    
  if (digitalRead(dht11_pin))
  {
    Serial.println("dht11 start condition 1 not met"); // wait for DHT response signal: LOW
    delay(1000);
    return;
  }
  delayMicroseconds(80);
  if (!digitalRead(dht11_pin))
  {
    Serial.println("dht11 start condition 2 not met");  //wair for second response signal:HIGH
    return;
  }
    
  delayMicroseconds(80);// now ready for data reception
  for (i=0; i<5; i++)
  {  dht11_dat[i] = read_dht11_dat();}  //recieved 40 bits data. Details are described in datasheet
    
  pinMode(dht11_pin, OUTPUT);
  digitalWrite(dht11_pin, HIGH);
  byte dht11_check_sum = dht11_dat[0]+dht11_dat[2];// check check_sum
  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("temperature = ");
  Serial.print(dht11_dat[2], DEC);
  Serial.println("C  ");
  delay(2000); //fresh time
}

Для этого примера датчик надо подключить к входу D2 или к любому цифровому пину с соответствующим изменением в коде:
#define dht11_pin 2 //Digital Pin 2 on Leonardo
С уважением, Григорий
GitHub FB ВК
Ответить