1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
#Multimetre Digitek 9405 avec wxpython
#Version 0.1.2
import serial
import wx
# Dictionnaires pour décoder les données du port série
unit={'\x80':'V', '\x40' : 'A', '\x20' : '\xe2\x84\xa6', '\x08' : 'Hz', '\x04' : 'F'}
prefix={'\x80' : u'\xb5', '\x40' : 'm', '\x20' : 'k', '\x10' : 'M', '\x00' : '' }
virgule={'1' : 1000, '2' :100, '4' : 10, '0' : 1}
#Ouverture du port série
ser = serial.Serial('/dev/ttyS0',2400)
class frame(wx.Frame):
def __init__(self) :
wx.Frame.__init__(self, None, -1, title="DMM9405", size = (250,100))
self.conteneur = wx.Panel(self,-1, size = self.GetClientSize())
self.affich="Connexion..."
self.etiquette = wx.StaticText(self.conteneur, -1, self.affich , style = wx.ALIGN_CENTRE)
wx.EVT_SIZE(self,self.OnSize)
self.Bind(wx.EVT_IDLE, self.OnIdle)
def OnSize(self,evt):
#Centrage lors d'un redimensionnement
self.conteneur.SetSize(self.GetClientSize())
self.etiquette.CentreOnParent()
#Taille de la police en fonction de la taille de la frame
self.font = wx.Font((self.GetClientSize()[0])/10, wx.DECORATIVE, wx.BOLD, wx.NORMAL)
#Mise à jour de la taille de la police
self.etiquette.SetFont(self.font)
def OnIdle(self, event):
#Lecture sur le port série
ser.flushInput() ; s = ser.read(11)
#Mise en forme
if s[1:5]==';0:;' :
self.affich = "OL"
else :
if s[8]=='\n' :
self.affich=s[0]+" "+str(float(s[1:5])/virgule[s[6]])+" n"+unit[s[10]]
else :
self.affich=s[0]+" "+str(float(s[1:5])/virgule[s[6]])+" "+prefix[s[9]]+unit[s[10]]
#Mise à jour de l'affichage
self.etiquette.SetLabel(self.affich)
class MonApp(wx.App) :
def OnInit(self) :
fen=frame()
fen.Show(True)
return True
app= MonApp()
app.MainLoop()
#Fermeture du port série en fin de boucle
ser.close() |