def servoRight(self): waterLog.log("","") for i in range(self.SERVO_RIGHT_DEG,self.SERVO_MIDDLE_DEG): self.servoSet(self.SERVO_MIDDLE_DEG-i) sleep(self.SERVO_SPEED_DOWN) self.servoUse(self.SERVO_MIDDLE_DEG-i)
def servoLeft(self): waterLog.log("","") for i in range(self.SERVO_MIDDLE_DEG,self.SERVO_LEFT_DEG+1): self.servoSet(i) sleep(self.SERVO_SPEED_DOWN) self.servoUse(self.SERVO_LEFT_DEG)
def waterTo(self,pump_no,pump_time_s): msg = "Running pump: %i. for %is" % (pump_no,pump_time_s) waterLog.log("","") waterLog.log("I",msg) end_time = pump_time_s * 1000 + self.getCurrentTimeMS() while self.getCurrentTimeMS() < end_time: self.runPumpTo(pump_no,255) sleep(1.0) self.runPumpTo(pump_no,0)
def scaleReadTrue(self,n): x = self.scaleReadCont(n) x = (x - self.SCALE_OFFSET) / self.SCALE_AMP x = round(x,1) if x < -100.0 or x > 500: mes = "Value = %i" % n waterLog.log("E",mes) mes = "n = %i" % x waterLog.log("",mes) return x
def serialReadBytes(self, cmd, n): self.port.flushInput() # flush input buffer to avid junk self.port.write(chr(cmd)) # Send Command tic = int(time.time()*100) + self.SERIAL_TIMEOUT_MS x = 0 d = 0 if n > 0: while tic > int(time.time()*100): if self.port.inWaiting() > 0: x = (x << 8) | ord(self.port.read(1)) d = d + 1 if d == n: # Tjek all bytes received break mes = "Read %i of %i bytes" % (d, n) if d != n: # Tjek that all byte have been recieved waterLog.log("E",mes) #log("",mes) return x
def usePumpOut(self,k): msg = "Value k = %i" % k waterLog.log("",msg) #if k < 0 and k > 255: if k < 0 or k > 255: msg = "%i < 0 and %i > 255" % (k,k) waterLog.log("E",msg) self.serialReadBytes(self.CMD_SET_MOTOR_3,0) self.serialReadBytes(k,0) x = self.serialReadBytes(self.CMD_GET_MOTOR_3,1) if x != k: msg = "Aim: %i, Real: %i" % (k,x) waterLog.log("E",msg)
def runPumpTo(self,pump_no,k): if pump_no == 0: serial_cmd_set = self.CMD_SET_MOTOR_1 serial_cmd_get = self.CMD_GET_MOTOR_1 elif pump_no == 1: serial_cmd_set = self.CMD_SET_MOTOR_2 serial_cmd_get = self.CMD_GET_MOTOR_2 else: # Pump no. not existing msg = "Pump no. %i not existing" % pump_no waterLog.log("E",msg) msg = "Pump: %i, Value k = %i" % (pump_no,k) waterLog.log("",msg) if k < 0 or k > 255: msg = "%i < 0 and %i > 255" % (k,k) waterLog.log("E",msg) self.serialReadBytes(serial_cmd_set,0) self.serialReadBytes(k,0) x = self.serialReadBytes(serial_cmd_get,1) if x != k: msg = "Aim: %i, Real: %i" % (k,x) waterLog.log("E",msg)
def checkTOMS(self,k): if k < self.getCurrentTimeMS(): waterLog.log("E","Time Out")
def waterOut(self): mean_n = 10 m_speed = 255 sum = 0 msg = "Weighting off water." waterLog.log("","") waterLog.log("I",msg) run = True while run: fill_time = self.WATER_FULL_BUCKET_OUT_TIME * 1000 + self.getCurrentTimeMS() waterLog.log("I","Setting Bucket Up") self.servoUp() waterLog.log("I","Filling bucket") x = 0 #self.usePumpOut(m_speed) # Start pump while x < self.WATER_BUCKET_MAX: if fill_time < self.getCurrentTimeMS(): run = False break self.usePumpOut(m_speed) # Start pump x = self.scaleReadTrue(1) self.usePumpOut(0) # Start pump filled = self.scaleReadTrue(mean_n) self.servoLeft() sleep(1.0) self.servoUp() sleep(1.0) empty = self.scaleReadTrue(mean_n) sum = sum + (filled-empty) msg = "Filled: %i, Empty: %i, Bucket: %i, Sum: %i" % (filled,empty,filled-empty,sum) waterLog.log("I",msg) msg = "Weighting off finished with a sum of: %iml" % sum waterLog.log("I",msg) return sum
def waterIn(self,k): mean_n = 10; m_speed = 255; # Calculate number of buckets and rest b_n = k / self.WATER_BUCKET_MAX rest = k msg = "Weighting of %iml in %i buckets." %(k,b_n+1) waterLog.log("","") waterLog.log("I",msg) print "b_n: %i, rest: %i" % (b_n,rest) # Print something here # Weight: b_n w_TO = (b_n + 1) * self.WATER_FILL_BUCKET_TIME * 1000 + self.getCurrentTimeMS()# Set TO sum = 0 if not(rest > self.WATER_BUCKET_MAX): # If no full buckets are used empty = self.scaleReadTrue(mean_n) while rest > self.WATER_BUCKET_MAX: # Weight full buckets self.checkTOMS(w_TO) # Check Time Out waterLog.log("I","Setting Bucket Up") self.servoUp() msg = "Filling bucket to: %iml" % self.WATER_BUCKET_MAX waterLog.log("I",msg) self.usePumpIn(m_speed) # Start pump x = 0 b_TO = self.WATER_FILL_BUCKET_TIME * 1000 + self.getCurrentTimeMS()# Set TO while x < self.WATER_BUCKET_MAX: self.checkTOMS(w_TO) # Check Time Out self.checkTOMS(b_TO) # Check Time Out x = self.scaleReadTrue(1) self.usePumpIn(0) # Stop pump sleep(1.0) filled = self.scaleReadTrue(mean_n) waterLog.log("I","Setting Bucket Right") self.servoRight() sleep(2.0) self.servoUp() sleep(1.0) empty = self.scaleReadTrue(mean_n) sum = sum + filled-empty rest = rest - (filled-empty) msg = "Filled: %.1f, Empty: %.1f, Bucket: %.1f, Rest: %i, Sum: %.1f" % (filled,empty,filled-empty,rest,sum) waterLog.log("I",msg) # Weight: rest waterLog.log("I","Setting Bucket Up") self.servoUp() msg = "Filling bucket to: %iml" % rest waterLog.log("I",msg) self.usePumpIn(m_speed) # Start pump x = empty b_TO = self.WATER_FILL_BUCKET_TIME * 1000 + self.getCurrentTimeMS()# Set TO while (x - empty) < rest: self.checkTOMS(w_TO) # Check Time Out self.checkTOMS(b_TO) # Check Time Out x = self.scaleReadTrue(1) self.usePumpIn(0) # Stop pump sleep(1.0) filled = self.scaleReadTrue(mean_n) sum = sum + (filled-empty) rest = rest - (filled-empty) msg = "Filled: %.1f, Empty: %.1f, Bucket: %.1f, Rest: %i, Sum: %.1f" % (filled,empty,filled-empty,rest,sum) waterLog.log("I",msg) waterLog.log("I","Setting Bucket Right") self.servoRight() sleep(2.0) self.servoUp() return sum
def servoUp(self): waterLog.log("","") self.servoUse(self.SERVO_MIDDLE_DEG)
def servoUse(self,n): self.servoSet(n) x = self.servoGet() if x != n: mes = "Aim: %i, Real: %i" % (n,x) waterLog.log("E",mes)