]> Repositories - Adafruit_Blinka-hackapet.git/blob - src/adafruit_blinka/microcontroller/rp2040_u2if/analogio.py
Merge pull request #848 from nopnop2002/main
[Adafruit_Blinka-hackapet.git] / src / adafruit_blinka / microcontroller / rp2040_u2if / analogio.py
1 # SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries
2 #
3 # SPDX-License-Identifier: MIT
4 """
5 `analogio` - Analog input and output control
6 =================================================
7 See `CircuitPython:analogio` in CircuitPython for more details.
8 * Author(s): Carter Nelson
9 """
10 from adafruit_blinka import ContextManaged
11 from .rp2040_u2if import rp2040_u2if
12
13
14 class AnalogIn(ContextManaged):
15     """AnalogIn Base Class for RP2040 u2if"""
16
17     def __init__(self, pin):
18         self.pin_id = pin.id
19         rp2040_u2if.adc_init_pin(self.pin_id)
20
21     @property
22     def value(self):
23         """Read the ADC and return the value"""
24         return rp2040_u2if.adc_get_value(self.pin_id) << 4
25
26     # pylint: disable=no-self-use
27     @value.setter
28     def value(self, value):
29         # emulate what CircuitPython does
30         raise AttributeError("'AnalogIn' object has no attribute 'value'")
31
32     # pylint: enable=no-self-use
33
34     def deinit(self):
35         pass
36
37
38 class AnalogIn_Pico(AnalogIn):
39     """AnalogIn Base Class for Pico u2if"""
40
41     def __init__(self, pin):
42         # per their pinout, why only two?
43         if pin.id not in (26, 27):
44             raise ValueError("Pin does not support ADC.")
45         super().__init__(pin)
46
47
48 class AnalogIn_Feather(AnalogIn):
49     """AnalogIn Base Class for Feather u2if"""
50
51     def __init__(self, pin):
52         if pin.id not in (26, 27, 28):
53             raise ValueError("Pin does not support ADC.")
54         super().__init__(pin)
55
56
57 class AnalogIn_QTPY(AnalogIn):
58     """AnalogIn Base Class for QT Py 2040 u2if"""
59
60     def __init__(self, pin):
61         if pin.id not in (26, 27, 28):
62             raise ValueError("Pin does not support ADC.")
63         super().__init__(pin)
64
65
66 class AnalogIn_ItsyBitsy(AnalogIn):
67     """AnalogIn Base Class for ItsyBitsy 2040 u2if"""
68
69     def __init__(self, pin):
70         if pin.id not in (26, 27, 28):
71             raise ValueError("Pin does not support ADC.")
72         super().__init__(pin)