71 lines
2 KiB
Python
71 lines
2 KiB
Python
# SPDX-FileCopyrightText: 2017 John Edgar Park for Adafruit Industries
|
|
#
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
# Screaming Cauldron
|
|
# for Adafruit Industries Learning Guide
|
|
|
|
import time
|
|
|
|
import board
|
|
import neopixel
|
|
from analogio import AnalogIn
|
|
from digitalio import DigitalInOut, Direction
|
|
|
|
led = DigitalInOut(board.D13) # on board red LED
|
|
led.direction = Direction.OUTPUT
|
|
|
|
aFXPin = DigitalInOut(board.D2) # pin used to drive the AudioFX board
|
|
aFXPin.direction = Direction.OUTPUT
|
|
|
|
aFXPin.value = False # runs once at startup
|
|
time.sleep(.1) # pause a moment
|
|
aFXPin.value = True # then turn it off
|
|
|
|
analog0in = AnalogIn(board.D1)
|
|
neoPin = board.D0 # pin int0 which the NeoPixels are plugged
|
|
numPix = 30 # number of NeoPixels
|
|
pixels = neopixel.NeoPixel(neoPin, numPix, auto_write=0, brightness=.8)
|
|
pixels.fill((0, 0, 0,))
|
|
pixels.show()
|
|
|
|
|
|
def get_voltage(pin):
|
|
return (pin.value * 3.3) / 65536
|
|
|
|
|
|
def remap_range(value, left_min, left_max, right_min, right_max):
|
|
# this remaps a value from original (left) range to new (right) range
|
|
# Figure out how 'wide' each range is
|
|
leftSpan = left_max - left_min
|
|
rightSpan = right_max - right_min
|
|
|
|
# Convert the left range into a 0-1 range (int)
|
|
valueScaled = int(value - left_min) / int(leftSpan)
|
|
|
|
# Convert the 0-1 range into a value in the right range.
|
|
return int(right_min + (valueScaled * rightSpan))
|
|
|
|
|
|
while True:
|
|
distRaw = analog0in.value # read the raw sensor value
|
|
print("A0: %f" % distRaw) # write raw value to REPL
|
|
distRedColor = remap_range(distRaw, 0, 64000, 0, 255)
|
|
distGreenColor = remap_range(distRaw, 0, 64000, 200, 0)
|
|
if distRaw > 40000: # at about 4 inches, this goes off!
|
|
led.value = True
|
|
aFXPin.value = False
|
|
time.sleep(.35)
|
|
|
|
else:
|
|
led.value = False
|
|
aFXPin.value = True
|
|
|
|
# change pixel colors based on proximity
|
|
|
|
print(distRedColor, distGreenColor, (distRedColor + distGreenColor))
|
|
pixels.fill((distRedColor, distGreenColor, 0))
|
|
|
|
pixels.write()
|
|
|
|
time.sleep(0.1)
|