arduino-mpduino/serialmpcduino.py

174 lines
4.6 KiB
Python

import serial
import time
class SerialMPCduino(object):
__volume = None
__progress = None
__title = None
__artist = None
__album = None
__playing = None
__repeat = None
__shuffle = None
__random = None
__single = None
__consume = None
def __init__(self, tty, baud):
self.tty = tty
self.baud = baud
self.serial = serial.Serial(tty, baud)
def setup(self):
print("Setup")
print(self.serial)
print("------")
def check_serial(self):
while not self.serial.inWaiting():
pass
if ( self.serial.inWaiting() > 0 ):
#if incoming bytes are waiting to be read from the serial input buffer
#read the bytes and convert from binary array to ASCII
string = self.serial.readline().decode('ascii')
print(string)
return string
def write_serial(self, string):
print("S"+string)
wait_time = 0.3 + 10 * len(string) / float(self.baud)
self.serial.write("S"+string+"\n")
time.sleep(wait_time)
string = self.serial.readline().decode('ascii')
time.sleep(0.2)
print(string)
print("Ready")
def read_serial(self, string):
self.serial.write("E"+string+"\n")
return self.serial.readline()
def Checker(self, varfrom, varto, string):
if varfrom == varto:
return 0
self.write_serial(string)
return 1
# Percentages
@property
def progress(self):
return self.read_serial("p")
@progress.setter
def progress(self, new):
if self.Checker(self.__progress, new, "p"+str(new)):
print("Progress: {}".format(new))
self.__progress = new
@property
def volume(self):
return self.read_serial("V")
@volume.setter
def volume(self, new):
if self.Checker(self.__volume, new, "V"+str(new)):
print("Volume: {}".format(new))
self.__volume = new
# Strings
@property
def title(self):
return self.write_serial("T")
@title.setter
def title(self, new):
if self.Checker(self.__title, new, "T"+str(new)):
print("Title: {}".format(new))
self.__title = new
@property
def artist(self):
return self.write_serial("A")
@artist.setter
def artist(self, new):
if self.Checker(self.__artist, new, "A"+str(new)):
print("Artist: {}".format(new))
self.__artist = new
@property
def album(self):
return self.write_serial("a")
@album.setter
def album(self, new):
if self.Checker(self.__album, new, "a"+str(new)):
print("Album: {}".format(new))
self.__album = new
# Booleans
@property
def repeat(self):
return self.write_serial("r")
@repeat.setter
def repeat(self, new):
if self.Checker(self.__repeat, new, "r"+str(new)):
print("Repeat: {}".format(new))
self.__repeat = new
@property
def shuffle(self):
return self.write_serial("z")
@shuffle.setter
def shuffle(self, new):
if self.Checker(self.__shuffle, new, "z"+str(new)):
print("Shuffle: {}".format(new))
self.__shuffle = new
@property
def single(self):
return self.read_serial("s")
@single.setter
def single(self, single):
if self.Checker(self.__single, new, "s"+str(new)):
print("Single: {}".format(new))
self.__single = new
@property
def random(self):
return self.read_serial("x")
@random.setter
def random(self, new):
if self.Checker(self.__random, new, "x"+str(new)):
print("Random: {}".format(new))
self.__random = new
@property
def consume(self):
return self.read_serial("x")
@consume.setter
def consume(self, new):
if self.Checker(self.__consume, new, "c"+str(new)):
print("Consume: {}".format(new))
self.__consume = new
@property
def update(self):
return self.read_serial("u")
@update.setter
def update(self, new):
if self.Checker(self.__update, new, "u"+str(new)):
print("Update: {}".format(new))
self.__update = new
@property
def playing(self):
return self.read_serial("P")
@playing.setter
def playing(self, new):
if self.Checker(self.__playing, new, "P"+str(new)):
print("Playing: {}".format(new))
self.__playing = new