Mercurial > tote-had
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)
