#1 Програмування Arduino » Зависает arduino uno. » 2016-06-23 19:08:13

seruy137
відповідей: 3

Начал заниматься ардуино приблизительно недели четыре. Соединил в кучу два скетча. Для проветривания теплицы. Если температура подымается выше 21 градуса открываются окна и включается проветривание. Все работает, но при падении температуры до 21 градуса иногда 22 градуса все виснет. DHT11  не реагирует на принудительное повышение температуры, на lcd температура 21 градус. Но окна открыты и проветривание работает. При отключении и включении все начинает работать как надо. Прошу помощи у знающих, подскажите куда копать.


    Первый.


#include <dht.h>



#define dht_apin A1 // Analog Pin sensor is connected to

dht DHT;
int relepin = 4;
int releA = 3;
int releB = 5;
int releC = 6;
int releD = 7;
int releE = 8;
int releF = 9;
int releG = 10;
int releH = 11;

void setup(){
pinMode(relepin, OUTPUT);
pinMode(releA, OUTPUT);
pinMode(releB, OUTPUT);
pinMode(releC, OUTPUT);
pinMode(releD, OUTPUT);
pinMode(releE, OUTPUT);
pinMode(releF, OUTPUT);
pinMode(releG, OUTPUT);
pinMode(releH, OUTPUT);
Serial.begin(9600);
delay(500);//Delay to let system boot
Serial.println("DHT11 Humidity & temperature Sensor\n\n");
delay(1000);//Wait before accessing Sensor
}//end "setup()"

void loop(){
//Start of Program
DHT.read11(dht_apin);
Serial.print("Current humidity = ");
Serial.print(DHT.humidity);
Serial.print("%  ");
Serial.print("temperature = ");
Serial.print(DHT.temperature);
Serial.println("C  ");

if (DHT.temperature < 21){
digitalWrite(relepin, HIGH);
digitalWrite(releA, HIGH);
digitalWrite(releH, HIGH);
digitalWrite(releD, HIGH);
digitalWrite(releE, HIGH);
   digitalWrite(releB, LOW);
   digitalWrite(releC, LOW);
   digitalWrite(releF, LOW);
   digitalWrite(releG, LOW);

  }
  else { digitalWrite(relepin, LOW);
         digitalWrite(releA, LOW);
         digitalWrite(releH, LOW);
         digitalWrite(releD, LOW);
         digitalWrite(releE, LOW);
   digitalWrite(releB, HIGH);
   digitalWrite(releC, HIGH);
   digitalWrite(releF, HIGH);
   digitalWrite(releG, HIGH); 
 
  }
       
delay(5000);
}//end "setup()"

   
    Второй.


//Тестировалось на Arduino IDE 1.0.5
#include <Wire.h>        // Добавляем необходимые библиотеки
#include <LiquidCrystal_I2C.h>
#include <dht11.h>
dht11 DHT;               // Объявление переменной класса dht11
#define DHT11_PIN A1     // Датчик DHT11 подключен к цифровому пину номер 4

byte degree[8] =         // Битовая маска символа градуса
{
  B00111,
  B00101,
  B00111,
  B00000,
  B00000,
  B00000,
  B00000,
};   

LiquidCrystal_I2C lcd(0x27,16,2);   // Задаем адрес и размерность дисплея

void setup()
{
  lcd.init();                       // Инициализация lcd             
  lcd.backlight();                  // Включаем подсветку
  lcd.createChar(1, degree);        // Создаем символ под номером 1
}

void loop()
{
  // Выводим показания влажности и температуры
  lcd.setCursor(0, 0);              // Устанавливаем курсор в начало 1 строки
  lcd.print("Humidity =    % ");     // Выводим текст
  lcd.setCursor(11, 0);
  lcd.print(DHT.humidity, 1);
  lcd.setCursor(0, 1);              // Устанавливаем курсор в начало 2 строки
  lcd.print("Temp     =   \1C ");    // Выводим текст, \1 - значок градуса
  lcd.setCursor(11, 1);             
  lcd.print(DHT.temperature,1); 

  int chk;   
  ; // Мониторинг ошибок
  chk = DHT.read(DHT11_PIN);    // Чтение данных
  switch (chk){
  case DHTLIB_OK: 
    break;
  case DHTLIB_ERROR_CHECKSUM: 
    lcd.clear();
    lcd.print("Checksum error"); 
    break;
  case DHTLIB_ERROR_TIMEOUT:
    lcd.clear();
    lcd.print("Time out error");
    break;
  default:
    lcd.clear();
    lcd.print("Unknown error");
    break;
  }
  delay(1000);                     
}

    То что вышло.


//Тестировалось на Arduino IDE 1.0.5
#include <Wire.h>        // Добавляем необходимые библиотеки
#include <LiquidCrystal_I2C.h>
#include <dht11.h>
dht11 DHT;               // Объявление переменной класса dht11
#define DHT11_PIN A1     // Датчик DHT11 подключен к цифровому пину номер 4

byte degree[8] =         // Битовая маска символа градуса
{
  B00111,
  B00101,
  B00111,
  B00000,
  B00000,
  B00000,
  B00000,
};   

LiquidCrystal_I2C lcd(0x27,16,2);   // Задаем адрес и размерность дисплея
int relepin = 4;
int releA = 3;
int releB = 5;
int releC = 6;
int releD = 7;
int releE = 8;
int releF = 9;
int releG = 10;
int releH = 11;

void setup()
{
  lcd.init();                       // Инициализация lcd             
  lcd.backlight();                  // Включаем подсветку
  lcd.createChar(1, degree); // Создаем символ под номером 1
pinMode(relepin, OUTPUT);
pinMode(releA, OUTPUT);
pinMode(releB, OUTPUT);
pinMode(releC, OUTPUT);
pinMode(releD, OUTPUT);
pinMode(releE, OUTPUT);
pinMode(releF, OUTPUT);
pinMode(releG, OUTPUT);
pinMode(releH, OUTPUT);
Serial.begin(9600);
delay(500);//Delay to let system boot
Serial.println("DHT11 Humidity & temperature Sensor\n\n");
delay(1000);//Wait before accessing Sensor 
 
}

void loop()
{
  // Выводим показания влажности и температуры
  lcd.setCursor(0, 0);              // Устанавливаем курсор в начало 1 строки
  lcd.print("Humidity =    % ");     // Выводим текст
  lcd.setCursor(11, 0);
  lcd.print(DHT.humidity, 1);
  lcd.setCursor(0, 1);              // Устанавливаем курсор в начало 2 строки
  lcd.print("Temp     =   \1C ");    // Выводим текст, \1 - значок градуса
  lcd.setCursor(11, 1);             
  lcd.print(DHT.temperature,1);

  if (DHT.temperature < 21){
digitalWrite(relepin, HIGH);
digitalWrite(releA, HIGH);
digitalWrite(releH, HIGH);
digitalWrite(releD, HIGH);
digitalWrite(releE, HIGH);
   digitalWrite(releB, LOW);
   digitalWrite(releC, LOW);
   digitalWrite(releF, LOW);
   digitalWrite(releG, LOW);

  }
  else { digitalWrite(relepin, LOW);
         digitalWrite(releA, LOW);
         digitalWrite(releH, LOW);
         digitalWrite(releD, LOW);
         digitalWrite(releE, LOW);
   digitalWrite(releB, HIGH);
   digitalWrite(releC, HIGH);
   digitalWrite(releF, HIGH);
   digitalWrite(releG, HIGH); 
  }
  int chk;   
  ; // Мониторинг ошибок
  chk = DHT.read(DHT11_PIN);    // Чтение данных
  switch (chk){
  case DHTLIB_OK: 
    break;
  case DHTLIB_ERROR_CHECKSUM: 
    lcd.clear();
    lcd.print("Checksum error"); 
    break;
  case DHTLIB_ERROR_TIMEOUT:
    lcd.clear();
    lcd.print("Time out error");
    break;
  default:
    lcd.clear();
    lcd.print("Unknown error");
    break;
  }delay(1000);
}

Підвал форуму