kopia lustrzana https://github.com/jamesgao/kiln_controller
interpolate minstep for temperature
rodzic
dc5732f90a
commit
1e1425e39e
|
@ -244,10 +244,10 @@ class Regulator(threading.Thread):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
class Breakout(object):
|
class Breakout(object):
|
||||||
def __init__(self, addr, maxsteps=6500, minsteps=2300):
|
def __init__(self, addr, maxsteps=6500, minsteps=((3000, 5), (2480, 20)) ):
|
||||||
import breakout
|
import breakout
|
||||||
self.device = breakout.Breakout(addr)
|
self.device = breakout.Breakout(addr)
|
||||||
self.min = minsteps
|
self.min_interp = minsteps
|
||||||
self.max = maxsteps
|
self.max = maxsteps
|
||||||
|
|
||||||
def exit():
|
def exit():
|
||||||
|
@ -255,31 +255,42 @@ class Breakout(object):
|
||||||
self.off()
|
self.off()
|
||||||
atexit.register(exit)
|
atexit.register(exit)
|
||||||
|
|
||||||
def ignite(self, start=2500, delay=5):
|
@property
|
||||||
|
def min(self):
|
||||||
|
temp = self.device.status.aux_temp0
|
||||||
|
if temp > self.min_interp[1][1]:
|
||||||
|
return self.min_interp[1][0]
|
||||||
|
elif temp <= self.min_interp[0][1]:
|
||||||
|
return self.min_interp[0][0]
|
||||||
|
else:
|
||||||
|
mrange = self.min_interp[0][0] - self.min_interp[1][0]
|
||||||
|
trange = self.min_interp[1][1] - self.min_interp[0][1]
|
||||||
|
mix = (temp - self.min_interp[0][1]) / float(trange)
|
||||||
|
return mrange * mix + self.min_interp[1][0]
|
||||||
|
|
||||||
|
def ignite(self, start=2550, delay=5):
|
||||||
logger.info("Igniting system")
|
logger.info("Igniting system")
|
||||||
self.device.ignite = 127
|
|
||||||
time.sleep(2)
|
|
||||||
self.device.ignite = 255
|
|
||||||
time.sleep(delay)
|
time.sleep(delay)
|
||||||
self.device.motor = start
|
self.device.motor = start
|
||||||
while self.device.motor != start:
|
while self.device.motor != start:
|
||||||
time.sleep(.1)
|
time.sleep(.1)
|
||||||
self.device.motor = self.min
|
self.device.motor = self.min
|
||||||
#self.device.ignite = 127
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def output(self):
|
def output(self):
|
||||||
out = (self.device.motor - self.min) / float(self.max - self.min)
|
m = self.min
|
||||||
|
out = (self.device.motor - m) / float(self.max - m)
|
||||||
if out < 0:
|
if out < 0:
|
||||||
return -1
|
return -1
|
||||||
return out
|
return out
|
||||||
|
|
||||||
def set(self, value):
|
def set(self, value):
|
||||||
|
m = self.min
|
||||||
if self.device.motor == 0:
|
if self.device.motor == 0:
|
||||||
raise ValueError('Must ignite first')
|
raise ValueError('Must ignite first')
|
||||||
if not 0 <= value <= 1:
|
if not 0 <= value <= 1:
|
||||||
raise ValueError('Must give value between 0 and 1')
|
raise ValueError('Must give value between 0 and 1')
|
||||||
self.device.motor = int((self.max - self.min)*value + self.min)
|
self.device.motor = int((self.max - m)*value + m)
|
||||||
|
|
||||||
def off(self):
|
def off(self):
|
||||||
self.device.motor = 0
|
self.device.motor = 0
|
||||||
|
|
Ładowanie…
Reference in New Issue