Merge pull request #186 from pimoroni/pymodules
Add python module for RGBLED and Button
This commit is contained in:
commit
9e1eb6723d
|
@ -61,6 +61,7 @@ jobs:
|
|||
# Copy module files from Blinka/PlatformDetect into MicroPython
|
||||
- name: Copy modules
|
||||
run: |
|
||||
cp -r pimoroni-pico-${GITHUB_SHA}/micropython/modules_py/* micropython/ports/rp2/modules/
|
||||
mkdir -p micropython/ports/rp2/modules/adafruit_blinka/microcontroller/
|
||||
cp -r Adafruit_Blinka/src/adafruit_blinka/microcontroller/rp2040 micropython/ports/rp2/modules/adafruit_blinka/microcontroller/
|
||||
mkdir -p micropython/ports/rp2/modules/adafruit_blinka/board/raspberrypi/
|
||||
|
|
|
@ -41,6 +41,11 @@ jobs:
|
|||
submodules: true
|
||||
path: pimoroni-pico-${{ github.sha }}
|
||||
|
||||
# Copy Python module files
|
||||
- name: Copy modules
|
||||
run: |
|
||||
cp -r pimoroni-pico-${GITHUB_SHA}/micropython/modules_py/* micropython/ports/rp2/modules/
|
||||
|
||||
# Linux deps
|
||||
- name: Install deps
|
||||
if: runner.os == 'Linux'
|
||||
|
|
|
@ -32,4 +32,4 @@ jobs:
|
|||
- name: Lint
|
||||
shell: bash
|
||||
run: |
|
||||
python3 -m flake8 --ignore E501 micropython/examples
|
||||
python3 -m flake8 --ignore E501 micropython/modules_py micropython/examples
|
|
@ -0,0 +1,69 @@
|
|||
import time
|
||||
from machine import Pin, PWM
|
||||
|
||||
|
||||
class Button:
|
||||
def __init__(self, button, invert=True, repeat_time=200, hold_time=1000):
|
||||
self.invert = invert
|
||||
self.repeat_time = repeat_time
|
||||
self.hold_time = hold_time
|
||||
self.pin = Pin(button, pull=Pin.PULL_UP if invert else Pin.PULL_DOWN)
|
||||
self.last_state = False
|
||||
self.pressed = False
|
||||
self.pressed_time = 0
|
||||
|
||||
def read(self):
|
||||
current_time = time.ticks_ms()
|
||||
state = self.raw()
|
||||
changed = state != self.last_state
|
||||
self.last_state = state
|
||||
|
||||
if changed:
|
||||
if state:
|
||||
self.pressed_time = current_time
|
||||
self.pressed = True
|
||||
self.last_time = current_time
|
||||
return True
|
||||
else:
|
||||
self.pressed_time = 0
|
||||
self.pressed = False
|
||||
self.last_time = 0
|
||||
|
||||
if self.repeat_time == 0:
|
||||
return False
|
||||
|
||||
if self.pressed:
|
||||
repeat_rate = self.repeat_time
|
||||
if self.hold_time > 0 and current_time - self.pressed_time > self.hold_time:
|
||||
repeat_rate /= 3
|
||||
if current_time - self.last_time > repeat_rate:
|
||||
self.last_time = current_time
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
def raw(self):
|
||||
if self.invert:
|
||||
return not self.pin.value()
|
||||
else:
|
||||
return self.pin.value()
|
||||
|
||||
|
||||
class RGBLED:
|
||||
def __init__(self, r, g, b, invert=True):
|
||||
self.invert = invert
|
||||
self.led_r = PWM(Pin(r))
|
||||
self.led_r.freq(1000)
|
||||
self.led_g = PWM(Pin(g))
|
||||
self.led_g.freq(1000)
|
||||
self.led_b = PWM(Pin(b))
|
||||
self.led_b.freq(1000)
|
||||
|
||||
def set_rgb(self, r, g, b):
|
||||
if self.invert:
|
||||
r = 255 - r
|
||||
g = 255 - g
|
||||
b = 255 - b
|
||||
self.led_r.duty_u16(r * 255)
|
||||
self.led_g.duty_u16(g * 255)
|
||||
self.led_b.duty_u16(b * 255)
|
Loading…
Reference in New Issue