Зависает ардуино уно.

seruy137
Offline
Зарегистрирован: 25.06.2016
 Начал заниматься ардуино приблизительно недели четыре. Соединил в кучу два скетча. Для проветривания теплицы. Если температура подымается выше 21 градуса открываются окна и включается проветривание. Все работает, но при падении температуры до 21 градуса  все виснет. 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);
}
Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

сначала копать вот сюда: "Вставка программного кода в тему/комментарий" Второй топик уже запорол . . .