пробегитесь по коду глазами
- Войдите на сайт для отправки комментариев
Ср, 01/06/2016 - 13:06
Добрый день)
Я совсем новичек, прошу пинать, матюгать, но в нужную сторону. Пишу небольшую программу для "теплички".
#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);
}
код гавно - delay(500);
А как тогда дать время подумать по другому, если даже офф. образец сделан на "дилай"
А как тогда дать время подумать по другому, если даже офф. образец сделан на "дилай"
если официальный образец - гавно, то твой код - не гавно. это логично.
http://arduino.ru/tutorials/BlinkWithoutDelay
Нуу, хорошо это переделаем. В планах подключить GSM и будет тупо пропустить смс во время дилай...
во время дилай...
снова за рыбу деньги - нет делай, забудь о делай.
класс титановый велосипед для delay без delay().
#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); }А как тогда дать время подумать по другому, если даже офф. образец сделан на "дилай"
Не парьтесь на делэефобов.
Делэй плохо когда процессору есть чем заняться другим. Если у Вас ему всё равно больше нечего делать, то делай не страшен. Конечно, лучше бы не использовать delay а просто на это время выключить питание (перейти в режим power-down), но если гринпису не говорить, что Вы этого не делаете, то и ничего :)
Никогда не ссылайтесь на т.н. "офф. образцы" - ничего кроме смеха Вы этим не вызовете. Назначение этих примеров - показать, что устройство работает и всё. Поэтому их авторы не парятся например над тем, что их код сожрёт столько ресурсов, что кроме него уже никто работать не сможет.