From 32f2e22ec9d93c99ae3ba1dec4b005c4c89ca876 Mon Sep 17 00:00:00 2001 From: Sjoerd Dirk Meijer Date: Tue, 30 Apr 2013 20:42:48 +0200 Subject: [PATCH] Added Melody --- Arduino/__init__.py | 10 ++++---- Arduino/arduino.py | 56 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 5 deletions(-) diff --git a/Arduino/__init__.py b/Arduino/__init__.py index e440668..2942e63 100644 --- a/Arduino/__init__.py +++ b/Arduino/__init__.py @@ -1,5 +1,5 @@ -#!/usr/bin/env python - - -from arduino import Arduino - +#!/usr/bin/env python + + +from arduino import Arduino,Shrimp + diff --git a/Arduino/arduino.py b/Arduino/arduino.py index a76e321..37aee72 100644 --- a/Arduino/arduino.py +++ b/Arduino/arduino.py @@ -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):