dlp_temp.py
139 lines
| 3.5 KiB
| text/x-python
|
PythonLexer
/ lppinstru / dlp_temp.py
|
r3 | #!/usr/bin/env python | ||
#-*- coding: utf-8 -*- | ||||
"""Simple python library to drive DLP-TEMP module from www.dlpdesign.com | ||||
""" | ||||
import time | ||||
import sys | ||||
import os | ||||
import matplotlib.pyplot as plt | ||||
import numpy as np | ||||
import serial | ||||
r11 | import struct | |||
|
r3 | |||
__author__ = "Alexis Jeandet" | ||||
__copyright__ = "Copyright 2015, Laboratory of Plasma Physics" | ||||
__credits__ = [] | ||||
__license__ = "GPLv2" | ||||
__version__ = "1.0.0" | ||||
__maintainer__ = "Alexis Jeandet" | ||||
__email__ = "alexis.jeandet@member.fsf.org" | ||||
__status__ = "Production" | ||||
class dlp_temp(object): | ||||
sensors = {0 : b'S', | ||||
1 : b'T', | ||||
2 : b'U', | ||||
} | ||||
aninputs = {0 : b'A', | ||||
1 : b'B', | ||||
2 : b'C', | ||||
} | ||||
digitin= {0 : b'M', | ||||
1 : b'N', | ||||
2 : b'O', | ||||
} | ||||
digithigh= {0 : b'J', | ||||
1 : b'K', | ||||
2 : b'L', | ||||
} | ||||
digitlow= {0 : b'G', | ||||
1 : b'H', | ||||
2 : b'I', | ||||
} | ||||
def __init__(self,port): | ||||
self.i=0 | ||||
self.__port=serial.Serial(port,timeout=0.5) | ||||
def ping(self): | ||||
self.__port.write(b"P") | ||||
return b'Q' == self.__port.read(1) | ||||
def read_sensor(self,index): | ||||
if index < 3: | ||||
self.__port.write(self.sensors.get(index)) | ||||
dat=self.__port.read(9) | ||||
r11 | temp=float(struct.unpack( "h", dat[:2])[0])*0.0625 | |||
|
r3 | return temp #(temp-32.0)/1.8 | ||
raise UserWarning("Parameter out of bound") | ||||
def read_analog_in(self,index): | ||||
if index < 3: | ||||
self.__port.write(self.aninputs.get(index)) | ||||
dat=self.__port.read(2) | ||||
r11 | val=float(struct.unpack( "h", dat[:2])[0])/512.0 | |||
|
r3 | return val | ||
raise UserWarning("Parameter out of bound") | ||||
def digit_in(self,index): | ||||
if index < 3: | ||||
self.__port.write(self.digitin.get(index)) | ||||
dat=self.__port.read(1) | ||||
return dat | ||||
raise UserWarning("Parameter out of bound") | ||||
def digit_out(self,index,val): | ||||
if index < 3: | ||||
if val: | ||||
self.__port.write(self.digithigh.get(index)) | ||||
else: | ||||
self.__port.write(self.digitlow.get(index)) | ||||
raise UserWarning("Parameter out of bound") | ||||
|
r7 | @property | ||
|
r3 | def sensor1(self): | ||
|
r7 | return self.read_sensor(0) | ||
|
r3 | |||
|
r7 | @property | ||
|
r3 | def sensor2(self): | ||
|
r7 | return self.read_sensor(1) | ||
|
r3 | |||
|
r7 | @property | ||
|
r3 | def sensor3(self): | ||
|
r7 | return self.read_sensor(2) | ||
|
r3 | |||
|
r7 | @property | ||
|
r3 | def AN1(self): | ||
|
r7 | return self.read_analog_in(0) | ||
@property | ||||
|
r3 | def AN2(self): | ||
|
r7 | return self.read_analog_in(1) | ||
@property | ||||
|
r3 | def AN3(self): | ||
|
r7 | return self.read_analog_in(2) | ||
|
r3 | |||
|
r7 | @property | ||
|
r3 | def GP2(self): | ||
return self.digit_in(0) | ||||
@GP2.setter | ||||
def GP2(self,value): | ||||
r9 | return self.digit_out(0,value) | |||
|
r3 | |||
|
r7 | @property | ||
|
r3 | def GP0(self): | ||
return self.digit_in(1) | ||||
@GP0.setter | ||||
def GP0(self,value): | ||||
r9 | return self.digit_out(1,value) | |||
|
r3 | |||
|
r7 | @property | ||
|
r3 | def GP4(self): | ||
return self.digit_in(2) | ||||
@GP4.setter | ||||
def GP4(self,value): | ||||
r9 | return self.digit_out(2,value) | |||
|
r3 | |||
r11 | ||||
def main(argv): | ||||
if len(argv)==4: | ||||
print(argv[3]) | ||||
if len(argv)>=3: | ||||
dlp=dlp_temp(argv[0]) | ||||
while(True): | ||||
readout=[dlp.read_sensor(i) for i in range(int(argv[1]))] | ||||
print("{date}\t{values}".format(date=time.strftime("%Y-%m-%dT%H:%M:%S"),values="\t".join([str(x) for x in readout] ))) | ||||
time.sleep(float(argv[2])) | ||||
|
r3 | if __name__ == '__main__': | ||
r11 | print(sys.argv) | |||
main(sys.argv[1:]) | ||||