пробегитесь по коду глазами

jahmal
Offline
Зарегистрирован: 01.06.2016

Добрый день)

Я совсем новичек, прошу пинать, матюгать, но в нужную сторону. Пишу небольшую программу для "теплички".

#include <LiquidCrystal.h>
#include <DHT.h>;

//TEMPERATURES//////
byte tmax  =  35; //
byte thigh =  27; //
byte tnorm =  25; //
byte tmin  =  20; //
////////////////////

static byte t1;
static byte t2;
static byte h1;

byte maxTemp = 0;
byte minTemp = 99;

//PINS/////////////////////////////////////////////
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

#define DHT1PIN 2
#define DHT2PIN 13
#define RELAY1  10  
#define RELAY2  1
#define RELAY3  12
#define RELAY4  3

#define DHT1TYPE DHT21   // DHT 21 (AM2301)
#define DHT2TYPE DHT21   // DHT 21 (AM2301)

DHT dht1(DHT1PIN, DHT1TYPE);
DHT dht2(DHT2PIN, DHT2TYPE);

unsigned long HpsOffTime;
bool HpsState;

void setup()
{
	Serial.begin(9600);
	Serial.println("Growbox 1.0 -- SERIAL MODE --");
	lcd.begin(16, 2);
	dht1.begin();
	dht2.begin();
	pinMode(RELAY1, OUTPUT);
	pinMode(RELAY2, OUTPUT);
	pinMode(RELAY3, OUTPUT);
	pinMode(RELAY4, OUTPUT);
	digitalWrite(RELAY1, HIGH);
	digitalWrite(RELAY2, HIGH);
	digitalWrite(RELAY3, HIGH);
	digitalWrite(RELAY4, LOW);
    HpsState = false;
}

void loop()
{
	t1=get_t1();
		delay(500);
	t2=get_t2();
		delay(500);
	h1=get_h1();
		delay(500);
	LCD();
	reley();
}

byte get_t1()
{
byte t1 = dht1.readTemperature();

	if ((isnan(t1)))
	{
	 return 0;
	}
	else
	{
     return t1;
	}
}

byte get_h1()
{
byte h1 = dht1.readHumidity();

	if ((isnan(h1)))
	{
	 return 0;
	}
	else
	{
     return h1;
	}
}

byte get_t2()
{
	byte t2 = dht2.readTemperature();

	if ((isnan(t2)))
	{
	 return 0;
	}
	else
	{
     return t2;
	}
}

byte max_t()
{
	if (t1 > maxTemp) maxTemp = t1;
	return maxTemp;
}

byte min_t()
{
if (t1 < minTemp && t1!=0)	minTemp = t1;
	return minTemp;
}

void reley()
{
//HIGH T/////////////////////////////////////////
	if(t1 >= thigh)
	{
		digitalWrite(RELAY2, LOW);
	}
	else if(t1 <= tnorm)
	{
		digitalWrite(RELAY2, HIGH);
	}
//NORM T/////////////////////////////////////////
	if(t1 >= tnorm)
	{
		digitalWrite(RELAY1, LOW);
	}
	else
	{
		digitalWrite(RELAY1, HIGH);
	}
//HEATER//////////////////////////////////////////////////
	if(t1 <= tmin && t1!=0)
	{
		digitalWrite(RELAY3, LOW);
	}
	else if(t1 >= tnorm && t1!=0)
	{
		digitalWrite(RELAY3, HIGH);
	}
//HPS////////////////////////////////////////////////////
	if (t1 >= tmax || t1==0)
	{
		digitalWrite(RELAY4, HIGH);
		HpsOffTime = millis();
		HpsState = true;
	}  
	
    if(HpsState)
    {    
    if(millis() - HpsOffTime > 300000 && t1!=0 && t1 <= tnorm)
    {
        digitalWrite(RELAY4, LOW);
        HpsState = false;
    }   
    }
   
}

void LCD()
{	lcd.setCursor(0, 0);
	lcd.print("T");
	lcd.setCursor(2, 0);
	lcd.print(get_t1());
	
	lcd.setCursor(0, 1);
	lcd.print("T");
	lcd.setCursor(2, 1);
	lcd.print(get_t2());
	
	lcd.setCursor(5, 0);
	lcd.print("Mx");
	lcd.setCursor(8, 0);
	lcd.print(max_t());	
	
	lcd.setCursor(5, 1);
	lcd.print("Mn");
	lcd.setCursor(8, 1);
	lcd.print(min_t());	
	
//	lcd.setCursor(11, 0);
//	lcd.print("I");
//	lcd.setCursor(13, 0);
//	lcd.print(H_INDEX);		
	
	lcd.setCursor(11, 1);
	lcd.print("H");
	lcd.setCursor(13, 1);
	lcd.print(h1);	
	
}

 

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

код гавно - delay(500);

jahmal
Offline
Зарегистрирован: 01.06.2016

А как тогда дать время подумать по другому, если даже офф. образец сделан на "дилай"

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

jahmal пишет:

А как тогда дать время подумать по другому, если даже офф. образец сделан на "дилай"

если официальный образец - гавно, то твой код - не гавно. это логично.

http://arduino.ru/tutorials/BlinkWithoutDelay

jahmal
Offline
Зарегистрирован: 01.06.2016

Нуу, хорошо это переделаем. В планах подключить GSM и будет тупо пропустить смс во время дилай...

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

jahmal пишет:

во время дилай...

снова за рыбу деньги - нет делай, забудь о делай.

класс титановый велосипед для delay без delay().

jahmal
Offline
Зарегистрирован: 01.06.2016
#include <LiquidCrystal.h>
#include <DHT.h>;

//TEMPERATURES//////
byte tmax  =  35; //
byte thigh =  27; //
byte tnorm =  25; //
byte tmin  =  20; //
////////////////////

static byte t1;
static byte t2;
static byte h1;

byte maxTemp = 0;
byte minTemp = 99;

//PINS/////////////////////////////////////////////
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

#define DHT1PIN 2
#define DHT2PIN 13
#define RELAY1  10  
#define RELAY2  1
#define RELAY3  12
#define RELAY4  3

#define DHT1TYPE DHT21   // DHT 21 (AM2301)
#define DHT2TYPE DHT21   // DHT 21 (AM2301)

DHT dht1(DHT1PIN, DHT1TYPE);
DHT dht2(DHT2PIN, DHT2TYPE);

unsigned long HpsOffTime;
bool HpsState;

unsigned long interval = 1000;

long prevt1 = 0;
long prevt2 = 0;
long prevh1 = 0;

void setup()
{
	Serial.begin(9600);
	Serial.println("Growbox 1.0 -- SERIAL MODE --");
	lcd.begin(16, 2);
	dht1.begin();
	dht2.begin();
	pinMode(RELAY1, OUTPUT);
	pinMode(RELAY2, OUTPUT);
	pinMode(RELAY3, OUTPUT);
	pinMode(RELAY4, OUTPUT);
	digitalWrite(RELAY1, HIGH);
	digitalWrite(RELAY2, HIGH);
	digitalWrite(RELAY3, HIGH);
	digitalWrite(RELAY4, LOW);
    HpsState = false;
}

void loop()
{
	unsigned long currentMillis = millis();
	 
    if(currentMillis - prevt1 > interval) {
    prevt1 = currentMillis; 
   	t1=get_t1();
    }
	
	if(currentMillis - prevt2 > interval) {
    prevt2 = currentMillis; 
   	t1=get_t2();
    }
	
	if(currentMillis - prevh1 > interval) {
    prevh1 = currentMillis; 
   	t1=get_h1();
    }
	
	
	LCD();
	reley();
}

byte get_t1()
{
byte t1 = dht1.readTemperature();

	if ((isnan(t1)))
	{
	 return 0;
	}
	else
	{
     return t1;
	}
}

byte get_h1()
{
byte h1 = dht1.readHumidity();

	if ((isnan(h1)))
	{
	 return 0;
	}
	else
	{
     return h1;
	}
}

byte get_t2()
{
	byte t2 = dht2.readTemperature();

	if ((isnan(t2)))
	{
	 return 0;
	}
	else
	{
     return t2;
	}
}

byte max_t()
{
	if (t1 > maxTemp) maxTemp = t1;
	return maxTemp;
}

byte min_t()
{
if (t1 < minTemp && t1!=0)	minTemp = t1;
	return minTemp;
}

void reley()
{
//HIGH T/////////////////////////////////////////
	if(t1 >= thigh)
	{
		digitalWrite(RELAY2, LOW);
	}
	else if(t1 <= tnorm)
	{
		digitalWrite(RELAY2, HIGH);
	}
//NORM T/////////////////////////////////////////
	if(t1 >= tnorm)
	{
		digitalWrite(RELAY1, LOW);
	}
	else
	{
		digitalWrite(RELAY1, HIGH);
	}
//HEATER//////////////////////////////////////////////////
	if(t1 <= tmin && t1!=0)
	{
		digitalWrite(RELAY3, LOW);
	}
	else if(t1 >= tnorm && t1!=0)
	{
		digitalWrite(RELAY3, HIGH);
	}
//HPS////////////////////////////////////////////////////
	if (t1 >= tmax || t1==0)
	{
		digitalWrite(RELAY4, HIGH);
		HpsOffTime = millis();
		HpsState = true;
	}  
	
    if(HpsState)
    {    
    if(millis() - HpsOffTime > 300000 && t1!=0 && t1 <= tnorm)
    {
        digitalWrite(RELAY4, LOW);
        HpsState = false;
    }   
    }
   
}

void LCD()
{	lcd.setCursor(0, 0);
	lcd.print("T");
	lcd.setCursor(2, 0);
	lcd.print(get_t1());
	
	lcd.setCursor(0, 1);
	lcd.print("T");
	lcd.setCursor(2, 1);
	lcd.print(get_t2());
	
	lcd.setCursor(5, 0);
	lcd.print("Mx");
	lcd.setCursor(8, 0);
	lcd.print(max_t());	
	
	lcd.setCursor(5, 1);
	lcd.print("Mn");
	lcd.setCursor(8, 1);
	lcd.print(min_t());	
	
//	lcd.setCursor(11, 0);
//	lcd.print("I");
//	lcd.setCursor(13, 0);
//	lcd.print(H_INDEX);		
	
	lcd.setCursor(11, 1);
	lcd.print("H");
	lcd.setCursor(13, 1);
	lcd.print(h1);	
	
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

jahmal пишет:

А как тогда дать время подумать по другому, если даже офф. образец сделан на "дилай"

Не парьтесь на делэефобов.

Делэй плохо когда процессору есть чем заняться другим. Если у Вас ему всё равно больше нечего делать, то делай не страшен. Конечно, лучше бы не использовать delay а просто на это время выключить питание (перейти в режим power-down), но если гринпису не говорить, что Вы этого не делаете, то и ничего :)

Никогда не ссылайтесь на т.н. "офф. образцы" - ничего кроме смеха Вы этим не вызовете. Назначение этих примеров - показать, что устройство работает и всё. Поэтому их авторы не парятся например над тем, что их код сожрёт столько ресурсов, что кроме него уже никто работать не сможет.