sensors module now in early working stage
This commit is contained in:
@@ -6,20 +6,84 @@ import serial as ser
|
||||
import pandas as pd
|
||||
from threading import Timer
|
||||
from sys import exit as ex
|
||||
import time
|
||||
|
||||
class Spectrometer:
|
||||
def schedule(self, delay):
|
||||
self.timerObject=Timer(delay, retrieveData)
|
||||
def initializeSensor(self):
|
||||
'''confirm the sensor is responding and proceed with spectrometer initialization'''
|
||||
try:
|
||||
rstring='undefined' # just need it set to a value
|
||||
self.serialObject.write(b'AT\n')
|
||||
rstring=self.serialObject.readline().decode()
|
||||
if rstring == 'undefined':
|
||||
raise Exception #sensor didn't respond
|
||||
if rstring == 'OK':
|
||||
pass #handshake passed
|
||||
if rstring == 'ERROR':
|
||||
raise Exception #sensor is in error state
|
||||
except:
|
||||
print('An exception ocurred when performing spectrometer handshake')
|
||||
ex(1)
|
||||
self.setParameters()
|
||||
|
||||
def __init__(self, path='/dev/ttyAMA0', baudrate=115200, timeout=1, refreshrate=1):
|
||||
def setParameters(self, parameters={}):
|
||||
'''applies the parameters like LED light and gain to the spectrometer'''
|
||||
# try:
|
||||
if 'it_time' in parameters:
|
||||
it_time = int(parameters['it_time'])
|
||||
if it_time <=0 :
|
||||
it_time = 1
|
||||
self.serialObject.write('ATINTTIME={}\n'.format(string(it_time)).encode())
|
||||
self.serialObject.readline()
|
||||
|
||||
if 'gain' in parameters:
|
||||
gain = int(parameters['gain'])
|
||||
if gain < 0 or gain > 3:
|
||||
gain = 1
|
||||
self.serialObject.write('ATGAIN={}\n'.format(gain).encode())
|
||||
self.serialObject.readline()
|
||||
|
||||
if 'led' in parameters:
|
||||
led = bool(parameters['led'])
|
||||
if led:
|
||||
led=1
|
||||
else:
|
||||
led=0
|
||||
self.serialObject.write('ATLED3={}\n'.format(led).encode())
|
||||
self.serialObject.readline()
|
||||
# except:
|
||||
# print('An exception occured during spectrometer initialization')
|
||||
# ex(1)
|
||||
|
||||
def startDataCollection(self):
|
||||
try:
|
||||
self.serialObject.write(b'ATCDATA\n')
|
||||
rawresp = self.serialObject.readline().decode()
|
||||
except:
|
||||
print('An exception occurred when polling for spectrometer data')
|
||||
ex(1)
|
||||
else:
|
||||
responseorder = [i for i in 'RSTUVWGHIJKLABCDEF']
|
||||
realorder = [i for i in 'ABCDEFGHRISJTUVWKL']
|
||||
response = pd.Series([float(i)/35.0 for i in rawresp[:-3].split(',')], index=responseorder)
|
||||
self.data = pd.DataFrame(response, index=realorder, columns = ['uW/cm^2'])
|
||||
self.schedule(self.rrate)
|
||||
|
||||
def schedule(self, refresh):
|
||||
self.timerObject = Timer(refresh, self.startDataCollection)
|
||||
self.timerObject.start()
|
||||
|
||||
|
||||
def __init__(self, path='/dev/ttyUSB0', baudrate=115200, tout=1, rrate=1, params={}):
|
||||
self.path=path
|
||||
self.baudrate=baudrate
|
||||
self.timeout=1
|
||||
self.rrate=rrate
|
||||
try:
|
||||
self.serialObject = ser.Serial(path, baudrate, timeout)
|
||||
self.serialObject = ser.Serial(path, baudrate, timeout=tout)
|
||||
except:
|
||||
print('An exception occured when opening the serial port at {}'.format(path))
|
||||
ex(1)
|
||||
else:
|
||||
initialiseSensor()
|
||||
startDataCollection()
|
||||
self.initializeSensor()
|
||||
self.startDataCollection()
|
||||
|
||||
Reference in New Issue
Block a user