changeset 8:a04aacdb5999

Add shutting down on low battery power
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Wed, 24 Dec 2014 21:05:38 +0100
parents f3882a23fffa
children 97502e4229f9
files controller/controller.ino controller/serial.ino controller/servos.ino
diffstat 3 files changed, 35 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/controller/controller.ino	Tue Dec 23 23:22:00 2014 +0100
+++ b/controller/controller.ino	Wed Dec 24 21:05:38 2014 +0100
@@ -1,13 +1,23 @@
 #include "servos.h"
 #include "serial.h"
 
+#define FRAME_TIME 10
+
 
 void setup() {
     serial_setup();
+    battery_setup();
     servo_setup();
 }
 
 
 void loop() {
+    static unsigned long last_tick = 0;
+    unsigned long now = millis();
+
     do_serial_command();
+    if (now > last_tick + FRAME_TIME || now < last_tick) {
+        battery_check();
+        last_tick = now;
+    }
 }
--- a/controller/serial.ino	Tue Dec 23 23:22:00 2014 +0100
+++ b/controller/serial.ino	Wed Dec 24 21:05:38 2014 +0100
@@ -38,6 +38,13 @@
                 servo_move(servo, pos / 1000.0);
             }
             break;
+        case 0xf2:
+            Serial.write(0xff);
+            Serial.write(map(get_battery(), 0, 1023, 0, 255));
+            break;
+        case 0xf1:
+            servo_shutdown();
+            break;
     }
     serial_command = 0;
 }
--- a/controller/servos.ino	Tue Dec 23 23:22:00 2014 +0100
+++ b/controller/servos.ino	Wed Dec 24 21:05:38 2014 +0100
@@ -29,6 +29,21 @@
 };
 static Servo servos[SERVOS];
 
+static const double HOME_POSITION[SERVOS] = {
+// ankle, knee, hip
+    -PI4, 0, 0,    // front left
+    -PI4, 0, 0,    // hind left
+    -PI4, 0, 0,    // hind right
+    -PI4, 0, 0     // front right
+};
+
+static const double FOLD_POSITION[SERVOS] = {
+// ankle, knee, hip
+    0, -PI2, -PI4,    // front left
+    0, -PI2, PI4,    // hind left
+    0, -PI2, PI4,    // hind right
+    0, -PI2, -PI4     // front right
+};
 
 void servo_move(unsigned char servo, double rads) {
     // Move a servo to a position in radians between -PI/2 and PI/2.
@@ -55,7 +70,7 @@
     for (unsigned char servo = 0; servo < SERVOS; ++servo) {
         servos[servo].attach(SERVO_PINS[servo],
                              SERVO_FREQ_MIN, SERVO_FREQ_MAX);
-        servo_move(servo, 0);
+        servo_move(servo, HOME_POSITION[servo]);
         delay(150);
     }
 }
@@ -63,6 +78,8 @@
 void servo_shutdown() {
     // Power down all servos.
     for (unsigned char servo = 0; servo < SERVOS; ++servo) {
+        servo_move(servo, FOLD_POSITION[servo]);
+        delay(150);
         servos[servo].detach();
     }
 }