<div dir="ltr">hi!<div>I need some advice for a project that i've started to learn RP2040 and Micropython</div><div><br></div><div>HARDWARE</div><div>RP PICO</div><div>3 position switch</div><div>1 button</div><div>some leds</div><div>___</div><div><br></div><div>to save Pins, the switch is connected to a single ADC input and through a comparator, i have 3 different voltage values that i use to identify the switch position.</div><div><br></div><div>I use the switch to activate 3 different modes</div><div>MODE 0, MODE 1 and MODE 2</div><div><br></div><div>MODE 0</div><div>is a program selection function</div><div>when in this modality, the button serve to select the 'APP', indicated by a led in a 3x3 matrix</div><div>selected app is lit.</div><div><br></div><div>MODE 1</div><div>in this mode, the selected app RUNS!</div><div><br></div><div>MODE 2</div><div>reserve</div><div><br></div><div>___</div><div><br></div><div>What can I do<br>- I do the detect of the MODE<br>- when I am in MODE 0, I call the appSelect function and with the button, i cycle on the LEDs</div><div><br></div><div><b>the problem</b></div><div>- <b>when I go back to MODE 1, it should leave the select mode and run the selected APP but unfortunately the appSelect remains active<br></b></div><div><br></div><div>___</div><div>The CODE</div><div><br></div><div><b>main.py</b></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">from machine import ADC<br>import utime<br>import _thread<br>import appselect_module<br>mode = 0<br><br>def readVoltage():<br>        analogValue = ADC(26)<br>        return analogValue.read_u16() / 65536 * 3.3<br>   <br> def main():<br>    global mode<br>   <br>     while True:<br>        if mode == 1:<br>            print("MODE 1")<br>           <br>             utime.sleep(2)<br>        if mode == 2:<br>            print("MODE 2")<br>            utime.sleep(2)<br>        if mode == 0:<br>            print("MODE 0" + str(mode))<br>            utime.sleep(1)<br>            appselect_module.appSelect(mode)<br>           <br>def mode():<br>    global mode<br>   <br>     while True:<br>       <br>         reading = readVoltage()<br>        print(reading)<br>       <br>         if reading > 1 and reading < 3:<br>            """<br>            MODE 1: App run<br>            """<br>            print("MODE 1")<br>            mode = 1<br>            utime.sleep(1)<br>        elif reading < 1:<br>            """<br>            MODE 2: Riserva<br>            """<br>            print("MODE 2")<br>            mode = 2<br>            utime.sleep(1)<br>        else:<br>            """<br>            MODE 0: App selection<br>            """<br>            print("MODE 0 + " + str(0))<br>            mode = 0<br>            utime.sleep(1)<br>_thread.start_new_thread(mode, ())<br>while True:<br>    main()</blockquote><div>    <br>  <b>appselect_module.py</b></div><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">import machine<br>import time<br>import _thread<br>from primitives.pushbutton import Pushbutton<br>import uasyncio as asyncio<br>import hal<br>import functions<br>prev_app = 5<br>next_app = 0<br>total_apps = 6<br>mode = 0<br>functions.allLedOff()<br>machine.Pin(hal.leds[prev_app]).low()<br>def readVoltage():<br>        analogValue = ADC(26)<br>        return analogValue.read_u16() / 65536 * 3.3<br>def appSelect(mode):<br>    global mode<br>    global next_app<br>    while mode == 0:<br>        print("SONO IN APP SELECT")<br>        def app_select():<br>            global prev_app<br>             global next_app<br>             global total_apps<br>            print("SONO IN APP SELECT e MODE " + mode)<br>            machine.Pin(hal.leds[prev_app]).low() #program precedente<br>           <br>             if prev_app == 0:<br>                machine.Pin(hal.leds[total_apps]).high()<br>                machine.Pin(hal.leds[0]).high()<br>            else:<br>                machine.Pin(hal.leds[prev_app]).high()<br>               <br>             next_app = prev_app + 1<br>            machine.Pin(hal.leds[next_app]).low()<br>            if next_app >= total_apps:<br>                prev_app = 0<br>            else:<br>                prev_app = next_app<br>           <br>         def app_confirm():<br>            print("confirm")<br>           <br>         def button():<br>           <br>             pb = Pushbutton(hal.button)<br>            pb.press_func(app_select, ())  # Callback on button press<br>            pb.long_func(app_confirm, ())  # Callback on long press<br>            while True:<br>                await asyncio.sleep(1)<br>                       <br>         try:<br>            asyncio.run(button())<br>        finally:<br>            asyncio.new_event_loop()</blockquote>            <br>        <br>  Thanks for the help!</div><div><br><br><br></div><div><br></div><div> </div></div>