mirror of
https://github.com/thearn/Python-Arduino-Command-API.git
synced 2026-01-10 23:18:08 -05:00
Added Melody
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
|
||||
from arduino import Arduino
|
||||
|
||||
#!/usr/bin/env python
|
||||
|
||||
|
||||
from arduino import Arduino,Shrimp
|
||||
|
||||
|
||||
@@ -267,6 +267,62 @@ class Arduino(object):
|
||||
except:
|
||||
return 0
|
||||
|
||||
def Melody(self, pin, melody, durations):
|
||||
"""
|
||||
Plays a melody.
|
||||
inputs:
|
||||
pin: digital pin number for playback
|
||||
melody: list of tones
|
||||
durations: list of duration
|
||||
length of melody should be of same
|
||||
length as length of duration
|
||||
|
||||
Melodies of the following lenght, can cause trouble
|
||||
when playing it multiple times.
|
||||
board.Melody(9,["C4","G3","G3","A3","G3",0,"B3","C4"],[4,8,8,4,4,4,4,4])
|
||||
Playing short melodies (1 or 2 tones) didn't cause trouble during testing
|
||||
"""
|
||||
NOTES = dict(B0=31,C1=33,CS1=35,D1=37,DS1=39,E1=41,F1=44,FS1=46,G1=49\
|
||||
,GS1=52,A1=55,AS1=58,B1=62,C2=65,CS2=69,D2=73,DS2=78,E2=82\
|
||||
,F2=87,FS2=93,G2=98,GS2=104,A2=110,AS2=117,B2=123,C3=131\
|
||||
,CS3=139,D3=147,DS3=156,E3=165,F3=175,FS3=185,G3=196,GS3=208\
|
||||
,A3=220,AS3=233,B3=247,C4=262,CS4=277,D4=294,DS4=311,E4=330\
|
||||
,F4=349,FS4=370,G4=392,GS4=415,A4=440,AS4=466,B4=494,C5=523\
|
||||
,CS5=554,D5=587,DS5=622,E5=659,F5=698,FS5=740,G5=784,GS5=831\
|
||||
,A5=880,AS5=932,B5=988,C6=1047,CS6=1109,D6=1175,DS6=1245,E6=1319\
|
||||
,F6=1397,FS6=1480,G6=1568,GS6=1661,A6=1760,AS6=1865,B6=1976,C7=2093\
|
||||
,CS7=2217,D7=2349,DS7=2489,E7=2637,F7=2794,FS7=2960,G7=3136\
|
||||
,GS7=3322,A7=3520,AS7=3729,B7=3951,C8=4186,CS8=4435,D8=4699,DS8=4978)
|
||||
if (type(melody) == list) and (type(durations) == list):
|
||||
length = len(melody)
|
||||
cmd_str = "@to%"+str(length)+"%"+str(pin)+"%"
|
||||
d = ""
|
||||
if length == len(durations):
|
||||
for note in range(length):
|
||||
n = NOTES.get(melody[note])
|
||||
cmd_str = cmd_str+str(n)+"%"
|
||||
for duration in range(len(durations)):
|
||||
d = str(durations[duration])
|
||||
cmd_str = cmd_str+d+"%"
|
||||
cmd_str = cmd_str[:-1]+"$!"
|
||||
print cmd_str
|
||||
try:
|
||||
self.sr.write(cmd_str)
|
||||
self.sr.flush()
|
||||
except:
|
||||
pass
|
||||
cmd_str=''.join(["@nto%",str(pin),"$!"])
|
||||
print cmd_str
|
||||
try:
|
||||
self.sr.write(cmd_str)
|
||||
self.sr.flush()
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
return -1
|
||||
else:
|
||||
return -1
|
||||
|
||||
##SDM
|
||||
class Shrimp(Arduino):
|
||||
def __init__(self):
|
||||
|
||||
Reference in New Issue
Block a user