瀏覽代碼

some work on PinAPIBee

digital 7 年之前
父節點
當前提交
b4a826154b
共有 1 個文件被更改,包括 30 次插入19 次删除
  1. 30 19
      lib/beewatch/pinapi/__init__.py

+ 30 - 19
lib/beewatch/pinapi/__init__.py

@@ -17,9 +17,10 @@
 # along with BeeWatch.  If not, see <http://www.gnu.org/licenses/>.
 #
 # Python Libraries
+import curio
 import logging
-# import time
-import trio
+import threaing
+import time
 # My Libraries
 import digilib.pin
 log = logging.getLogger(__name__+"")
@@ -42,32 +43,42 @@ class BeeWeighingScale(digilib.pin.PinAPIBase):
 class PinAPIBee(digilib.pin.PinAPIBase):
     engine_left = None
     engine_right = None
+    action_in_process = False
     def __init__(self):
         super(PinAPIBee,self).__init__()
         self.engine_right = self.make_engine(4,17)
         self.engine_left = self.make_engine(27,22)
+    def __enter__(self):
+        if self.action_in_process:
+            lpin.debug("action already in process, not entering")
+            return False
     def make_engine(self,*args):
         return digilib.pin.PCEngine(*args)
-    def turn_left(self):
-        right_on = self.engine_right.is_on
+    def turn(self,direction,respond_method):
+        lpin.debug(threading.current_thread())
+        with self ad
+        lpin.info("turning {}".format(direction))
+        right_state = self.engine_right.is_on
         right_speed = self.engine_right.speed
-        left_on = self.engine_left.is_on
+        left_state = self.engine_left.is_on
         left_speed = self.engine_left.speed
-        self.engine_right.turn_on()
-        self.engine_right.set_speed(1)
-        self.engine_left.turn_on()
-        self.engine_left.set_speed(1)
-        trio.sleep(2)
-        if not right_on:
-            self.engine_right.turn_off()
+        if direction == "right":
+            self.engine_right.set_state(False)
+            self.engine_left.set_state(True)
+            self.engine_left.set_speed(1)
+        elif direction == "left":
+            self.engine_right.set_state(True)
+            self.engine_right.set_speed(1)
+            self.engine_left.set_state(False)
+        # curio.sleep(2)
+        time.sleep(2)
+        self.engine_right.set_state(right_state)
         self.engine_right.set_speed(right_speed)
-        if not left_on:
-            self.engine_left.turn_off()
+        self.engine_left.set_state(left_state)
         self.engine_left.set_speed(left_speed)
+        lpin.info("done turning {}".format(direction))
         # set engines to previous values
+    def turn_left(self,respond_method):
+        self.turn("left")
     def turn_right(self):
-        pass
-        lpin.info("turning right is not implemented")
-        # self.engine_left.stop()
-        # self.engine_right.start()
-        # set engines to previous values
+        self.turn("right")