Mercurial > pkubik
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(); } }
