#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Python version of libK8055 demo program
#
# Copyright (C) 2007 by Pjetur G. Hjaltason
#
import sys
from qt import *
#from qwt import *
import time, string
from pyk8055 import *
from frmk8055qt import *
class QTK8055(K8055QT):
def __init__(self):
K8055QT.__init__(self)
# Not much sense in making a fancy menu yet
#
#puProg = QPopupMenu(self)
#puProg.insertItem("Quit", Kapp.quit)
#puHelp = QPopupMenu(self)
#puHelp.insertItem("About", self.about)
#self.menu = QMenuBar(self)
#self.menu.insertItem("Program", puProg)
#self.menu.insertItem("Help", puHelp)
# enumerate devices
BMask = SearchDevices()
if not BMask:
print "No K8055 devices found"
exit
# Enable those present
self.CardButton1.setEnabled((BMask & 0x01) > 0)
self.CardButton2.setEnabled((BMask & 0x02) > 0)
self.CardButton3.setEnabled((BMask & 0x04) > 0)
self.CardButton4.setEnabled((BMask & 0x08) > 0)
# set the first one found as suggestion
if (BMask & 0x01) > 0:
self.card = 0
self.CardButton1.setChecked(1)
elif (BMask & 0x02) > 0:
self.card = 1
self.CardButton2.setChecked(1)
elif (BMask & 0x04) > 0:
self.card = 2
self.CardButton3.setChecked(1)
elif (BMask & 0x08) > 0:
self.card = 3
self.CardButton4.setChecked(1)
self.time = QTime.currentTime() # get current time
internalTimer = QTimer( self ) # create internal timer
self.connect( internalTimer, SIGNAL("timeout()"), self.timeout )
internalTimer.start( 100 ) # emit signal every 1/10 second
self.timeout()
def AnalogTest(self):
try:
for step in range(0,255,10):
self.BarAD1.setValue(step)
self.BarAD2.setValue(step)
time.sleep(0.1)
# set analog output channel 1 to 200/255*5v = 3.9V
for step in range(255,0,10):
self.BarAD1.setValue(step)
self.BarAD2.setValue(step)
time.sleep(0.1)
# read both analog inputs
# note: this returns a list
#res = self.k.ReadAllAnalog()
#sres = res[1:]
# There should be more interesting information in the messagebox ;-/
QMessageBox.information( self,'Information', "AllOK","Ok")
except:
pass
def DigitalTest(self):
try:
# Create a rotating display of digital outputs
# while waiting for keypress on digital input 1
# (longer than .2sec :) Loop at most 3 times
Input1High = False
for i in range(1,3):
d = 1
self.k.WriteAllDigital(1)
while Input1High == False and d < 128:
Input1High = (self.k.ReadDigitalChannel(1) > 0)
if Input1High: break
time.sleep(0.2) # wait .2 sec
d *=2 # and continue rotating digital outputs
#if d > 128: d=1;
self.k.WriteAllDigital(d)
if Input1High: break
res = "Digital input 1=" + str(self.k.ReadDigitalChannel(1)) + "
"
# read the counter on input 1
res+= "Counter(1)=" + str(self.k.ReadCounter(1)) + "
"
# read the counter on input 2
res+= "Counter(2)=" + str(self.k.ReadCounter(2))
# set even bits on digital outputs
self.k.WriteAllDigital(170)
time.sleep(1)
# set odd bits on digital outputs
self.k.WriteAllDigital(85)
time.sleep(1)
# Clear all digital outputs
self.k.WriteAllDigital(0)
# There should be more interesting information in the messagebox ;-/
QMessageBox.information( self,'DigitalTest', res,"Ok")
except:
QMessageBox.warning( self,'DigitalTest', "Not OK","Ok")
pass
def EnableAll(self):
self.OutputBox1.setEnabled(1)
self.OutputBox2.setEnabled(1)
self.OutputBox3.setEnabled(1)
self.OutputBox4.setEnabled(1)
self.OutputBox5.setEnabled(1)
self.OutputBox6.setEnabled(1)
self.OutputBox7.setEnabled(1)
self.OutputBox8.setEnabled(1)
self.SetAllDigitalButton.setEnabled(1)
self.ClearAllDigitalButton.setEnabled(1)
self.SetAllAnalogButton.setEnabled(1)
self.ClearAllAnalogButton.setEnabled(1)
self.comboCounter1.setEnabled(1)
self.comboCounter2.setEnabled(1)
self.ClearCounter1.setEnabled(1)
self.ClearCounter2.setEnabled(1)
self.TestDigitalButton.setEnabled(1)
self.TestAnalogButton.setEnabled(1)
self.BarAD1.setEnabled(1)
self.BarAD2.setEnabled(1)
self.BarDA1.setEnabled(1)
self.BarDA2.setEnabled(1)
def DisableAll(self):
self.OutputBox1.setEnabled(0)
self.OutputBox2.setEnabled(0)
self.OutputBox3.setEnabled(0)
self.OutputBox4.setEnabled(0)
self.OutputBox5.setEnabled(0)
self.OutputBox6.setEnabled(0)
self.OutputBox7.setEnabled(0)
self.OutputBox8.setEnabled(0)
self.SetAllDigitalButton.setEnabled(0)
self.ClearAllDigitalButton.setEnabled(0)
self.SetAllAnalogButton.setEnabled(0)
self.ClearAllAnalogButton.setEnabled(0)
self.comboCounter1.setEnabled(0)
self.comboCounter2.setEnabled(0)
self.ClearCounter1.setEnabled(0)
self.ClearCounter2.setEnabled(0)
self.TestDigitalButton.setEnabled(0)
self.TestAnalogButton.setEnabled(0)
self.BarAD1.setEnabled(0)
self.BarAD2.setEnabled(0)
self.BarDA1.setEnabled(0)
self.BarDA2.setEnabled(0)
#
## The QTimer::timeout() signal is received by this slot.
#
def timeout( self ):
#new_time = QTime.currentTime() # get the current time
if self.k != None:
try:
AllVal = self.k.ReadAllValues()
#print AllVal,AllVal[2]
self.BarDA1.setValue(255 - AllVal[2])
self.BarDA2.setValue(255 - AllVal[3])
self.DA1Value.setProperty("intValue",QVariant(AllVal[2]))
self.DA2Value.setProperty("intValue",QVariant(AllVal[3]))
self.Counter1Value.setProperty("intValue",QVariant(AllVal[4]))
self.Counter2Value.setProperty("intValue",QVariant(AllVal[5]))
if (AllVal[1] & 0x01) > 0:
self.DigitalLed1.setState(KLed.On)
else:
self.DigitalLed1.setState(KLed.Off)
if (AllVal[1] & 0x02) > 0:
self.DigitalLed2.setState(KLed.On)
else:
self.DigitalLed2.setState(KLed.Off)
if (AllVal[1] & 0x04) > 0:
self.DigitalLed3.setState(KLed.On)
else:
self.DigitalLed3.setState(KLed.Off)
if (AllVal[1] & 0x08) > 0:
self.DigitalLed4.setState(KLed.On)
else:
self.DigitalLed4.setState(KLed.Off)
if (AllVal[1] & 0x10) > 0:
self.DigitalLed5.setState(KLed.On)
else:
self.DigitalLed5.setState(KLed.Off)
except:
print "K8055 Read failed"
def about(self):
QMessageBox.about( self, "About k8055qt",
"k8055qt is a small GUI program using libk8055\n\n"
"Copyright 2007 Pjetur G. Hjaltason. "
"Distributed under GPL license\n\n"
"For technical support, study the source code or surf\n"
"http://sourceforge.net/projects/libk8055/\n" )
if __name__ == "__main__":
Kapp = QApplication(sys.argv)
QObject.connect(Kapp,SIGNAL("lastWindowClosed()"),Kapp,SLOT("quit()"))
w = QTK8055()
Kapp.setMainWidget(w)
w.show()
Kapp.exec_loop()