そこにも落とし穴あったか、(ラズピコmicroPython)

ラズピコのmicroPythonで以下のようなコードではRTC割り込み受け付けられません

つまりlight sleep()で無限に待つ設定にして、RTC割り込みを受けようとしてもラズピコのmicroPython実装では、lightsleep中は他の割り込み受け付けは機能しません

    try:
        while True:
            if alarm_triggered:
                alarm_triggered = False
                clear_alarm_flag()
                time.sleep_ms(5)
                set_alarm()
                value1 = round((adc0.read_u16() >> 4) * 3.3 * 3 / 4096, 2)
                value2 = round((adc1.read_u16() >> 4) * 3.3 * 2 / 4096, 2)
                print(value1, value2)
                if value2 > 2.0:
                    logger.write(rtc, value1, value2)
                machine.lightsleep()
    except KeyboardInterrupt:
        print("terminated")

従って、やりたい機能を実装しようとすると、

machine.lightsleep()でRTC割り込みと同等の値(最大値)を設定してやらないとダメ、電池寿命計ろうと思って無限待ちにしたら最初のRTC割り込みしか実行されず、それ以降のRTC割り込みは発生しなくなってしまった

まあラズピコの実装レベルはその程度のようです

 

admin

コメントを残す