1
Some background:

In MicroPython there is a class called Pin which controls I/O pins. In CircuitPython a similar class is called DigitalInOut. So for compatibility I wrote this simple class. Unfortunately, something goes wrong with my implementation. after calling:

drv_enn = PinC(board.D0, PinC.OUT)
drv_enn.on()

the pin doesn't go into 3.3V, but rather into 3.51V, which seem to be the uninitialized value. but this code does work, taking the pin into 3.3V:

drv_enn = DigitalInOut(board.D0)
drv_enn.direction = Direction.OUTPUT
drv_enn.value = True

so when I implemented a class without inheritance, it worked ok. My conclusion is that calling super().__init__(pin) did not work well. Did I do something wrong?

BTW I don't think that it is relevant, but my hardware is Seeed XIAO RP2040

my problematic implementation:
class PinC(DigitalInOut):
    OUT = Direction.OUTPUT

    def __init__(self, pin, mode=Direction.OUTPUT):
        super().__init__(pin)
        self.direction = mode

    def on(self):
        self.value = True

    def off(self):
        self.value = False

    def read(self):
        return self.value
This class works as expected - without inheritance:
class PinC:
    OUT = Direction.OUTPUT

    def __init__(self, pin, mode=Direction.OUTPUT):
        self.dio = DigitalInOut(pin)
        self.dio.direction = mode

    def on(self):
        self.dio.value = True

    def off(self):
        self.dio.value = False

    def read(self):
        return self.dio.value

I'd be glad to find out what is the root cause for this!

ishahak
  • 6,585
  • 5
  • 38
  • 56
  • May this hepls https://stackoverflow.com/questions/576169/understanding-python-super-with-init-methods – Foobar Feb 08 '23 at 16:35
  • Thank you @foobar (I liked your nickname). An interesting reading indeed, but I do call the super init and still getting wrong behavior as if it was not initialized correctly – ishahak Feb 09 '23 at 10:23

0 Answers0