22 CALIB_RESPONSE_LEN = FLEXS * 2,
34 static int flex_amount, servo_id, servo_angle, i = 0;
36 serialCmdWrite (CANCEL_SIGNAL);
37 if (i % DELAY_MS == 0)
39 serialDebugWrite (CANCEL_SIGNAL);
41 for (
int flex_index = 0; flex_index < FLEXS; flex_index++)
43 flex_amount = analogGetInt (flex_index);
49 servo_angle = getAdjustedFlex (flex_index, flex_amount);
55 servo_id = getServoIDFromFlexIndex (flex_index);
61 softSerialServoCmd (servo_id, servo_angle);
62 if (i % DELAY_MS == 0)
65 softSerialServoDebug (servo_id, servo_angle);
71 int analogGetInt (uint8_t flex_index)
75 pin = getFlexPinFromIndex (flex_index);
81 flex_amount = analogRead (pin);
85 int getAdjustedFlex (uint8_t flex_index,
int flex_amount)
87 int flex_min, flex_max;
89 if ((flex_min = getFlexMin (flex_index)) < 0)
94 if ((flex_max = getFlexMax (flex_index)) < 0)
99 if (flex_amount > flex_max)
101 flex_amount = flex_max;
103 else if (flex_amount < flex_min)
105 flex_amount = flex_min;
110 return map (flex_amount, flex_min, flex_max, 0, 180);
112 return map (flex_amount, flex_min, flex_max, 180, 0);
115 int getFlexMax (uint8_t flex_index)
117 if (flex_index > FLEXS)
122 return limit [flex_index] [MAX_LIM];
125 int getFlexMin (uint8_t flex_index)
127 if (flex_index > FLEXS)
132 return limit [flex_index] [MIN_LIM];
135 void softSerialServoCmd (uint8_t servo_id,
int servo_angle)
146 difference =
current_pos [servo_index] - servo_angle;
147 if ((difference * difference) < 1)
155 serialCmdWrite (servo_id);
156 serialCmdWrite (servo_angle);
159 void softSerialServoDebug (uint8_t servo_id,
int servo_angle)
170 difference =
current_pos [servo_index] - servo_angle;
171 if ((difference * difference) < 1)
179 serialDebugWrite (servo_id);
180 serialDebugWrite (servo_angle);
uint8_t current_pos[SERVOS]
int getServoIndexFromID(uint8_t servo_id)