// ATtiny85 sleep mode, wake on pin change interrupt demo
// Author: Nick Gammon
// Date: 12 October 2013
// ATMEL ATTINY 25/45/85 / ARDUINO
//
// +-\/-+
// Ain0 (D 5) PB5 1| |8 Vcc
// Ain3 (D 3) PB3 2| |7 PB2 (D 2) Ain1
// Ain2 (D 4) PB4 3| |6 PB1 (D 1) pwm1
// GND 4| |5 PB0 (D 0) pwm0
// +----+
//#include <avr/sleep.h> // Sleep Modes
//#include <avr/power.h>
// increased the switch delay to work with RF433MHz remote
#define PUMP_TIMEOUT 5//80 seconds actual time (5 for testing)
#define SOLENOID_TIMEOUT1 5//300
#define SOLENOID_TIMEOUT2 5//60
#define LED_TIME 100
const byte pump = 1;
const byte solenoid = 2; // pin 2
const byte pumpSwitch = 5;
const byte solenoidSwitch = 3;
const byte statusLed = 0;
bool pumpState = 0;
bool solenoidState = 0;
unsigned int pumpTime = 0;
unsigned int solenoidTime = 0;
unsigned long tNow;
unsigned long tLed;
unsigned long solenoidTimeout;
void setup ()
{
pinMode (pump, OUTPUT);
pinMode (solenoid, OUTPUT);
pinMode (statusLed, OUTPUT);
pinMode (pumpSwitch, INPUT_PULLUP);
pinMode (solenoidSwitch, INPUT_PULLUP);
// digitalWrite (SWITCH, HIGH); // internal pull-up
delay(1000);
digitalWrite(statusLed,HIGH);
delay(100);
digitalWrite(statusLed,LOW);
delay(300);
digitalWrite(statusLed,HIGH);
delay(100);
digitalWrite(statusLed,LOW);
solenoidTimeout = SOLENOID_TIMEOUT1;
tNow = millis();
}
void loop (){
if((millis()-tNow) >= 1000){
tNow = millis();
if(pumpState == 1){
pumpTime++;
if(pumpTime >= PUMP_TIMEOUT){
pumpTime = 0;
pumpState = 0;
digitalWrite(pump,LOW);
solenoidState = 1;
solenoidTime = 0;
solenoidTimeout = SOLENOID_TIMEOUT1;
digitalWrite(solenoid,solenoidState);
}
}
else{
pumpTime = 0;
}
if(solenoidState == 1){
solenoidTime++;
if(solenoidTime >= solenoidTimeout){
solenoidTime = 0;
solenoidState = 0;
digitalWrite(solenoid,LOW);
}
}
else{
solenoidTime = 0;
}
digitalWrite(statusLed,HIGH);
tLed = millis();
}
if((millis()-tLed)>= LED_TIME){
digitalWrite(statusLed,LOW);
}
if (digitalRead(pumpSwitch) == 0) {
if(pumpState == 1){
pumpState = 0;
pumpTime = 0;
}
else{
pumpState = 1;
pumpTime = 0;
solenoidState = 0;
digitalWrite(solenoid,solenoidState);
}
digitalWrite (pump, pumpState);
delay(1000);
}
if (digitalRead(solenoidSwitch) == 0) {
if(solenoidState == 0){
solenoidState = 1;
if(pumpState == 1){
pumpState = 0;
digitalWrite(pump,pumpState);
pumpTime = 0;
}
solenoidTimeout = SOLENOID_TIMEOUT2;
}
else{
solenoidState = 0;
}
digitalWrite (solenoid, solenoidState);
if(solenoidState == 0){
solenoidTime = 0;
}
delay(1000);
}
} // end of loop
Vacuum
Solenoid