#!/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 import struct __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) temp=float(struct.unpack( "h", dat[:2])[0])*0.0625 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) val=float(struct.unpack( "h", dat[:2])[0])/512.0 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") @property def sensor1(self): return self.read_sensor(0) @property def sensor2(self): return self.read_sensor(1) @property def sensor3(self): return self.read_sensor(2) @property def AN1(self): return self.read_analog_in(0) @property def AN2(self): return self.read_analog_in(1) @property def AN3(self): return self.read_analog_in(2) @property def GP2(self): return self.digit_in(0) @GP2.setter def GP2(self,value): return self.digit_out(0,value) @property def GP0(self): return self.digit_in(1) @GP0.setter def GP0(self,value): return self.digit_out(1,value) @property def GP4(self): return self.digit_in(2) @GP4.setter def GP4(self,value): return self.digit_out(2,value) 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])) if __name__ == '__main__': print(sys.argv) main(sys.argv[1:])