Skip to content

Commit 3b13f99

Browse files
authored
Merge pull request #2119 from adafruit/pi_vid_synth
Adding code for Pi Video Synth
2 parents 94464e6 + 382a100 commit 3b13f99

File tree

4 files changed

+402
-0
lines changed

4 files changed

+402
-0
lines changed
Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
# SPDX-FileCopyrightText: 2022 Liz Clark for Adafruit Industries
2+
#
3+
# SPDX-License-Identifier: MIT
4+
5+
import socket
6+
import time
7+
import board
8+
import simpleio
9+
import adafruit_vl53l4cd
10+
from adafruit_seesaw import seesaw, rotaryio, neopixel
11+
from adafruit_seesaw.analoginput import AnalogInput
12+
13+
# VL53L4CD setup
14+
vl53 = adafruit_vl53l4cd.VL53L4CD(board.I2C())
15+
16+
# rotary encoder setup
17+
encoder = seesaw.Seesaw(board.I2C(), addr=0x36)
18+
encoder.pin_mode(24, encoder.INPUT_PULLUP)
19+
rot_encoder = rotaryio.IncrementalEncoder(encoder)
20+
21+
# neoslider setup - analog slide pot and neopixel
22+
# 0x30 = red control
23+
# 0x31 = green control
24+
# 0x32 = blue control
25+
red_slider = seesaw.Seesaw(board.I2C(), 0x30)
26+
red_pot = AnalogInput(red_slider, 18)
27+
r_pix = neopixel.NeoPixel(red_slider, 14, 4)
28+
29+
g_slider = seesaw.Seesaw(board.I2C(), 0x31)
30+
green_pot = AnalogInput(g_slider, 18)
31+
g_pix = neopixel.NeoPixel(g_slider, 14, 4)
32+
33+
b_slider = seesaw.Seesaw(board.I2C(), 0x32)
34+
blue_pot = AnalogInput(b_slider, 18)
35+
b_pix = neopixel.NeoPixel(b_slider, 14, 4)
36+
37+
# rotary encoder position tracker
38+
last_position = 0
39+
40+
# neoslider position trackers
41+
last_r = 0
42+
last_g = 0
43+
last_b = 0
44+
45+
# VL53L4CD value tracker
46+
last_flight = 0
47+
48+
# rotary encoder index
49+
x = 0
50+
51+
# VL53L4CD start-up
52+
vl53.inter_measurement = 0
53+
vl53.timing_budget = 200
54+
55+
vl53.start_ranging()
56+
57+
# HTTP socket setup
58+
s = socket.socket()
59+
print("socket check")
60+
61+
port = 12345
62+
63+
s.bind(('', port))
64+
print("socket binded to %s" %(port))
65+
66+
s.listen(1)
67+
print("listening")
68+
69+
time.sleep(10)
70+
71+
c, addr = s.accept()
72+
print('got connected', addr)
73+
74+
while True:
75+
# rotary encoder position read
76+
position = -rot_encoder.position
77+
78+
# VL53L4CD distance read
79+
flight = vl53.distance
80+
81+
# mapping neosliders to use 0-255 range for RGB values in Processing
82+
r_mapped = simpleio.map_range(red_pot.value, 0, 1023, 0, 255)
83+
g_mapped = simpleio.map_range(green_pot.value, 0, 1023, 0, 255)
84+
b_mapped = simpleio.map_range(blue_pot.value, 0, 1023, 0, 255)
85+
86+
# converting neoslider data to integers
87+
r_pot = int(r_mapped)
88+
g_pot = int(g_mapped)
89+
b_pot = int(b_mapped)
90+
91+
# rotary encoder position check
92+
if position != last_position:
93+
# rotary encoder is ranged to 0-3
94+
if position > last_position:
95+
x = (x + 1) % 4
96+
if position < last_position:
97+
x = (x - 1) % 4
98+
# send rotary encoder value over socket
99+
# identifying string is "enc"
100+
c.send(str.encode(' '.join(["enc", str(x)])))
101+
# reset last_position
102+
last_position = position
103+
# sliders only update data for changes >15 to avoid flooding socket
104+
# red neoslider position check
105+
if abs(r_pot - last_r) > 15:
106+
# send red neoslider data over socket
107+
# identifying string is "red"
108+
c.send(str.encode(' '.join(["red", str(r_pot)])))
109+
# reset last_r
110+
last_r = r_pot
111+
# green neoslider position check
112+
if abs(g_pot - last_g) > 15:
113+
# send green neoslider data over socket
114+
# identifying string is "green"
115+
c.send(str.encode(' '.join(["green", str(g_pot)])))
116+
# reset last_g
117+
last_g = g_pot
118+
# blue neoslider position check
119+
if abs(b_pot - last_b) > 15:
120+
# send blue neoslider data over socket
121+
# identifying string is "blue"
122+
c.send(str.encode(' '.join(["blue", str(b_pot)])))
123+
# reset last_b
124+
last_b = b_pot
125+
# VL53L4CD value check
126+
if abs(flight - last_flight) > 2:
127+
# setting max value of 45
128+
if flight > 45:
129+
flight = 45
130+
# send VL53L4CD data over socket
131+
# identifying string is "flight"
132+
c.send(str.encode(' '.join(["flight", str(flight)])))
133+
# reset last_flight
134+
last_flight = flight
135+
# set neopixels on neosliders to match background color of Processing animations
136+
r_pix.fill((r_pot, g_pot, b_pot))
137+
g_pix.fill((r_pot, g_pot, b_pot))
138+
b_pix.fill((r_pot, g_pot, b_pot))
139+
# reset the VL53L4CD
140+
vl53.clear_interrupt()
141+

0 commit comments

Comments
 (0)