Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import time
- from machine import ADC, Pin, idle
- from neopixel import NeoPixel
- LEDS = 20
- OFFSET = 1449
- adc0 = ADC(Pin(10))
- np = NeoPixel(Pin(15), LEDS)
- np.fill((0,0,0))
- np.write()
- class IIRLowPassShift:
- def __init__(self, shift: int, initial: int=0, offset: int=0):
- self.shift = shift
- self.y = initial
- self.offset = offset
- def update(self):
- x = adc0.read_u16()
- self.y = self.y + ((x - self.y) >> self.shift)
- return max(0, self.y - self.offset)
- low_pass = IIRLowPassShift(4, offset=OFFSET)
- while True:
- value = low_pass.update() / 65536 * LEDS
- value, fraction = divmod(value, 1)
- # print(value, fraction)
- for i in range(LEDS):
- if value > i:
- np[i] = (255, 0, 0)
- elif fraction:
- np[i] = (int(fraction * 255), 0, 0)
- fraction = 0
- else:
- np[i] = (0, 0, 0)
- np.write()
- # time.sleep_ms(1)
- idle()
Advertisement