#!/usr/bin/env python3
#-*- coding:utf-8 -*-
'''
Autor: Joao Bernardo Vianna
Data: 12/03/2011
'''
from tkinter import Tk, Frame, Button, Label, Entry, LEFT, TOP, RIGHT
import serial
MAX_NUM = 255
INCREMENTO = 10
porta_serial = '/dev/ttyUSB0'
tempo = 5
taxa = 115200
class Programa:
def __init__(self, serial_dic):
self.janela = Tk()
self.janela.title('Controle de Volume')
self.janela['padx'] = 60
self.janela['pady'] = 20
self.serial_dic = serial_dic
try:
self.serial = serial.Serial(**serial_dic)
except serial.SerialException:
self.serial = None
self.fr = Frame(self.janela)
self.fr.pack()
if self.serial:
txt = 'Conectado a '
else:
txt = 'Impossivel conectar a '
txt += self.serial_dic['port']
Label(self.fr, text=txt+'\n').pack(side=TOP)
Label(self.fr, text='Volume\n\n').pack(side=TOP)
fr_caixa = Frame(self.fr)
fr_caixa.pack(side=TOP)
self.caixa = Entry(fr_caixa, width=5)
self.caixa.insert(0, '0')
self.caixa.pack(side=LEFT)
Label(fr_caixa, text=' ', font='sans').pack(side=LEFT)
Button(fr_caixa, text='Enviar', command=self.enviar).pack(side=RIGHT)
fr_btn = Frame(self.fr)
fr_btn.pack(side=TOP)
Label(fr_btn, text='\n').pack(side=TOP)
Button(fr_btn, text='+', command=self.aumentar, font='sans').pack(side=LEFT)
Button(fr_btn, text='-', command=self.diminuir, font='sans').pack(side=LEFT)
def verifica_num(self, valor):
try:
num = int(self.caixa.get())
if num < 0:
raise ValueError
return num
except ValueError:
return -1
def enviar(self):
num = self.verifica_num(self.caixa.get())
if num > MAX_NUM:
num = MAX_NUM
if num < 0:
num = 0
self.caixa.delete(0, 1000)
self.caixa.insert(0, str(num))
self.envia_serial(num)
def aumentar(self, direcao=True):
num = self.verifica_num(self.caixa.get())
if num >= 0:
if direcao:
num += INCREMENTO
else:
num -= INCREMENTO
else:
num = 0
if num > MAX_NUM:
num = MAX_NUM
if num < 0:
num = 0
self.caixa.delete(0, 1000)
self.caixa.insert(0, str(num))
self.envia_serial(num)
def diminuir(self):
self.aumentar(False)
def envia_serial(self, valor):
if self.serial:
self.serial.write(bytes(str(valor), 'utf8'))
def executar(self):
self.janela.mainloop()
if __name__ == '__main__':
s = {'port': porta_serial, 'baudrate': taxa, 'timeout': tempo}
Programa(s).executar()