I have 3 separate switches that inputs require my uno to wake from sleep. I have been trying to mess around with pin changes, as far as enabling D8 to interrupt, to no avail. I have also found the empty interrupt macros, which would work out great for me because i just need it to signal to wake from powerdownmode. I have attached my sketch which right now has the basic information for the empty interrupt macros. I need my uno to sleep untill d2/d3/d8 is pressed, wake and then perform the task assigned to that pin, then back to sleep mode. If you could please help me figure out a solution to my issue. Thank you in advance for you time and help.
Shane
#include <avr/interrupt.h>
#include <avr/power.h>
#include <avr/sleep.h>
#define EMPTY_INTERRUPT (vector)
// constants won't change.
const int downbutton = 2; // downbutton to pin 2
const int upbutton = 3; // upbutton to pin 3
const int relay1 = 7; // relay1 to pin 7
const int relay2 = 6; // relay2 to pin 6
const int relay3 = 5; // relay3 to pin 5
const int relay4 = 4; // relay4 to pin 4
const int accp = 8; // car acc power in to pin 8
// variables will change:read for input values
int buttonState2 = 0;
int buttonState3 = 0;
int accps = 0;
int relay4s = 0;
void setup() {
pinMode(accp, INPUT); // sets the accp pin as input
pinMode(upbutton, INPUT); // sets the downbutton pin as input
pinMode(downbutton, INPUT); // sets the downbutton pin as input
pinMode(relay1, OUTPUT); // sets the relay pin as output
pinMode(relay2, OUTPUT); // sets the relay pin as output
pinMode(relay3, OUTPUT); // sets the relay pin as output
pinMode(relay4, OUTPUT); // sets the relay pin as output
pinMode(13, OUTPUT); // set pin 13 as an output so we can use LED to monitor sleep status
digitalWrite(relay1, LOW); // Prevents relays from starting up engaged
digitalWrite(relay2, LOW); // Prevents relays from starting up engaged
digitalWrite(relay3, LOW); // Prevents relays from starting up engaged
digitalWrite(relay4, LOW); // Prevents relays from starting up engaged
digitalWrite(13, HIGH); // turn pin 13 LED on
}
void loop() {
buttonState3 = digitalRead(upbutton); // read the state of the upbutton value
buttonState2 = digitalRead(downbutton); // read the state of the downbutton value
relay4s = digitalRead (relay4); // read the state of relay4
accps = digitalRead(accp); // read the state of the accps value
if (accps == HIGH && buttonState2 == HIGH) {
// turn relay 3/4 on w/ relay 1 on for 14 sec:
digitalWrite(relay3, HIGH);
digitalWrite(relay4, HIGH);
digitalWrite(relay1, HIGH);
delay(16000);
}
if (accps == HIGH && buttonState3 == HIGH) {
// turn relay 3 off w/ relay 2/4 on for 14 sec then off:
digitalWrite(relay3, LOW);
digitalWrite(relay2, HIGH);
delay (16000);
digitalWrite(relay4, LOW);
}
if (buttonState2 == LOW || buttonState3 == LOW){
// sets relay 1/2 to off if no switches are pressed:
digitalWrite(relay1, LOW);
digitalWrite(relay2, LOW);
}
if (accps == LOW && relay4s == HIGH) {
// when accp is off for 4.5 mins turn relay 3 off w/ relay 2/4 off after 14 secs:
delay (6000);
digitalWrite(relay3, LOW);
digitalWrite(relay2, HIGH);
delay(16000);
digitalWrite(relay4, LOW);
}
delay(1000);
sleepNow();
}
// Stay awake for 1 second, then sleep.LED turns off when sleeping, then back on upon wake.
void sleepNow(void) {
// Enable interrupt
//add EMPTY_INTERRUPT(INT0_vect) pin 2
//add EMPTY_INTERRUPT(INT1_vect) pin 3
//add EMPTY_INTERRUPT(PCINT0_vect) pin 8
// Choose our preferred sleep mode
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
// Set sleep enable (SE) bit:
sleep_enable();
digitalWrite(13, LOW); // turn LED off to indicate sleep
// Put the device to sleep:
sleep_mode();
// Upon waking up, sketch continues from this point.
sleep_disable();
}