int analogPin = A3; // potentiometer wiper (middle terminal) connected to analog pin 3
// outside leads to ground and +5V
int val = 0; // variable to store the value read
#define LED LED_BUILTIN
#define LED_ON HIGH
#define LED_OFF LOW
#define RELAY_H PD2
#define RELAY_PUMP PD3
#define RELAY_VALVE PD4
#define LEVER PB4
#define TANK 7
int leverDown = 0;
int leverState = 0;
int tankLow;
void setup() {
Serial.begin(9600); // setup serial
pinMode(TANK, INPUT_PULLUP);
pinMode(LEVER, INPUT_PULLUP);
pinMode(RELAY_H, OUTPUT);
pinMode(RELAY_PUMP, OUTPUT);
pinMode(RELAY_VALVE, OUTPUT);
pinMode(LED, OUTPUT);
// All relays OFF:
digitalWrite(RELAY_H, HIGH);
digitalWrite(RELAY_PUMP, HIGH);
digitalWrite(RELAY_VALVE, HIGH);
/*
if (!digitalRead(LEVER))
if (!digitalRead(LEVER))
if (!digitalRead(LEVER)) {
while (!digitalRead(LEVER))
relayTest();
}
*/
}
void flashLed(int n, int t) {
int i;
digitalWrite(LED, LED_OFF);
for (i=0; i<n; i++) {
digitalWrite(LED, LED_ON);
delay(t);
digitalWrite(LED, LED_OFF);
delay(t);
}
digitalWrite(LED, LED_OFF);
}
void readButtons() {
leverState += (digitalRead(LEVER) << 1)-1;
if (leverState<0) {
leverState = 0;
leverDown = 0;
} else if (leverState>10) {
leverState = 10;
leverDown = 1;
}
}
void relayTest() {
// All relays OFF:
digitalWrite(RELAY_H, HIGH);
digitalWrite(RELAY_PUMP, HIGH);
digitalWrite(RELAY_VALVE, HIGH);
// Signal start of sequence
flashLed(5,200);
delay(500);
digitalWrite(RELAY_H, LOW);
delay(1000);
digitalWrite(RELAY_H, HIGH);
delay(500);
digitalWrite(RELAY_PUMP, LOW);
delay(1000);
digitalWrite(RELAY_PUMP, HIGH);
delay(500);
digitalWrite(RELAY_VALVE, LOW);
delay(1000);
digitalWrite(RELAY_VALVE, HIGH);
delay(500);
}
void buttonTest() {
/*
if (leverDown)
digitalWrite(LED, LED_ON);
else
digitalWrite(LED, LED_ON);
*/
digitalWrite(LED, !digitalRead(TANK));
}
#define STATE_UNDEF -1
#define STATE_STDBY 0
#define STATE_READY 1
#define STATE_FILLING 2
#define STATE_GOLD 3
int state = STATE_UNDEF;
int newState = STATE_STDBY;
void loop() {
// readButtons();
// relayTest();
/*
if (analogRead(analogPin) < 500) {
digitalWrite(RELAY_PUMP, LOW);
delay(50);
}else {
digitalWrite(RELAY_PUMP, HIGH);
delay(50);
}
*/
//digitalWrite(LED, digitalRead(analogPin));
delay(50);
// digitalWrite(LED, HIGH);
buttonTest();
// relayTest();
// delay(500);
return;
if (analogRead(analogPin) > 500) {
// Immediately turn off the heating:
digitalWrite(RELAY_H, LOW);
if (!tankLow) {
// open the valve 250ms before starting the pump:
digitalWrite(RELAY_VALVE, HIGH);
delay(250);
}
tankLow = 1;
} else {
if (tankLow) {
// keep filling for one more sec
delay(1000);
// turn off the pump
tankLow = 0;
digitalWrite(RELAY_PUMP, LOW );
// close the valve 250ms after stopping the pump:
delay(250);
digitalWrite(RELAY_VALVE, LOW);
}
// Turn on the heating:
digitalWrite(RELAY_H, HIGH);
}
leverDown = !digitalRead(LEVER);
// Heating on whenever tank is full:
// Valve opened during filling only
digitalWrite(RELAY_PUMP, tankLow || leverDown );
}Pump
Valve
H