Hey guys whatsup, i am new to this forum and have decided to post due to some difficulties i am having with a current project. Everything was working quite smoothly but the addition of the manual buttons has cause a problem, Whats happens is that now i am only able to get one output, for instance if i cover the light sensor, the roof will close, and nothing else. It stays right there, takign my hand off will make no difference in outputs.
Below is my code, i haven't been coding much before so excuse my code if its a bit noob, also, before i used only if else statements, seeing as most of the code now relies on the outcome of the manual button i decided to use while statements with if else. Below is my code,any help would be greatly appreciated.
#include <PID_v1.h>
#include <LiquidCrystal.h>
#include <DHT.h>
#define DHTPIN 8
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
double Setpoint, Input, Output;
PID myPID(&Input, &Output, &Setpoint,0.5,0.5,0.5, DIRECT);
PID myPID1(&Input, &Output, &Setpoint,0.5,0.5,0.5, DIRECT);
/*
Declaring of Variables
*/
int counter1=0;
int counter2=0;
int counter3=0;
int lightsensor = A0; //light sensor input
int rainsensor1 = A1; //rain sensor1 input
int rainsensor2 = A2; //rain sensor2 input
int openingroof = 53; //Output for opening for roof
int closingroof = 51; // Output for closing roof
int turningbeans = 52; //output for bean turner
int piezo = 7; //Output for piezo
int lightsensorval = 0;
int rainsensorval1 = 0;
int rainsensorval2 = 0;
char incoming_char;
int manual_stop = 22;
int manual_stopled = 24;
int manual_bturner =26;
int manual_open = 28;
int manual_close=30;
int manual_stopvalue = 0;
int manual_bturnervalue=0;
int manual_openvalue = 0;
int manual_closevalue=0;
int test =0;
float h = 0;
float t = 0;
int cellmessage;
unsigned long currentTime;
unsigned long loopTime;
void setup()
{
currentTime = millis();
loopTime = currentTime;
delay(60000);
Serial.begin(9600);
Serial1.begin(9600);
//setting outputs and inputs
pinMode (lightsensor,INPUT);
pinMode (rainsensor1,INPUT);
pinMode (rainsensor2,INPUT);
pinMode (openingroof,OUTPUT);
pinMode (closingroof,OUTPUT);
pinMode (turningbeans,OUTPUT);
pinMode(piezo,OUTPUT);
pinMode (manual_stop,INPUT);
pinMode (manual_stopled,OUTPUT);
pinMode (manual_bturner,INPUT);
pinMode (manual_open,INPUT);
pinMode (manual_close,INPUT);
//ti.pulse(piezo,3000,Piezo);
lcd.begin(16, 2); //setup of LCD's rows and columns
dht.begin();
Input = dht.readTemperature();
Setpoint = 75;
myPID.SetMode(AUTOMATIC);
Input = dht.readHumidity();
Setpoint = 55;
myPID1.SetMode(AUTOMATIC);
}
void sendSMSOPEN()
{
Serial1.println("AT+CMGF=1");
delay(500);
Serial1.print("AT+CMGS=");
Serial1.write((byte)34);
Serial1.print("18687914655");
Serial1.write((byte)34);
Serial1.println();
delay(500);
Serial1.print("Sunlight Detected,Roof Opening, Heater is ON, Bean Turner is ON. Have a good day.");
delay(500);
Serial1.write((byte)26);
Serial1.println();
delay(500);
}
void sendSMSCLOSE()
{
Serial1.println("AT+CMGF=1");
delay(500);
Serial1.print("AT+CMGS=");
Serial1.write((byte)34);
Serial1.print("18687914655");
Serial1.write((byte)34);
Serial1.println();
delay(500);
Serial1.print("Sunlight Not Detected,Roof Closing, Heater is ON, Bean Turner is ON. Have a good day.");
delay(500);
Serial1.write((byte)26);
Serial1.println();
delay(500);
}
void sendSMSMANUAL_STOP()
{
Serial1.println("AT+CMGF=1");
delay(500);
Serial1.print("AT+CMGS=");
Serial1.write((byte)34);
Serial1.print("18687914655");
Serial1.write((byte)34);
Serial1.println();
delay(500);
Serial1.print("Manual Stop has been activated");
delay(500);
Serial1.write((byte)26);
Serial1.println();
delay(500);
}
void loop()
{
lightsensorval=analogRead(lightsensor);
delay(10);
Serial.print("Light sensor value =");
Serial.println(lightsensorval);
rainsensorval1=analogRead(rainsensor1);
delay(10);
Serial.println("Rain sensor1 value =");
Serial.println(rainsensorval1);
rainsensorval2=analogRead(rainsensor2);
delay(10);
Serial.println("Rain sensor2 value =");
Serial.println(rainsensorval2);
h = dht.readHumidity(); //reading of humidity
t = dht.readTemperature(); // reading of temperature
Input = dht.readTemperature();
myPID.Compute();
analogWrite(9,Output);
Input = dht.readHumidity();
myPID1.Compute();
analogWrite(10,Output);
manual_stopvalue = digitalRead(manual_stop);
delay(10);
manual_bturnervalue = digitalRead(manual_bturner);
delay(10);
manual_openvalue = digitalRead(manual_open);
delay(10);
manual_closevalue = digitalRead(manual_close);
delay(10);
Serial.print("Manual Stop=");
Serial.println(manual_stopvalue);
//delay(1000);
Serial.print("Manual Bean Turner=");
Serial.println(manual_bturnervalue);
//delay(1000);
Serial.print("Manual Roof Open=");
Serial.println(manual_openvalue);
//delay(1000);
Serial.print("Manual Roof Close=");
Serial.println(manual_closevalue);
//delay(1000);
lcd.setCursor(0,0);
lcd.print("TEMP=");
lcd.print(t);
lcd.print((char)223);
lcd.print("C");
lcd.setCursor(0,1);
lcd.print("HUMIDITY=");
lcd.print(h);
lcd.print("%");
lcd.print(" ");
while (manual_stopvalue == 0)
{
if (rainsensorval1 <= 200 || rainsensorval2 <= 200 || lightsensorval <= 300)
{
digitalWrite (closingroof,HIGH);
digitalWrite (openingroof,LOW);
digitalWrite (turningbeans,HIGH);
digitalWrite (manual_stopled,LOW);
counter1++;
counter2=0;
counter3=0;
if (counter1==1)
{
sendSMSCLOSE();
//delay(200);
//analogWrite(piezo,128);
//delay(3000);
//analogWrite(piezo,LOW);
}
}
else if (rainsensorval1 > 200 && rainsensorval2 > 200 && lightsensorval > 300)
{
digitalWrite (openingroof,HIGH);
digitalWrite (closingroof,LOW);
digitalWrite (turningbeans,HIGH);
digitalWrite (manual_stopled,LOW);
counter2++;
counter1=0;
counter3=0;
if (counter2==1)
{
sendSMSOPEN();
//analogWrite(piezo,128);
//delay(3000);
//analogWrite(piezo,LOW);
}
lightsensorval=analogRead(lightsensor);
delay(10);
rainsensorval1=analogRead(rainsensor1);
delay(10);
rainsensorval2=analogRead(rainsensor2);
delay(10);
}
while (manual_stopvalue == 1)
{
manual_stopvalue = digitalRead(manual_stop);
delay(10);
manual_bturnervalue = digitalRead(manual_bturner);
delay(10);
manual_openvalue = digitalRead(manual_open);
delay(10);
manual_closevalue = digitalRead(manual_close);
delay(10);
digitalWrite(manual_stopled,HIGH);
counter3++;
counter1=0;
counter2=0;
if (counter3 <= 1)
{
sendSMSMANUAL_STOP();
//analogWrite(piezo,128);
//delay(3000);
//analogWrite(piezo,LOW);
}
if (manual_bturnervalue ==1 && manual_openvalue == 1 && manual_closevalue== 1)
{
digitalWrite(manual_stopled,HIGH);
digitalWrite(turningbeans,LOW);
digitalWrite(openingroof,LOW);
digitalWrite(closingroof,LOW);
}
else if (manual_bturnervalue == 0 && manual_openvalue == 1 && manual_closevalue==1)
{
digitalWrite(manual_stopled,HIGH);
digitalWrite(turningbeans,HIGH);
digitalWrite(openingroof,LOW);
digitalWrite(closingroof,LOW);
}
else if (manual_bturnervalue == 1 && manual_openvalue ==0 && manual_closevalue ==1)
{
digitalWrite(manual_stopled,HIGH);
digitalWrite(turningbeans,LOW);
digitalWrite(openingroof,HIGH);
digitalWrite(closingroof,LOW);
}
else if (manual_bturnervalue ==1 && manual_openvalue ==1 && manual_closevalue==0)
{
digitalWrite(manual_stopled,HIGH);
digitalWrite(turningbeans,LOW);
digitalWrite(openingroof,LOW);
digitalWrite(closingroof,HIGH);
}
else if (manual_openvalue ==0 && manual_closevalue ==0 && manual_bturnervalue ==0)
{
digitalWrite(manual_stopled,HIGH);
digitalWrite(turningbeans,LOW);
digitalWrite(openingroof,LOW);
digitalWrite(closingroof,LOW);
}
else if (manual_bturnervalue == 0 && manual_openvalue == 0 && manual_closevalue==1)
{
digitalWrite(manual_stopled,HIGH);
digitalWrite(turningbeans,HIGH);
digitalWrite(openingroof,HIGH);
digitalWrite(closingroof,LOW);
}
else if (manual_bturnervalue == 0 && manual_openvalue == 0 && manual_closevalue==1)
{
digitalWrite(manual_stopled,HIGH);
digitalWrite(turningbeans,HIGH);
digitalWrite(openingroof,HIGH);
digitalWrite(closingroof,LOW);
}
else if (manual_bturnervalue == 0 && manual_openvalue == 1 && manual_closevalue==0)
{
digitalWrite(manual_stopled,HIGH);
digitalWrite(turningbeans,HIGH);
digitalWrite(openingroof,LOW);
digitalWrite(closingroof,HIGH);
}
else if (manual_bturnervalue == 1 && manual_openvalue == 0 && manual_closevalue==0)
{
digitalWrite(manual_stopled,HIGH);
digitalWrite(turningbeans,LOW);
digitalWrite(openingroof,LOW);
digitalWrite(closingroof,LOW);
}
}
}
}