Hello !So your circuit as master works perfectly!I tried to make a modification to your circuit.I don't like my local connection of button(locally) because i have to have my hand at the button in order to move down or up.If i let the button the shouters stops immediately. So i used your circuit for local buttons(and not for masters) by making some extra copy-paste button according to your circuit. For example i made 4 push buttons for 2 electric shouters.What i am trying to do is to put 2 extra button near to the central door(as master) in order to control the 2 shouters. now in your sketch there are 6 buttons and i want the buttonUp10 = 10; //master up to turn on all the Ledup and buttonDown11 = 11; //master down to control the LedDown.I try to make it work but i am very confused.I believe that with this modification the circuit will be perfect.It works well now but i don't want to keep pushing the button locally until the shouters move up or down.I want the same procedure as with masters!
I am sorry for the annoyance.
Below is an example jpg of 4 local wall button and a master of 2 buttons(up and down).As you can see in order to move down or up the shouters i have to keep pressing the button.If i let the hand it immediately stops(it is a little irritating to keep pressing the button).
int led1Up = 2;
int led2Down = 3;
int led7Up = 7;
int led8Down = 8;
int buttonUp1 = 4;
int buttonDown2 = 6;
int buttonUp9 = 9;
int buttonDown12 = 12;
int buttonUp10 = 10; //master up, with this button i want to turn on in the same time led1Up and led7Up
int buttonDown11 = 11; //master down,with this button i want to turn on in the same time led2Down and led8Down
enum State {
MOVING_UP = 1 ,
MOVING_DOWN,
STOPPED
} state ;
enum State1 {
MOVING_UP1 = 1 ,
MOVING_DOWN1,
STOPPED1
} state1 ;
enum State2 {
MOVING_UP2 = 1 ,
MOVING_DOWN2,
STOPPED2
} state2 ;
boolean buttonPressed( byte buttonPin ) {
// with crude button debounce
if ( digitalRead( buttonPin ) == LOW ) {
delay( 500 ) ;
return true ;
}
else {
return false ;
}
}
boolean buttonPressed1( byte buttonPin1 ) {
// with crude button debounce
if ( digitalRead( buttonPin1 ) == LOW ) {
delay( 500 ) ;
return true ;
}
else {
return false ;
}
}
boolean buttonPressed2( byte buttonPin2 ) {
// with crude button debounce
if ( digitalRead( buttonPin2 ) == LOW ) {
delay( 500 ) ;
return true ;
}
else {
return false ;
}
}
void setup()
{
pinMode(buttonUp1, INPUT_PULLUP);
pinMode(led1Up, OUTPUT);
pinMode(buttonDown2, INPUT_PULLUP);
pinMode(led2Down, OUTPUT);
state = STOPPED ;
pinMode(buttonUp9, INPUT_PULLUP);
pinMode(led7Up, OUTPUT);
pinMode(buttonDown12, INPUT_PULLUP);
pinMode(led8Down, OUTPUT);
state1 = STOPPED1 ;
pinMode(buttonUp10, INPUT_PULLUP);
pinMode(buttonDown11, INPUT_PULLUP);
state2 = STOPPED2 ;
}
void loop()
{
static unsigned long upButtonPressedAtMs ;
static unsigned long downButtonPressedAtMs ;
static unsigned long upButtonPressedAtMs1 ;
static unsigned long downButtonPressedAtMs1 ;
static unsigned long upButtonPressedAtMs2 ;
static unsigned long downButtonPressedAtMs2 ;
// actions dependent on current state
if ( state == STOPPED ) {
digitalWrite( led1Up, true ) ;
digitalWrite( led2Down, true ) ;
}
else if ( state == MOVING_UP ) {
digitalWrite( led1Up, true ) ;
digitalWrite( led2Down, false ) ;
}
else if ( state == MOVING_DOWN ) {
digitalWrite( led1Up, false ) ;
digitalWrite( led2Down, true ) ;
}
// check if a state transition necessary
if ( state == MOVING_UP && millis() - upButtonPressedAtMs > 5000 ) {
state = STOPPED ;
}
if ( state == MOVING_UP && buttonPressed( buttonUp1 ) ) {
state = STOPPED ;
}
if ( state == MOVING_UP && buttonPressed( buttonDown2 ) ) {
downButtonPressedAtMs = millis() ;
state = MOVING_DOWN ;
}
if ( state == MOVING_DOWN && millis() - downButtonPressedAtMs > 5000 ) {
state = STOPPED ;
}
if ( state == MOVING_DOWN && buttonPressed( buttonDown2 ) ) {
state = STOPPED ;
}
if ( state == MOVING_DOWN && buttonPressed( buttonUp1 ) ) {
upButtonPressedAtMs = millis() ;
state = MOVING_UP ;
}
if ( state == STOPPED && buttonPressed( buttonUp1 ) ) {
upButtonPressedAtMs = millis() ;
state = MOVING_UP ;
}
if ( state == STOPPED && buttonPressed( buttonDown2 ) ) {
downButtonPressedAtMs = millis() ;
state = MOVING_DOWN ;
}
// actions dependent on current state
if ( state1 == STOPPED1 ) {
digitalWrite( led7Up, true ) ;
digitalWrite( led8Down, true ) ;
}
else if ( state1 == MOVING_UP1 ) {
digitalWrite( led7Up, true ) ;
digitalWrite( led8Down, false ) ;
}
else if ( state1 == MOVING_DOWN1 ) {
digitalWrite( led7Up, false ) ;
digitalWrite( led8Down, true ) ;
}
// check if a state transition necessary
if ( state1 == MOVING_UP1 && millis() - upButtonPressedAtMs1 > 5000 ) {
state1 = STOPPED1 ;
}
if ( state1 == MOVING_UP1 && buttonPressed1( buttonUp9 ) ) {
state1 = STOPPED1 ;
}
if ( state1 == MOVING_UP1 && buttonPressed1( buttonDown12 ) ) {
downButtonPressedAtMs1 = millis() ;
state1 = MOVING_DOWN1 ;
}
if ( state1 == MOVING_DOWN1 && millis() - downButtonPressedAtMs1 > 5000 ) {
state1 = STOPPED1 ;
}
if ( state1 == MOVING_DOWN1 && buttonPressed1( buttonDown12 ) ) {
state1 = STOPPED1 ;
}
if ( state1 == MOVING_DOWN1 && buttonPressed1( buttonUp9 ) ) {
upButtonPressedAtMs1 = millis() ;
state1 = MOVING_UP1 ;
}
if ( state1 == STOPPED1 && buttonPressed1( buttonUp9 ) ) {
upButtonPressedAtMs1 = millis() ;
state1 = MOVING_UP1 ;
}
if ( state1 == STOPPED1 && buttonPressed1( buttonDown12 ) ) {
downButtonPressedAtMs1 = millis() ;
state1 = MOVING_DOWN1 ;
}
// actions dependent on current state
if ( state2 == STOPPED2 ) {
digitalWrite( led1Up, true ) ;
digitalWrite( led2Down, true ) ;
digitalWrite( led7Up, true ) ;
digitalWrite( led8Down, true ) ;
}
else if ( state2 == MOVING_UP2 ) {
digitalWrite( led1Up, true ) ;
digitalWrite( led2Down, false ) ;
digitalWrite( led7Up, true ) ;
digitalWrite( led8Down, false ) ;
}
else if ( state2 == MOVING_DOWN2 ) {
digitalWrite( led1Up, false ) ;
digitalWrite( led2Down, true ) ;
digitalWrite( led7Up, false ) ;
digitalWrite( led8Down, true ) ;
}
// check if a state transition necessary
if ( state2 == MOVING_UP2 && millis() - upButtonPressedAtMs2 > 5000) {
state2 = STOPPED2;
}
if ( state2 == MOVING_UP2 && buttonPressed2( buttonUp10 )) {
state2 = STOPPED2 ;
}
if ( state2 == MOVING_UP2 && buttonPressed2( buttonDown11)) {
downButtonPressedAtMs2 = millis() ;
state2 = MOVING_DOWN2 ;
}
if ( state2 == MOVING_DOWN2 && millis() - downButtonPressedAtMs2 > 5000) {
state2 = STOPPED2 ;
state = STOPPED ;
}
if ( state2 == MOVING_DOWN2 && buttonPressed2( buttonDown11 ) ) {
state2 = STOPPED2 ;
state = STOPPED ;
}
if ( state2 == MOVING_DOWN2 && buttonPressed2( buttonUp10 ) ) {
upButtonPressedAtMs2 = millis() ;
state2 = MOVING_UP2 ;
}
if ( state2 == STOPPED2 && buttonPressed2( buttonUp10 ) ) {
upButtonPressedAtMs2 = millis() ;
state2 = MOVING_UP2 ;
}
if ( state2 == STOPPED2 && buttonPressed2( buttonDown11 ) ) {
downButtonPressedAtMs2 = millis() ;
state2 = MOVING_DOWN2 ;
}
}