Added Melody

This commit is contained in:
Sjoerd Dirk Meijer
2013-04-30 20:42:48 +02:00
parent bf563fefba
commit 32f2e22ec9
2 changed files with 61 additions and 5 deletions

View File

@@ -1,5 +1,5 @@
#!/usr/bin/env python
from arduino import Arduino
#!/usr/bin/env python
from arduino import Arduino,Shrimp

View File

@@ -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):