Home AMX User Forum NetLinx Studio

Button state question

udiudi Posts: 107
I draw in the TP4 two general buttons (button up, button down) and a multi-state general button with 5 states.
I want that when I press the up button the multi-state button will rise in 1 state level and when I press down it will Decreased in 1 state level.
How can I attach the general buttons to the state button? Can I do it on the TP4 or I need to write a code, if so does anyone have an idea how to do that?
thanks for any help

Comments

  • JeffJeff Posts: 374
    You can't quite do what you want.

    Essentially, the only way you can change button states from within the panel is to use the "Command Output" section of button properties to send the ^ANI command to a specific button to change its state. Unfortunately, the ^ANI command only allows you to do a button animation and end on a specific state. There is no "increment up" or "increment down" command, so while you could create 5 buttons to correspond to the 5 different states of your multistate button, you can't really create 2 buttons to scroll through them.

    If, on the other hand, your multi state button were a level, you COULD create 2 buttons to cause it to scroll through its level values. However, that depends on exactly what you're trying to make your multi-state button do.

    J
  • Jorde_VJorde_V Posts: 393
    You could do this from code with the ^ANI command:
    PROGRAM_NAME='test'
    DEFINE_DEVICE
    tp	= 10001:1:0;
    
    define_constant
    button_increment 	= 1;
    button_decrement 	= 2;
    button_animated	= 3;
    
    define_variable
    integer buttons[2]={
    	button_increment, button_decrement
    };
    
    integer current_state;
    
    define_event
    button_event[tp,buttons]{
    	push:{
    		change_button_state(get_last(buttons));
    	}
    }
    
    define_start
    current_state = 0;
    
    define_function change_button_state(integer in_or_de){
    	/* Set the button state depending on the current state 
    	 * Command format: ^ANI-<button_number>,<startstate>,<endstate>,<time>
    	 * Things of Note: if you put in 0 as startstate it will mean the current
    	 * one it is on.
    	 */
    	stack_var temp;
    	temp = current_state;
    	switch(in_or_de){
    		case button_increment: temp++;
    		case button_decrement: temp--;
    	}
    	send_command tp,"'^ANI-',itoa(button_animated),',0,',itoa(temp),',1'";
    	current_state = temp;
    }
    

    This should do the trick, haven't tested it. (don't have a TP handy).
  • viningvining Posts: 4,368
    I would make it a multistate bargraph. Create a level port/channel and set the number of states needed, set the button values for each state, set range hi/lo and then set a channel port/address. On channel push (nromal btn push) send level for the appropriate "tracked" state.

    I wouldn't bother with the ^ani command.
  • dchristodchristo Posts: 177
    vining wrote: »
    I would make it a multistate bargraph. Create a level port/channel and set the number of states needed, set the button values for each state, set range hi/lo and then set a channel port/address. On channel push (nromal btn push) send level for the appropriate "tracked" state.

    I wouldn't bother with the ^ani command.

    To do this completely on the panel, make the center button a multi-state bargraph, as suggested above, and then for the up/down buttons, set them to the same level code as the bargraph. Then set the "level control type" to "relative", and the value to either 1 or -1.

    --D
  • JeffJeff Posts: 374
    Bah, I totally forgot Multi-State Bargraphs even existed.

    Yea, that's the best route :) Pretty simple and easily described above. Good luck!

    J
Sign In or Register to comment.