датчик, реле, кнопка HELP

Anton64
Offline
Зарегистрирован: 04.05.2017

День добрый, есть датчик влажности и температуры DHT11, реле, кнопка.

Расклад такой: горит лампа => я дышу на датчик => лампы выключается => нажимаю кнопку => лампа включается. 

Как я понял, два различных кода нельзя загрузить в ардуино? то есть один заменяет другой, надо походу объединить код для кнопки и код датчика. Вот мой код для датчика, помогите в него вставить кнопку. Буду очень благодарен. 

#include <dht.h>
 

 
#define dht_apin A0 // Analog Pin sensor is connected to
 
dht DHT;

int relepin = 4;
 

void setup(){

  pinMode(relepin, 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  ");
 
  delay(2000);
  
  if(DHT.humidity > 79.00) digitalWrite(relepin, HIGH);
  else digitalWrite(relepin, LOW);
  
  //Wait 5 seconds before accessing sensor again.
 
  //Fastest should be once every two seconds.
 
}// end loop() 

 

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

А сами чего не вставите? Вы хотя бы попробовали? Или сразу сюда прибежали?

Anton64
Offline
Зарегистрирован: 04.05.2017

Предполагаемый код для кнопки вот, если загрузить отедельно от кода датчика, то кнопка работает, я тщетно пытался объединить их в один код, но не смог, прошу помощи специалистов :) 

/* sketch 
turn on a fan using a relay and a button
*/
int pinButton = 8;
int Relay = 4;
int stateRelay = LOW;
int stateButton;
int previous = LOW;
long time = 0;
long debounce = 500;
 
void setup() {
  pinMode(pinButton, INPUT);
  pinMode(Relay, OUTPUT);
}
 
void loop() {
  stateButton = digitalRead(pinButton);  
  if(stateButton == HIGH && previous == LOW && millis() - time > debounce) {
    if(stateRelay == HIGH){
      stateRelay = LOW; 
    } else {
       stateRelay = HIGH; 
    }
    time = millis();
  }
  digitalWrite(Relay, stateRelay);
  previous == stateButton;
}

 

Anton64
Offline
Зарегистрирован: 04.05.2017

у меня получалось так, что либо кнопка переключала реле, но датчик не считывал показатели, либо наоборот, датчик работает, но кнопка не переключает. 

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

Вы не ответлили на вопрос. Вы пытались сами совместить? Или сразу сюда прибежали?

Anton64
Offline
Зарегистрирован: 04.05.2017

ЕвгенийП пишет:

Вы не ответлили на вопрос. Вы пытались сами совместить? Или сразу сюда прибежали?

 когда я пытался совместить эти два кода, нормально работала кнопка, а датчик не хотел считывать показания и не регировал на дыхание.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Anton64, видите ли, не любые два кода допускают объединение. Чтобы код допускал объединение, в нем, в частности, должен отсутствовать вызов delay(). 

Код для кнопки написан правильно, а для датчика - нет.

Чтобы можно было объединить, нужно сначала переписать код для датчика в том же стиле, что написан для кнопки, т.е. убрать из него delay.

Anton64
Offline
Зарегистрирован: 04.05.2017

andriano пишет:

Anton64, видите ли, не любые два кода допускают объединение. Чтобы код допускал объединение, в нем, в частности, должен отсутствовать вызов delay(). 

Код для кнопки написан правильно, а для датчика - нет.

Чтобы можно было объединить, нужно сначала переписать код для датчика в том же стиле, что написан для кнопки, т.е. убрать из него delay.

Более менее похоже? Нашёл на одном иностранном форуме.

#include "DHT.h"

#define DHTPIN A0     // what pin we're connected to

// Uncomment whatever type you're using!
//#define DHTTYPE DHT11   // DHT 11 
#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

DHT dht(DHTPIN, DHTTYPE);

void setup() 
{
    Serial.begin(9600); 
    Serial.println("DHTxx test!");

    dht.begin();
}

void loop() 
{
    // Reading temperature or humidity takes about 250 milliseconds!
    // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
    float h = dht.readHumidity();
    float t = dht.readTemperature();

    // check if returns are valid, if they are NaN (not a number) then something went wrong!
    if (isnan(t) || isnan(h)) 
    {
        Serial.println("Failed to read from DHT");
    } 
    else 
    {
        Serial.print("Humidity: "); 
        Serial.print(h);
        Serial.print(" %\t");
        Serial.print("Temperature: "); 
        Serial.print(t);
        Serial.println(" *C");
    }
}

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Anton64, когда Вас в детстве учили писать, там тоже было "найди в Интернете и принеси мне похожий текст"?

Если хотите, чтобы Вам помогли, пишите сами, если сами писать не хотите - обратитесь в раздел "Ищу исполнителя".

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Похоже,если этому человеку надо написать сочинение : Как я провел лето, то это человек тоже будет искать на иностранных форумах. Ведь может наш человек отдыхать как иностранцы, хотя бы в принципе.

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

Anton64 пишет:

 когда я пытался совместить эти два кода, нормально работала кнопка, а датчик не хотел считывать показания и не регировал на дыхание.

Блин, так покажите, что Вы там пытались!

Здесь не пишут кодов "за Вас", здесь помогают тем, кто пишет сам.

Пока я не видел, чтобы Вы что-то написали сами.

Anton64
Offline
Зарегистрирован: 04.05.2017

ЕвгенийП пишет:

Anton64 пишет:

 когда я пытался совместить эти два кода, нормально работала кнопка, а датчик не хотел считывать показания и не регировал на дыхание.

Блин, так покажите, что Вы там пытались!

Здесь не пишут кодов "за Вас", здесь помогают тем, кто пишет сам.

Пока я не видел, чтобы Вы что-то написали сами.

И вот опять я. Нашёл способ как это всё объединить. Но всё равно небольшая загвоздка. 

Итак, втыкаю вилку в сеть: Лампа горит => я дую => лампа выключается => нажимаю на кнопку и лампа включается и резко выключается, т.к датчик скорее всего еще улавливает тот процент влажности, при котором лампа выключается. Немного запутано, надеюсь вы поняли. Можно посмотреть видео от автора, по которому я делал проект https://www.youtube.com/watch?v=EGp1QZDWyfQ - Когда он нажимает кнопку, лампа у него включается и не гаснет, а у меня гаснет. Может какая то команда с задержкой после нажатия кнопки нужна или я даже не знаю что..

#include "DHT.h"

#define DHTPIN A0     
#define BUTTON 8
#define LIGHT 4

// Uncomment whatever type you're using!
#define DHTTYPE DHT11   // DHT 11 
//#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// 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 threshold = 70; //выставляемая влажность в помещении. 
int state = 1;

void setup() 
{
    Serial.begin(9600); 
    Serial.println("DHTxx test!");
    pinMode(BUTTON, INPUT);
    pinMode(LIGHT, OUTPUT);
    dht.begin();
}

void loop() 
{
    // Reading temperature or humidity takes about 250 milliseconds!
    // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
    float h = dht.readHumidity();
    

    // check if returns are valid, if they are NaN (not a number) then something went wrong!
    if (isnan(h)) 
    {
        Serial.println("Failed to read from DHT");
    } 
    else 
    {
        Serial.print("Humidity: "); 
        Serial.print(h);
        Serial.print(" %\t");
        if(h>threshold){
          digitalWrite(LIGHT, LOW);
          state = 0;
          }
        if(!digitalRead(BUTTON) && !state){
          digitalWrite(LIGHT, HIGH);
          delay(50);
          state = 1;
          }
    }
}

 

 

Araris
Offline
Зарегистрирован: 09.11.2012
#include "DHT.h"

#define DHTPIN A0     
#define BUTTON 8
#define LIGHT 4

// Uncomment whatever type you're using!
#define DHTTYPE DHT11   // DHT 11 
//#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// 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 threshold = 70; //выставляемая влажность в помещении. 
int state = 1;
unsigned long lastButtonPressedTime = 0; // сюда будем запоминать время (значение millis()) последнего нажатия кнопки.

void setup() 
{
    Serial.begin(9600); 
    Serial.println("DHTxx test!");
    pinMode(BUTTON, INPUT);
    pinMode(LIGHT, OUTPUT);
    dht.begin();
}

void loop() 
{
    // Reading temperature or humidity takes about 250 milliseconds!
    // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
    float h = dht.readHumidity();
    

    // check if returns are valid, if they are NaN (not a number) then something went wrong!
    if (isnan(h)) 
    {
        Serial.println("Failed to read from DHT");
    } 
    else 
    {
        Serial.print("Humidity: "); 
        Serial.print(h);
        Serial.print(" %\t");
        if(h>threshold){
          if(millis() - lastButtonPressedTime > 5000){ // если после последнего нажатия кнопки прошло более пяти (или сколько захотите) секунд
           digitalWrite(LIGHT, LOW);
           state = 0;
           }
          }
        if(!digitalRead(BUTTON) && !state){
          digitalWrite(LIGHT, HIGH);
          delay(50);
          state = 1;
          lastButtonPressedTime = millis(); // запоминаем  время (значение millis()) последнего нажатия кнопки
          }
    }
}

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Похоже код становится кривее и кривее. Выйдите из схемы :Лампа горит => я дую => лампа выключается => нажимаю на кнопку и лампа включается и резко выключается

У вас всего 3 вещи : лампа, кнопка и датчик влажность. Датчик влажности вкл лампу если влажность превышает опред величину, а кнопка выключает . И больше нет ничего. 

/*to_Anton64.ino
  1 лампа
  2 кнопка
  3 датчик
*/
// 1 лампа
// 2 кнопка
// 3 датчик
void setup() {
  // 1 лампа
  // 2 кнопка
  // 3 датчик

}

void loop() {
  // 1 лампа
  // 2 кнопка
  // 3 датчик

}