Skip to content

Commit f839b3a

Browse files
committed
adding robot lyre code
Adding code for the robot lyre project
1 parent 0c6efa2 commit f839b3a

1 file changed

Lines changed: 75 additions & 0 deletions

File tree

Robot_Lyre/code.py

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
# SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
2+
# SPDX-License-Identifier: MIT
3+
4+
import time
5+
import board
6+
from adafruit_motor import servo
7+
from adafruit_pca9685 import PCA9685
8+
import usb_midi
9+
import adafruit_midi
10+
from adafruit_midi.note_on import NoteOn
11+
12+
# MIDI input setup
13+
midi = adafruit_midi.MIDI(midi_in=usb_midi.ports[0], in_channel=0)
14+
15+
# i2c PCA9685 setup
16+
i2c = board.STEMMA_I2C()
17+
pca = PCA9685(i2c)
18+
19+
pca.frequency = 50
20+
21+
servo0 = servo.Servo(pca.channels[0])
22+
servo1 = servo.Servo(pca.channels[1])
23+
servo2 = servo.Servo(pca.channels[2])
24+
servo3 = servo.Servo(pca.channels[3])
25+
servo4 = servo.Servo(pca.channels[4])
26+
servo5 = servo.Servo(pca.channels[5])
27+
servo6 = servo.Servo(pca.channels[6])
28+
servo7 = servo.Servo(pca.channels[7])
29+
servo8 = servo.Servo(pca.channels[8])
30+
servo9 = servo.Servo(pca.channels[9])
31+
servo10 = servo.Servo(pca.channels[10])
32+
servo11 = servo.Servo(pca.channels[11])
33+
servo12 = servo.Servo(pca.channels[12])
34+
servo13 = servo.Servo(pca.channels[13])
35+
servo14 = servo.Servo(pca.channels[14])
36+
servo15 = servo.Servo(pca.channels[15])
37+
38+
# array of servos
39+
servos = [servo0, servo1, servo2, servo3, servo4, servo5,
40+
servo6, servo7, servo8, servo9, servo10, servo11,
41+
servo12, servo13, servo14, servo15]
42+
# array of midi notes, high to low
43+
midi_notes = [83, 81, 79, 77, 76, 74, 72, 71, 69, 67, 65, 64, 62, 60, 59, 57]
44+
angle0 = 20
45+
angle1 = 70
46+
47+
# set servos to the same angle on boot
48+
# easier to adjust angles of the horns if needed
49+
print("setting servos")
50+
for i in range(16):
51+
s = servos[i]
52+
s.angle = angle1
53+
time.sleep(0.05)
54+
print("servos set")
55+
56+
while True:
57+
# msg holds MIDI messages
58+
msg = midi.receive()
59+
60+
for i in range(16):
61+
# iterate through servos array & midi notes array
62+
servo = servos[i]
63+
note_played = midi_notes[i]
64+
65+
# if a noteon msg comes in that matches a note in the midi notes array..
66+
if isinstance(msg, NoteOn) and msg.note == note_played:
67+
# print(servo)
68+
# print(note_played)
69+
# servo moves
70+
# angle alternates between angle0 and angle1
71+
if servo.angle <= angle0:
72+
servo.angle = angle1
73+
else:
74+
servo.angle = angle0
75+
# print(servo.angle)

0 commit comments

Comments
 (0)