помощь в отказе от delay
- Войдите на сайт для отправки комментариев
Сб, 12/03/2016 - 11:19
#include "DHT.h" // библиотека датчика температуры
#define DHTPIN 13
#define DHTTYPE DHT11 // DHT 11 в зависимости от датчика температуры
// Connect pin 1 (on the left) of the sensor to +5V
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
DHT dht(DHTPIN, DHTTYPE);
int five_volts_Pin = 12;
char incomingByte; // входящие данные
int diodBlue=4;
int diodGreen=3;
int diodRed=2;
int nasos=5;
int servo=6;
int PhotosensorPin=A5; // датчик света на ногу А5 через рез 10кОм
unsigned int sensorValue = 0;
int sensor=9; // VCC датчика подключить к пину 9
void setup()
{
Serial.begin(9600);
pinMode(diodBlue,OUTPUT);
pinMode(diodGreen,OUTPUT);
pinMode(diodRed,OUTPUT);
pinMode(nasos,OUTPUT);
pinMode(sensor,OUTPUT);
pinMode(servo,OUTPUT);
pinMode(five_volts_Pin, OUTPUT);
digitalWrite(five_volts_Pin, HIGH);
Serial.println("DHTxx test!");
digitalWrite(sensor, LOW); delay(5000);
dht.begin();
}
void loop()
{
sensorValue = analogRead(PhotosensorPin);
Serial.println(analogRead(0)); // сигнальный датчика влажности к АО
digitalWrite(sensor, LOW);
delay(5000); // увеличить в разы в конечном устройстве
digitalWrite(sensor, HIGH);
delay(500);
if (Serial.available() > 0)
//если пришли данные
{
incomingByte = Serial.read(); // считываем байт
if(incomingByte == '1') digitalWrite(nasos, LOW); // если 1, то выключаем nasos
if(incomingByte == '2') digitalWrite(nasos, HIGH); // если 2, то включаем nasos
if(incomingByte == '3') digitalWrite(servo, LOW); // если 3, то выключаем servo
if(incomingByte == '4') digitalWrite(servo, HIGH); // если 4, то включаем servo
}
if (analogRead(0) >= 900 ) // Очень сухая почва добавить && sensorValue < 500
{
Serial.print("Cyxo ");
digitalWrite(diodBlue, HIGH);
digitalWrite(diodGreen, LOW);
digitalWrite(diodRed, LOW);
digitalWrite(nasos,HIGH);
delay(5000); // включить на длительное время
digitalWrite(nasos,LOW);
}
else if( analogRead(0)>300 && analogRead(0) <900 && sensorValue < 500) // влажная почва
{
Serial.print("HOPMA "); // Влажная почва
digitalWrite(diodGreen,HIGH);
digitalWrite(diodBlue, LOW);
digitalWrite(diodRed, LOW);
digitalWrite(nasos,HIGH);
delay(500); // включить на короткое время
digitalWrite(nasos,LOW);
}
else if( analogRead(0)>10 && analogRead(0)<300)
{
digitalWrite(diodRed,HIGH);// Мокрая почва
Serial.print("MOKPO ");
digitalWrite(diodBlue, LOW);
digitalWrite(diodGreen, LOW);
}
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(t) || isnan(h))
{
Serial.println("Нет данных ");
}
else
{
Serial.print("Влажность: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Температура: ");
Serial.print(t);
Serial.println(" *C");
}
}
// delay(xxx);
Добрый день форумчане.
строки 046-049 для того, что бы датчик влажности не окислялся, питание на него подается в момент замера на 2 сек через 1 час. в момент остановки программы на 1 час через функцию delay, другие опции становятся не доступными. на сайте нашел как подавать питаниен на ногу без этой функции, но проблема в том, что время LOW равно времени HIGT. как можно обойти?
http://arduino.ru/tutorials/BlinkWithoutDelay