From 8b7106505ee41df339c8ea3f91c04375497845f0 Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Mon, 21 Mar 2011 20:16:27 +0000 Subject: Initial commit --- SnakeMaster.pde | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 SnakeMaster.pde diff --git a/SnakeMaster.pde b/SnakeMaster.pde new file mode 100644 index 0000000..ae29b5d --- /dev/null +++ b/SnakeMaster.pde @@ -0,0 +1,104 @@ +#include + + + +TimedAction regulateServos = TimedAction(2,regulator); + +/* +Snake Sections Snake Servos + +Head +Section 1 Servo 1 + Servo 2 +Section 2 Servo 3 + Servo 4 +Section 3 Servo 5 - On Slave Board One + Servo 6 - On Slave Board Two +*/ + +Servo servo1; int servo1RequiredAngle; +Servo servo2; int servo2RequiredAngle; +Servo servo3; int servo3RequiredAngle; +Servo servo4; int servo4RequiredAngle; + +#define servoSpeed = 60/0.4 +int sectionLength = 10; // Length of snake section in centimeters +int firstServoInSectionInX = true // Assuming the first servo in each section is in the horizontal plane + +void moveServoTo(byte servoNum, int angle) { + switch (servoNum) { + case 1: + servo1.write(angle); + servo1. + break: + case 2: + servo2.write(angle); + break: +} + +/* + - servo The servo to be moved + - smoothMovement Use smooth movement? + - angle The angle to move the servo to 90 = centre + - time The time to spend moving in milliseconds +*/ +void moveServoTo(byte servoNum, boolean smoothMovement, int angle, int time) { + int startPos = servo.read(); + int moveAngle = abs(angle - startPos); + int delayAmount = time - (abs(angle - startPos)/ servoSpeed); // The time the servo must waste if it is to get to the angle on time + // WARNING, if this is negitive the servo cant make the movement in time + + if (delayAmount <= 0) { // If cant make the movement just try anyway, else move in increments of 1 degree while taking breaks + moveServoTo(servoNum,angle); + } else if (smoothMovement) { + // TODO + } else { + int wasteTimePerDegree = moveAngle/delayAmount; + if (angle > startPos) { + for (int i=0; i