Skip to content

read() does not return last write() accurately #10

Open
@bigedian

Description

There is a loss of precision when reading back the angle that was last written to the servo. This prevents doing something like this: servo.write(servo.read()+1); to increment a servo by 1 degree from it's current position.

Possible cause is the value being mangled by the (integer) map() macros in the read() & write() functions.

Example test code:

for (int16_t i = 0; i <= 30; i++) {
x_axis.write(i);
Serial.printf("Wrote: %u Read: %u\n", i, x_axis.read());
}

Output:
Wrote: 0 Read: 0
Wrote: 1 Read: 0
Wrote: 2 Read: 1
Wrote: 3 Read: 1
Wrote: 4 Read: 3
Wrote: 5 Read: 3
Wrote: 6 Read: 5
Wrote: 7 Read: 5
Wrote: 8 Read: 7
Wrote: 9 Read: 7
Wrote: 10 Read: 9
Wrote: 11 Read: 10
Wrote: 12 Read: 10
Wrote: 13 Read: 12
Wrote: 14 Read: 12
Wrote: 15 Read: 14
Wrote: 16 Read: 14
Wrote: 17 Read: 16
Wrote: 18 Read: 16
Wrote: 19 Read: 18
Wrote: 20 Read: 18
Wrote: 21 Read: 20
Wrote: 22 Read: 20
Wrote: 23 Read: 22
Wrote: 24 Read: 22
Wrote: 25 Read: 24
Wrote: 26 Read: 24
Wrote: 27 Read: 26
Wrote: 28 Read: 26
Wrote: 29 Read: 28
Wrote: 30 Read: 29

Clearly this is not very useful

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions