Skip to content

Commit f7c2661

Browse files
committed
refactor: modified some calculations
1 parent 6536123 commit f7c2661

File tree

1 file changed

+35
-47
lines changed

1 file changed

+35
-47
lines changed

types.go

Lines changed: 35 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -30,20 +30,23 @@ type (
3030
)
3131

3232
var (
33-
// setPeriodPrefix is the prefix for the log message when setting the PWM period
34-
setPeriodPrefix = []byte("Set Servo PWM period to:")
35-
3633
// setAnglePrefix is the prefix message for new angle setting
3734
setAnglePrefix = []byte("Set servo angle degrees to:")
3835

3936
// setPulseWidthPrefix is the prefix message for new pulse width setting
4037
setPulseWidthPrefix = []byte("Set servo pulse width to:")
38+
39+
// setPeriodPrefix is the prefix for the log message when setting the PWM period
40+
setPeriodPrefix = []byte("Set Servo PWM period to:")
41+
42+
// setLeftLimitAnglePrefix is the prefix message for left limit angle
43+
setLeftLimitAnglePrefix = []byte("\tServo left limit angle set to:")
4144

42-
// logLeftLimitAnglePrefix is the prefix message for left limit angle
43-
logLeftLimitAnglePrefix = []byte("Servo left limit angle set to:")
45+
// setCenterAnglePrefix is the prefix message for center angle
46+
setCenterAnglePrefix = []byte("\tServo center angle set to:")
4447

45-
// logRightLimitAnglePrefix is the prefix message for right limit angle
46-
logRightLimitAnglePrefix = []byte("Servo right limit angle set to:")
48+
// setRightLimitAnglePrefix is the prefix message for right limit angle
49+
setRightLimitAnglePrefix = []byte("\tServo right limit angle set to:")
4750
)
4851

4952
// NewDefaultHandler creates a new instance of DefaultHandler
@@ -96,18 +99,6 @@ func NewDefaultHandler(
9699
return nil, ErrorCodeServoFailedToConfigurePWM
97100
}
98101

99-
// Log the configured period
100-
if logger != nil {
101-
logger.AddMessageWithUint32(
102-
setPeriodPrefix,
103-
uint32(period),
104-
true,
105-
true,
106-
false,
107-
)
108-
logger.Debug()
109-
}
110-
111102
// Get the channel from the pin
112103
channel, err := pwm.Channel(pin)
113104
if err != nil {
@@ -148,22 +139,37 @@ func NewDefaultHandler(
148139
rightLimitAngle = actuationRange
149140
}
150141

151-
// If the direction is inverted, swap the left and right limit angles
142+
// If the direction is inverted, swap the left and right limit angles and recalculate the center angle
152143
if isDirectionInverted {
144+
centerAngle = actuationRange - centerAngle
153145
leftLimitAngle, rightLimitAngle = actuationRange - rightLimitAngle, actuationRange - leftLimitAngle
154146
}
155147

156148
// Log the left and right limit angles if logger is provided
157149
if logger != nil {
150+
logger.AddMessageWithUint32(
151+
setPeriodPrefix,
152+
uint32(period),
153+
true,
154+
true,
155+
false,
156+
)
158157
logger.AddMessageWithUint16(
159-
logLeftLimitAnglePrefix,
158+
setLeftLimitAnglePrefix,
160159
leftLimitAngle,
161160
true,
162161
true,
163162
false,
164163
)
165164
logger.AddMessageWithUint16(
166-
logRightLimitAnglePrefix,
165+
setCenterAnglePrefix,
166+
centerAngle,
167+
true,
168+
true,
169+
false,
170+
)
171+
logger.AddMessageWithUint16(
172+
setRightLimitAnglePrefix,
167173
rightLimitAngle,
168174
true,
169175
true,
@@ -212,11 +218,6 @@ func (h *DefaultHandler) GetAngle() uint16 {
212218
//
213219
// angle: The angle to set the servo motor to, must be between 0 and the actuation range
214220
func (h *DefaultHandler) SetAngle(angle uint16) tinygoerrors.ErrorCode {
215-
// Check if the direction is inverted
216-
if h.isDirectionInverted {
217-
angle = h.actuationRange - angle
218-
}
219-
220221
// Check if the angle is within the valid range
221222
if angle < h.leftLimitAngle || angle > h.rightLimitAngle {
222223
return ErrorCodeServoAngleOutOfRange
@@ -287,11 +288,16 @@ func (h *DefaultHandler) SetAngleToCenter() tinygoerrors.ErrorCode {
287288
// An error if the relative angle is not within the left and right limits
288289
func (h *DefaultHandler) SetAngleRelativeToCenter(relativeAngle int16) tinygoerrors.ErrorCode {
289290
// Calculate the absolute angle based on the center angle and relative angle
291+
if h.isDirectionInverted {
292+
relativeAngle = -relativeAngle
293+
}
290294
absoluteAngle := int16(h.centerAngle) + relativeAngle
291295

292296
// Check if the absolute angle is within the left and right limits
293-
if absoluteAngle < int16(h.leftLimitAngle) || absoluteAngle > int16(h.rightLimitAngle) {
294-
return ErrorCodeServoAngleOutOfRange
297+
if absoluteAngle < int16(h.leftLimitAngle) {
298+
absoluteAngle = int16(h.leftLimitAngle)
299+
} else if absoluteAngle > int16(h.rightLimitAngle) {
300+
absoluteAngle = int16(h.rightLimitAngle)
295301
}
296302

297303
// Set the servo angle
@@ -308,15 +314,6 @@ func (h *DefaultHandler) SetAngleRelativeToCenter(relativeAngle int16) tinygoerr
308314
//
309315
// An error if the angle is not within the right limit
310316
func (h *DefaultHandler) SetAngleToRight(angle uint16) tinygoerrors.ErrorCode {
311-
// Check if the angle is negative
312-
if angle < 0 {
313-
angle = 0
314-
}
315-
316-
// Check if the angle is within the right limit
317-
if angle > h.rightLimitAngle-h.centerAngle {
318-
angle = h.rightLimitAngle - h.centerAngle
319-
}
320317
return h.SetAngleRelativeToCenter(int16(angle))
321318
}
322319

@@ -330,14 +327,5 @@ func (h *DefaultHandler) SetAngleToRight(angle uint16) tinygoerrors.ErrorCode {
330327
//
331328
// An error if the angle is not within the left limit
332329
func (h *DefaultHandler) SetAngleToLeft(angle uint16) tinygoerrors.ErrorCode {
333-
// Check if the angle is negative
334-
if angle < 0 {
335-
angle = 0
336-
}
337-
338-
// Check if the angle is within the left limit
339-
if angle > h.centerAngle - h.leftLimitAngle {
340-
angle = h.centerAngle - h.leftLimitAngle
341-
}
342330
return h.SetAngleRelativeToCenter(-int16(angle))
343331
}

0 commit comments

Comments
 (0)