goto main_loop # Run the main loop when the script starts (see below). # This subroutine returns 1 if the button is pressed, 0 otherwise. # To convert the input value (0-1023) to a digital value (0 or 1) representing # the state of the button, we make a comparison to an arbitrary threshold (500). # This subroutine puts a logical value of 1 or a 0 on the stack, depending # on whether the button is pressed or not. sub button 0 get_position 500 less_than return # This subroutine uses the BUTTON subroutine above to wait for a button press, # including a small delay to eliminate noise or bounces on the input. sub wait_for_button_press wait_for_button_open_10ms wait_for_button_closed_10ms return # Wait for the button to be NOT pressed for at least 10 ms. sub wait_for_button_open_10ms get_ms # put the current time on the stack begin # reset the time on the stack if it is pressed button if drop get_ms else get_ms over minus 10 greater_than if drop return endif endif repeat # Wait for the button to be pressed for at least 10 ms. sub wait_for_button_closed_10ms get_ms begin # reset the time on the stack if it is not pressed button if get_ms over minus 10 greater_than if drop return endif else drop get_ms endif repeat sub frame wait_for_button_press start_sequence return sub start_sequence: 500 3968 0 8000 3968 0 0 0 0 0 0 0 frame_1..11 # Frame 0 500 8000 frame_1 # Frame 1 500 3968 frame_3 # Frame 2 500 8000 frame_4 # Frame 3 return sub frame_1..11 11 servo 10 servo 9 servo 8 servo 7 servo 6 servo 5 servo 4 servo 3 servo 2 servo 1 servo delay return sub frame_1 1 servo delay return sub frame_3 3 servo delay return sub frame_4 4 servo delay return