changeset 9:f33a3b3f3445

Try to get i2c to work
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Tue, 29 Mar 2016 12:03:22 +0200
parents 7993a8f67e4c
children 2dfdd05f2c91
files controller/i2c.ino python/gait.py python/robot.py
diffstat 3 files changed, 24 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/controller/i2c.ino	Sun Mar 27 16:21:25 2016 +0200
+++ b/controller/i2c.ino	Tue Mar 29 12:03:22 2016 +0200
@@ -26,7 +26,7 @@
     for (int leg = 0; leg < 3; ++leg) {
         if (regs[leg * 4]) {
             move_leg(leg, regs[leg * 4 + 1] + HOME,
-                          regs[leg * 4 + 2] + HOME ,
+                          regs[leg * 4 + 2] + HOME,
                           regs[leg * 4 + 3] - TIBIA);
             regs[leg * 4] = 0;
         }
--- a/python/gait.py	Sun Mar 27 16:21:25 2016 +0200
+++ b/python/gait.py	Tue Mar 29 12:03:22 2016 +0200
@@ -35,7 +35,8 @@
             dy = self.dy * leg.y_dir * self.speed
             leg.move_to(leg.x - dx, leg.y - dy, -self.height)
             #leg.rotate_by(-self.rotation * leg.x_dir * leg.y_dir / 2)
-        delay(25)
+        self.robot.update()
+        delay(250)
 
     def step(self, leg):
         dx = (leg.x_dir * self.shift - self.shift_x) / self.shift_steps
--- a/python/robot.py	Sun Mar 27 16:21:25 2016 +0200
+++ b/python/robot.py	Tue Mar 29 12:03:22 2016 +0200
@@ -1,4 +1,5 @@
 from machine import I2C, Pin
+from pyb import delay
 import ustruct
 import math
 
@@ -19,17 +20,9 @@
         self.y_dir = y_dir
 
     def move_to(self, x, y, z):
-        data = ustruct.pack("Bbbbb", 4 * self.index, 1, int(x), int(y), int(z))
-        while True:
-            try:
-                self.i2c.writeto(I2C_ADDRESS, data)
-            except OSError:
-                pass
-            else:
-                break
-        self.x = x
-        self.y = y
-        self.z = z
+        self.x = min(127, max(-127, int(x)))
+        self.y = min(127, max(-127, int(y)))
+        self.z = min(127, max(-127, int(z)))
 
     def move_by(self, dx=0, dy=0, dz=0):
         self.move_to(self.x + dx, self.y + dy, self.z + dz)
@@ -59,3 +52,20 @@
     def rotate_by(self, radians):
         for leg in self.legs:
             leg.rotate_by(radians)
+
+    def update(self):
+        data = ustruct.pack(
+            "Bbbbbbbbbbbbbbbbb", 0,
+            1, self.legs[0].x, self.legs[0].y, self.legs[0].z,
+            1, self.legs[1].x, self.legs[1].y, self.legs[1].z,
+            1, self.legs[2].x, self.legs[2].y, self.legs[2].z,
+            1, self.legs[3].x, self.legs[3].y, self.legs[3].z,
+        )
+        while True:
+            try:
+                self.i2c.writeto(I2C_ADDRESS, data)
+            except OSError:
+                print("OSError!")
+            else:
+                break
+            delay(20)