#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