Continuing to beat my head against the wall, this is the situation now:
/*
Automamtic plant pot watering system.
Concept:
Daily or weekly it waters plant pots.
Sensors detect if the saucer under the pot is
full or not, and stop the pump when it detects
the water depth.
There is also a "timeout" period per pot incase
there is a problem with filling the pot.
*/
#include <arduino.h>
#include <Wire.h>
#include <stdio.h>
#include "DS1307_1.h"
#include "alarm_clock.h"
// This sets up the output pins to drive the solenoids
int solenoid_outputPins[] = {8, 9, 10, 11, 12};
// These are the sensors for each pot and the main reserve
//const byte sensorPins [6] = {};
// Time in seconds each pot takes to be "filled".
// All values to be set.
int sol_run_time[] = {20, 20, 20, 20, 20};
int level[] = {155, 155, 155, 155, 155};
/*
// These are the sensors for each pot and the main reserve
// These need re-assigning because of new output pins used.
#define sensorPins[0] 9
#define sensorPins[1] 10
#define sensorPins[2] 11
#define sensorPins[3] 12
#define sensorPins[4] 13
//#define sensorPins[5] 14
*/
int LEDPin = 13;
int SecondLED = 2;
int buttonPin = 1;
int buttonState = 1;
// This is used to control the LED for status indication.
int led_status = 0;
// Set time for daily run.
//int run_time_dow 2;
int run_time_hr = 12;
int run_time_mn = 00;
//int run_time_sec = 00;
// RTC stuff
int rtc[7];
DS1307 RTC=DS1307(); // Create RTC object
//#define setRTC
#ifdef setRTC
// Set/init RTC
RTC.stop();
RTC.set(DS1307_SEC,0);
RTC.set(DS1307_MIN,50);
RTC.set(DS1307_HR,0);
RTC.set(DS1307_DOW,3); // value from 1 to 7. User define whether 1 is sun or mon.
RTC.set(DS1307_DATE,10);
RTC.set(DS1307_MTH,06);
RTC.set(DS1307_YR,12);
RTC.start();
#endif
void setup()
{
// Set up button input and activate internal pull up resistor.
pinMode(buttonPin,INPUT);
digitalWrite(buttonPin,HIGH);
pinMode(LEDPin,OUTPUT);
pinMode(SecondLED,OUTPUT);
// Set the output pins
// pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
// digitalWrite(LEDPin,LOW);
// digitalWrite(SecondLED,LOW);
// digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
}
void loop()
{
buttonState = digitalRead(buttonPin);
if (buttonState == LOW)
{
Solenoid();
}
}
//*************************************************************************************************
void Solenoid()
{
//
int need_water;
// digitalWrite(12,HIGH);
digitalWrite(12,HIGH);
need_water = sensor_main();
if (need_water == 1)
{
//
digitalWrite(SecondLED,HIGH);
led_control(1);
need_water = sensor_1();
if (need_water == 1)
{
digitalWrite(8,HIGH);
delay(1000);
}
// delay(2000);
need_water = sensor_2();
if (need_water == 1)
{
digitalWrite(9,HIGH);
delay(500);
digitalWrite(8,LOW);
delay(1000);
}
// delay(8000);
need_water = sensor_3();
if (need_water == 1)
{
digitalWrite(10,HIGH);
delay(500);
digitalWrite(9,LOW);
delay(1000);
}
// delay(2000);
need_water = sensor_4();
if (need_water == 1)
{
digitalWrite(11,HIGH);
delay(500);
digitalWrite(10,LOW);
delay(1000);
}
// delay(2000);
need_water = sensor_5();
if (need_water == 1)
{
digitalWrite(12,HIGH);
delay(500);
digitalWrite(11,LOW);
delay(1000);
digitalWrite(12,LOW);
}
digitalWrite(SecondLED,LOW);
}
if (need_water == 0)
{
// Set off alarm saying main tank is low
}
}
/*
Call with 0 to turn off indication LED.
Call with 1 to turn on indication LED.
*/
int led_control(int foo)
{
static int status;
status = foo;
if (status == 0)
{
digitalWrite(SecondLED,LOW);
}
if (status == 1)
{
digitalWrite(SecondLED,HIGH);
}
}
//*************************************************************************************************
/*
This is called and returns 1 if more water is needed.
If it returns 0, the water level is good, so stop the pump.
*/
int sensor_1()
{
int reading;
reading = digitalRead(9);
// if (reading > level1)
if (reading > level[1])
{
return 0;
}
return 1;
}
int sensor_2()
{
int reading;
reading = digitalRead(10);
// if (reading > level2)
if (reading > level[2])
{
return 0;
}
return 1;
}
int sensor_3()
{
int reading;
reading = digitalRead(11);
// if (reading > level3)
if (reading > level[3])
{
return 0;
}
return 1;
}
int sensor_4()
{
int reading;
reading = digitalRead(12);
// if (reading > level4)
if (reading > level[4])
{
return 0;
}
return 1;
}
int sensor_5()
{
// return 1;
int reading;
reading = digitalRead(13);
// if (reading > level5)
if (reading > level[5])
{
return 0;
}
return 1;
}
// This is the main water reserve.
int sensor_main()
{
int reading;
reading = digitalRead(14);
if (reading > level[6])
{
return 0;
}
return 1;
}
I hope there is not any extra code.
Each LED is supposed to flash on/off.
Further more: Led 1 turns on, waits. Led 2 turns on, Led 1 turns off, waits.
Repeats this sequence for 3 to 5.
Then 5 turns off.
All the time another LED is glowing indicating the loop is active.
Now, all things being "normal": only Led's 1 - 4 glow. 5 Doesn't.
I added an extra line(third-ish line in solenoid):
digitalWrite(12, HIGH);
way before any LED is turned on.
Strange thing is that it doesn't.
But when Led # 3 turns on, Led # 5 turns on.
Ok, I'm open for suggestions.