Прошу прокомментировать код

Это хорошо.

Тогда я посмотрю код, но чуть попозже. Пока же отмечу то, что сразу бросилось в глаза.

Вы (как, впрочем, и большинство авторов ардуиновских “библиотек”) злоупотребляете спецификатором доступа private. Вы можете объяснить, почему Вы его использовали здесь? По-моему, в нём нет никакой нужды. Но этим Вы убили возможность создания класса-наследника, т.е. это противоречит самой идее ООП.

Нет, я понимаю, что внутренним переменным не стоит быть public, но private их надо делать только в том случае, если Вы твёрдо уверены, что никаким классам-наследникам не нужен доступ к ним. В Вашем же случае – реально нужен почти ко всему. А значит, их надо было объявлять protected.

Посмотрите, как в Arduino IDE реализован класс String – его делали грамотные ребята.

Чуть позже я посмотрю код повнимательнее и оттопчусь на том, что замечу, не исчезайте.