code.py
 1  # SPDX-FileCopyrightText: 2021 John Park for Adafruit Industries
 2  # SPDX-License-Identifier: MIT
 3  """
 4  Proximity Trinkey MIDI
 5  Touch pads switch between CC and Pitch Bend modes
 6  Blue LED for CC, Red LED for pitchbend
 7  Brightness of LEDs for proximity
 8  """
 9  import board
10  import neopixel
11  import touchio
12  import usb_midi
13  import adafruit_midi
14  from adafruit_midi.control_change import ControlChange
15  from adafruit_midi.pitch_bend import PitchBend
16  
17  from adafruit_apds9960.apds9960 import APDS9960
18  
19  apds = APDS9960(board.I2C())
20  apds.enable_proximity = True
21  
22  touch1 = touchio.TouchIn(board.TOUCH1)
23  touch2 = touchio.TouchIn(board.TOUCH2)
24  
25  pixels = neopixel.NeoPixel(board.NEOPIXEL, 2)
26  
27  midi = adafruit_midi.MIDI(
28      midi_in=usb_midi.ports[0], in_channel=0, midi_out=usb_midi.ports[1], out_channel=0
29  )
30  
31  CC_NUM = 46  # pick your midi cc number here
32  
33  def map_range(in_val, in_min, in_max, out_min, out_max):
34      return out_min + ((in_val - in_min) * (out_max - out_min) / (in_max - in_min))
35  
36  pixels[0] = 0x000000
37  pixels[1] = 0x0000FF
38  
39  prox_pitch = 8192
40  last_prox_pitch = prox_pitch
41  prox_cc = 0
42  last_prox_cc = prox_cc
43  prox_bright = 0
44  last_prox_bright = prox_bright
45  
46  mode = True
47  
48  while True:
49  
50      if touch1.value:  # CC mode
51          pixels[0] = 0xBB0000
52          pixels[1] = 0x0
53          mode = False
54  
55      if touch2.value:  # pitch bend mode
56          pixels[0] = 0x0
57          pixels[1] = 0x0000FF
58          mode = True
59  
60      if mode:
61          prox_cc = int(map_range(apds.proximity, 0, 255, 0, 127))
62          if last_prox_cc is not prox_cc:
63              midi.send(ControlChange(CC_NUM, prox_cc ))
64              print("CC is", prox_cc)
65              last_prox_cc = prox_cc
66      else:
67          prox_pitch = int(map_range(apds.proximity, 0, 255, 8192, 16383))
68          if last_prox_pitch is not prox_pitch:
69              midi.send(PitchBend(prox_pitch))
70              print("Pitch bend is", prox_pitch)
71              last_prox_pitch = prox_pitch
72  
73      prox_bright = map_range(apds.proximity, 0, 255, 0.01, 1.0)
74      pixels.brightness = prox_bright