Зависает ардуино уно.
- Войдите на сайт для отправки комментариев
Сб, 25/06/2016 - 17:37
Начал заниматься ардуино приблизительно недели четыре. Соединил в кучу два скетча. Для проветривания теплицы. Если температура подымается выше 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);
}
сначала копать вот сюда: "Вставка программного кода в тему/комментарий" Второй топик уже запорол . . .