Hi, I would appreciate some help, please. I have very limited knowledge of programming but have managed to write a control program that opens and shuts a door depending on max and min air temperature using a DHT sensor. The main body of my program works well-using motor control relays and door limit switches.
I'm trying to incorporate a toggled button press switch which on a single press opens the door allowing entry and a second press closes it on exit. (obviously, the door would be always open above a set temperature)
My board is an Arduino Uno with the button input on pin 2 (dsw INPUT_PULLUP). My button toggle code works fine on its own and toggles pin 13 and 7 but will not work within my program structure. The program loops OK, but the button toggle has no effect.
I've included my complete code.
/*********************
greenhouse relay motor control with toggle door switch on pin 2
11/11/2019
*********************/
#define DHTPIN 4 // pin 4 sensor is connected to
#include <DHT.h>
#define DHTTYPE DHT22 // DHT 22 (AM2302)
// *************************************** motor (1) door control motor = in1,in2,enA ***************************
int led = 13;
int status = false;
int in1 = 12;
int in2 = 11;
int enApin = 10;
int dswPin = 2; // door button switch open/close
int outPin = 7; // TR1 base drive signal
int state = LOW; // the current state of the output pin
int reading; // the current reading from the input pin
int previous = HIGH; // the previous reading from the input pin
long time = 0; // the last time the output pin was toggled
long debounce = 200;
int vent = 9; // window vent fan
int fan = 8; // humidity fan
int buttonLpin = 6; // left side door switch
int buttonRpin = 5; // right hand door switch
int val = 0;
int ledPin = 13; // door locked open led
volatile int buttonState = 0;
const uint32_t debounceTime = 10; // 5 mSec, enough for most switches
int maxTemp2 = 28; // max set at 28 for door
int minTemp2 = 24; // min set at 24 " "
int maxTemp = 18; // max set at 18 for vent
int minTemp = 15; // min set at 15 for vent
int maxHum = 60;
int minHum = 55;
DHT dht(DHTPIN, DHTTYPE);
void setup() {
pinMode(outPin, OUTPUT);
pinMode(ledPin, OUTPUT); // door locked open signal
pinMode(dswPin, INPUT_PULLUP); // set the internal pull up, door button.
pinMode (vent, OUTPUT); // ventfan
pinMode (enApin, OUTPUT); // motor conrol module enable
pinMode (in1, OUTPUT); // motor control
pinMode (in2, OUTPUT); // motor control
pinMode (fan, OUTPUT); // humidity fan
pinMode (buttonLpin, INPUT_PULLUP); // left door switch
pinMode (buttonRpin, INPUT_PULLUP); // right door switch
Serial.begin(9600);
dht.begin();
}
void loop() {
// *********** Door press toggle button...push to open / close ***********
reading = digitalRead(dswPin); /// door lock open / close
if (reading == HIGH && previous == LOW && millis() - time > debounce)
if (state == HIGH)
state = LOW;
else
state = HIGH;
time = millis();
{ digitalWrite(ledPin, state);
digitalWrite (outPin, state);
}
// **************************************************************
delay(500); // Wait a few milliseconds between measurements.
// 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();
// Read temperature as Celsius
float t = dht.readTemperature();
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// ============================== VENT CHECK ============
if (t > maxTemp) {
digitalWrite(vent, HIGH);
} else if (t < minTemp) { // if(h < minHum || t < minTemp) {
digitalWrite(vent, LOW);
// =============================== DOOR CHECK (temp2) OPENING FOR HIGH TEMPERATURE
}
if (t > maxTemp2) {
val = digitalRead(buttonLpin); // read the input pin
digitalWrite(enApin, val); // was in1 for grounded limit sw or 2 if using pull up
delay( debounceTime );
digitalWrite(in1, LOW); // door motor >>>> OPEN pin 12
digitalWrite(in2, LOW); // " " " " pin 11
// ======================================= door closing / for temp2 = LOW TEMPERATURE
} else if (t < minTemp2) {
val = digitalRead(buttonRpin); // read the input pin
digitalWrite(enApin, val); // sets the output to in1 (if pull up) (in2 for input grounded via sw)
delay( debounceTime );
digitalWrite(in1, HIGH); // door motor >>>> CLOSE pin 12
digitalWrite(in2, HIGH); // " " " " pin 11
} //=================== checking humidity sensors to control fan if high fan on
if (h > maxHum) {
digitalWrite(fan, HIGH);
} else if (h < minHum) {
digitalWrite(fan, LOW);
}
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" *C ");
}
program