Hello ,
I reached my last stage of debugging my prgm code, with 2 of my sensors working very fine, i mean as i expect them to work :-), my output as well work fine.
The only issue is with my soil moisture sensor, it is not flipping my damm voltage pin from pin 13 to 12. (tested with voltmeter, and in serial port always returning value 1023)
The peculiar part is with another sketch which i first drafted having only the soil moisture probe sketch, here the voltage is flipping nicely and im having my results as expected.
Second sketch:
/*--- Declaration of I/Os ---*/
//INPUT pins definition
// OUTPUT pins definition
const uint8_t voltageFlipPin01 = 13;
const uint8_t voltageFlipPin02 = 12;
const uint8_t pump_Active = 11;
const uint8_t LightOn = 10;
const uint8_t Fan01 = 9;
// Definition of Analog pins for Soil Moisture Sensor Readings.
const uint8_t Moisture_Input = 5;
const uint8_t photoSense = 4;
const uint8_t TempLm35 = 3;
/*--- Declaration of Variables ---*/
// Switch case Variable
char itemIdx = 0;
// Status flag
boolean pump_Status = false;
boolean FuncActive = false;
boolean LightStatus = false;
boolean ReadPhoto = false;
boolean TempRead = false;
boolean FanStatus = false;
// Moisture Value Variables
int Moist_Val01;
int Moist_Val02;
int Moist_Avg01;
double percentage_Moist;
int photo_Read;
int Lm35_Read;
float TempReadC = 0.0;
float Actualtemp;
// Timer Parameters
unsigned long currentTimer;
unsigned long timerLast = 0;
const unsigned long timerRate = 1000UL;
unsigned long lastPump = 0;
const unsigned long timerRateX = 7000UL;
void setup(){
Serial.begin(9600);
pinMode(Moisture_Input, INPUT);
pinMode(photoSense,INPUT);
pinMode(TempLm35,INPUT);
pinMode(voltageFlipPin01, OUTPUT);
pinMode(voltageFlipPin02, OUTPUT);
pinMode(pump_Active, OUTPUT);
pinMode(LightOn,OUTPUT);
pinMode(Fan01,OUTPUT);
digitalWrite(voltageFlipPin01, LOW);
digitalWrite(voltageFlipPin02, LOW);
digitalWrite(pump_Active,LOW);
digitalWrite(LightOn,LOW);
digitalWrite(Fan01,LOW);
}
float temperatureRead (){
if (TempRead == true){
//getting the Raw analog reading from the temperature sensor
int Lm35_Read = analogRead(TempLm35);
// converting that reading to voltage
float voltage = Lm35_Read * 5.00;
voltage /= 1024.00;
// Convert voltage to Temperature
TempReadC = (voltage) * 100.00 ;
return TempReadC;
}
TempRead = false;
}
void FanControlON (){
if (FanStatus == false){
if (Actualtemp >= 26.50){
digitalWrite(Fan01,HIGH);
FanStatus = true;}
}
}
void FanControlOFF (){
if (FanStatus == true);{
if (Actualtemp <=24.50){
digitalWrite(Fan01,LOW);
FanStatus = false;
}
}
}
void pumpControlON (){
if (FuncActive == true){
if (pump_Status == false){
if ( percentage_Moist <= 85.00 ){
digitalWrite(pump_Active,HIGH);
pump_Status = true;
}
}
}
}
void pumpControlOFF (){
if ( pump_Status == true){
if ( currentTimer >= (lastPump + timerRateX )|| percentage_Moist >= 90.00){
lastPump = currentTimer;
digitalWrite(pump_Active,LOW);
pump_Status = false;
}
}
}
void LightAction (){
if (ReadPhoto == true){
photo_Read = analogRead(photoSense);
if (photo_Read < 200) {
digitalWrite(LightOn,HIGH);
LightStatus = true;}
else if (photo_Read > 520){
digitalWrite(LightOn,LOW);
LightStatus = false;}
}
}
void loop(){
currentTimer = millis();
if( currentTimer >= (timerLast + timerRate) ){
timerLast = currentTimer;
switch(++itemIdx){
case 6:
itemIdx = 0;
break;
case 0:
digitalWrite(voltageFlipPin01, HIGH);
digitalWrite(voltageFlipPin02, LOW);
break;
case 1:
Moist_Val01 = 1023 - analogRead(Moisture_Input);
break;
case 2:
digitalWrite(voltageFlipPin01, LOW);
digitalWrite(voltageFlipPin02, HIGH);
break;
case 3:
Moist_Val02 = analogRead(Moisture_Input);
Moist_Avg01 = (Moist_Val01 + Moist_Val02) / 2;
percentage_Moist = ((Moist_Avg01/1000.00)*100.00);
FuncActive = true;
digitalWrite(voltageFlipPin01, LOW);
digitalWrite(voltageFlipPin02, LOW);
break;
case 4:
ReadPhoto = true;
break;
case 5:
TempRead = true;
break;
}
}
pumpControlON ();
pumpControlOFF();
LightAction ();
Actualtemp = temperatureRead ();
FanControlON ();
FanControlOFF ();
if ( pump_Status == true ){
Serial.print (" Pump Status : ACTIVE ");
Serial.println();}
else if ( pump_Status == false ){
Serial.print ( " Pump Staus : INACTIVE ");
Serial.println();}
if ( LightStatus == true ){
Serial.print (" Light Status : ACTIVE ");
Serial.println();}
else if ( LightStatus == false ){
Serial.print ( " Light Staus : INACTIVE ");
Serial.println();}
if ( FanStatus == true ){
Serial.print (" Fan Status : ACTIVE ");
Serial.println();}
else if ( FanStatus == false ){
Serial.print ( " Fan Staus : INACTIVE ");
Serial.println();}
delay(500UL);
// Photo Sensor Reading and displaying results through LCD and Serial Port.
Serial.print("Photo_Reading = ");
Serial.print(photo_Read); // the raw analog reading A4
// We'll have a few threshholds, qualitatively determined reference to table of Lux.
if (photo_Read < 10) {
Serial.println(" - Dark");
} else if (photo_Read < 200) {
Serial.println(" - Dim");
} else if (photo_Read < 500) {
Serial.println(" - Light");
} else if (photo_Read < 800) {
Serial.println(" - Bright");
} else {
Serial.println(" - Very bright");
ReadPhoto = false;
}
delay(1000);
}
First sketch: where voltage flipping occurs:
/*--- Declaration of I/Os ---*/
const uint8_t voltageFlipPin01 = 13;
const uint8_t voltageFlipPin02 = 12;
const uint8_t pump_Active = 11;
const uint8_t Moisture_Input = 5;
/*--- Declaration of Variables ---*/
// Switch case Variable
char itemIdx = 0;
// Pump status flag
boolean pump_Status = false;
boolean Active = false;
// Moisture Value Variables
int Moist_Val01;
int Moist_Val02;
int Moist_Avg01;
double percentage_Moist;
// Timer Parameters
unsigned long currentTimer;
unsigned long timerLast = 0;
const unsigned long timerRate = 1000UL;
unsigned long lastPump = 0;
const unsigned long timerRateX = 7000UL;
// Codes running only once at start up. Initialisation.
void setup(){
Serial.begin(9600);
pinMode(Moisture_Input, INPUT);
pinMode(voltageFlipPin01, OUTPUT);
pinMode(voltageFlipPin02, OUTPUT);
pinMode(pump_Active, OUTPUT);
digitalWrite(voltageFlipPin01, LOW);
digitalWrite(voltageFlipPin02, LOW);
digitalWrite(pump_Active,LOW);
}
void pumpControlON (){
if (Active == true){
if ( percentage_Moist <= 80.00 ){
pump_Status = true;
digitalWrite(pump_Active,pump_Status);
Active = false;
}
}
}
void pumpControlOFF (){
if ( pump_Status == true){
if ( currentTimer >= (lastPump + timerRateX )|| percentage_Moist >= 90.00){
lastPump = currentTimer;
pump_Status = false;
digitalWrite(pump_Active,pump_Status);
}
}
}
// Codes running forever.
void loop(){
// Keep track of milliseconds elapsed.
currentTimer = millis();
if( currentTimer >= (timerLast + timerRate) ){
timerLast = currentTimer;
switch(++itemIdx){
case 5:
itemIdx = 0;
case 0:
digitalWrite(voltageFlipPin01, HIGH);
digitalWrite(voltageFlipPin02, LOW);
break;
case 1:
Moist_Val01 = 1023 - analogRead(Moisture_Input);
break;
case 2:
digitalWrite(voltageFlipPin01, LOW);
digitalWrite(voltageFlipPin02, HIGH);
break;
case 3:
Moist_Val02 = analogRead(Moisture_Input);
Moist_Avg01 = (Moist_Val01 + Moist_Val02) / 2;
percentage_Moist = ((Moist_Avg01/1000.00)*100.00);
digitalWrite(voltageFlipPin01, LOW);
digitalWrite(voltageFlipPin02, LOW);
break;
case 4: Active = true;
}
}
pumpControlON ();
pumpControlOFF();
if ( pump_Status == true ){
Serial.print (" Pump Status : ACTIVE ");}
Serial.println();
if ( pump_Status == false ){
Serial.print ( " Pump Staus : INACTIVE ");}
Serial.println();
delay(500UL);
}
Any help please, i spent the whole day today looking for my bugs . . but . .