import time from pigpio_encoder.rotary import Rotary # Bands dict bands = { "80m":[3.5, 4], "40m":[7, 7.3], "20m":[14, 14.35], "10m":[28, 29.7], "2m":[144,146], "70cm":[430,440] } # iterate over band band = iter(bands) CURRENT_BAND = None def setup_encoder(ranges:list, scale:float=.25): # make the minimum and maximum deviate by .1 minimum, maximum = ranges minimum -= .1 maximum += .1 # prints current value def rotary_callback(counter): print("Counter value: ", round(counter, 2)) # init rotary my_rotary = Rotary( clk_gpio=17, dt_gpio=27, sw_gpio=22 ) # setup rotary my_rotary.setup_rotary( min=minimum, max=maximum, scale=scale, debounce=300, rotary_callback=rotary_callback ) #my_rotary.watch() return my_rotary def change_band(plus:bool=False, minus:bool=False): global CURRENT_BAND if plus: # rollover positive next CURRENT_BAND = next(band) if minus: try: # rollover negative previous bands_keys = list(bands) CURRENT_BAND = bands[bands_keys[bands_keys.index(CURRENT_BAND)-1]] print(CURRENT_BAND) except IndexError: pass # new encoder encoder = setup_encoder(bands[CURRENT_BAND]) print(CURRENT_BAND) return encoder def main(): encoder = change_band(plus=True) while True: if encoder.counter > bands[CURRENT_BAND][1]: encoder = change_band(plus=True) if encoder.counter < bands[CURRENT_BAND][0]: encoder = change_band(minus=True) time.sleep(.5) if __name__ == "__main__": main()