Пример управления Arduino через Serial (COM-port) для отладки и т.п

переменную видно сразу, от этого и не интересно.

Спрошу не совсем в тему, но близко.
Как перевести в uint32_t строковое отображение числа, полученного из Serial?
Например, “123456789”.

void setup() {
  uint32_t i = atol("123456789");
  Serial.begin(115200);
  Serial.println(i);
}

void loop() {
}

так понятно?

Вообщем-то, так и предполагал. Но…
Смущает то, что uint32_t - число беззнаковое, а функция atol вроде как в long (знаковое) преобразует.
Или в данном случае (положительное число на “входе” ) “на скорость не влияет”?


void setup() {
  int32_t  i = atol("3000000000");
  uint32_t j = atol("3000000000");

  Serial.begin(115200);
  Serial.println(i);
  Serial.println(j);
}

void loop() {
}

ну почему дедушка xDriver должен за вас все делать?

напишите сами, если смущает, там кода-то всего 3-4 строчки

Вот и я о том же!

12:45:29.734 → i=-1294967296

12:45:29.734 → j=3000000000

P.S. Но мои “123456789” должны “влезть” без проблем вроде как?

о чем, “о том же”?
что не так?

три миллиарда влезли, почему 123 миллиона не должны влезьть?

А ещё вместе с Arduino IDE идут примеры. И там есть раздел Communication.

Да-да, всё так. Всё понял. Спасибо!
Затупил с signed/unsigned… :frowning:
Хреново усваивается Си на 7-м десятке… Надо было раньше начинать.

P.S. Кстати… “Мои 123456789” даже в toInt() “влезают”.
Можно даже с atoi/atol не “заморачиваться”.
Интересно, а есть ли принципиальная разница (кроме синтаксиса) между atoi() и toInt() ?

P.P.S.

Дедушка xDriver НЕ должен за меня делать.
Он (при желании) просто может помочь другому дедушке разобраться в вопросе “а сколько же в граммах”? :slight_smile:

Зависит от процессора, для которого компилируешь.
На Уно-Нано не влезают

ЗЫ
У String.toInt() return type - long

О как! Не знал. Возьму на заметку.
Правда, я в 99% случаев на Nano, или Mega развлекаюсь.
Ну и ещё потихоньку, с большим скрипом, начинаю осваивать ESP32 и STM32.

Тоже новость. Для меня.

Благодарю за дельные замечания!

по сути он возвращает 4 байта, а уж к какому типу это преобразовать разбирается компилятор.

void setup() {

  String s = "2147483648";
  uint32_t  i = s.toInt();
  long l = s.toInt();

  Serial.begin(115200);
  Serial.println(i);
  Serial.println(l);
}

void loop() {
}
1 лайк

Ну, если смущает, пользуйте strtoul.

Вариант использования Serial для отладки.

  1. Таблица критичных переменных и булевых флагов хранится в EEPROM и загружается при запуске программы. Можно собрать структуру из разных переменных и в разном количестве в конкретном случае.
  2. В диалоге создается возможность изменить значения переменных и сохранить новые значения в EEPROM. Естественно, есть и возможность просто посмотреть действующие значения этих переменных.
  3. Массив булевых флагов позволяет селективно включать или выключать отдельные отладочные сообщения.
    Таким образом, если изделие уже изготовлено и установлено без возможности снять, разобраться, исправить - это хорошая возможность.
    И, крайне желательно, оснастить этот Serial интерфейс опторазвязкой, для чего пары оптронов , например 6N137, вполне достаточно. Работает , в том числе и на 115200 и выше.

Правда, такой оптрон ( его светодиод ) напрямую с выхода TX не раскачать. Нужно 7-8 миллиампер для надежной работы оптрона, а CH340, например, этого не может. Один транзистор и пара сопротивлений в линии TX решают этот вопрос. Проверено.

В некоторых устройствах пишу логи в ЕЕПРОМ, с просмотром в любой момент. Это не отладка, но здорово помогает при анализе прошедших (особенно редких) событий.