changeset 57:9c412415a8c1

fix accel and play on startup
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Sun, 24 Aug 2014 15:24:27 +0200
parents 008236195f5a
children fccf0f6f6a12
files robot.py servo/servo.ino
diffstat 2 files changed, 15 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/robot.py	Sun Aug 24 14:48:44 2014 +0200
+++ b/robot.py	Sun Aug 24 15:24:27 2014 +0200
@@ -51,14 +51,8 @@
             leg.update(self.shift)
 
     def get_accel(self):
-        probes = 4
-        accels = []
-        for probe in range(probes):
-            accels.append(self.legs[0].hip.get_sensors())
-        values = [0, 0, 0]
-        for i in range(3):
-            values[i] = int(float(sum(a[i] for a in accels)) / probes - self.accel_trim[i])
-        return values
+        return [v - t for (v, t) in
+                zip(self.legs[0].hip.get_sensors(), self.accel_trim)]
 
     def beep(self, frequency, duration):
         self.legs[0].hip.beep(frequency, duration)
--- a/servo/servo.ino	Sun Aug 24 14:48:44 2014 +0200
+++ b/servo/servo.ino	Sun Aug 24 15:24:27 2014 +0200
@@ -64,7 +64,10 @@
     accel_buffer[accel_buffer_index][0] = analogRead(A2);
     accel_buffer[accel_buffer_index][1] = analogRead(A1);
     accel_buffer[accel_buffer_index][2] = analogRead(A0);
-    accel_buffer_index = (accel_buffer_index + 1) % MAX_ACCEL_BUFFER;
+    accel_buffer_index += 1;
+    if (accel_buffer_index > MAX_ACCEL_BUFFER) {
+        accel_buffer_index = 0;
+    }
 }
 
 int _serial_read_word() {
@@ -155,8 +158,8 @@
     int z = 0;
     for (int i = 0; i < MAX_ACCEL_BUFFER; i += 1) {
         x += accel_buffer[i][0];
-        y += accel_buffer[i][0];
-        z += accel_buffer[i][0];
+        y += accel_buffer[i][1];
+        z += accel_buffer[i][2];
     }
     Serial.write(0xff);
     Serial.write(map(x / MAX_ACCEL_BUFFER, 0, 676, 0, 255));
@@ -166,7 +169,9 @@
 
 void do_beep() {
     /* Emit a beep of specified frequency and duration. */
-    tone(A3, _serial_read_word(), Serial.read());
+    int frequency = _serial_read_word();
+    int duration = Serial.read();
+    tone(A3, frequency, duration * 10);
 }
 
 void do_serial_command() {
@@ -222,6 +227,10 @@
     int servo;
 
     Serial.begin(SERIAL_SPEED);
+    pinMode(A3, OUTPUT);
+    tone(A3, 440, 100);
+    delay(20);
+    tone(A3, 220, 150);
     for (servo = 0; servo < MAX_SERVO; servo += 1) {
         /* First 2 pins are used for the serial. */
         servos[servo].attach(servo + 2, SERVO_FREQ_MIN, SERVO_FREQ_MAX);
@@ -235,10 +244,8 @@
     unsigned long now = millis();
 
     do_serial_command();
-/*
     if (now > last_tick + 100 || now < last_tick) {
         read_accel();
         last_tick = now;
     }
-*/
 }