переменную видно сразу, от этого и не интересно.
Спрошу не совсем в тему, но близко.
Как перевести в 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…
Хреново усваивается Си на 7-м десятке… Надо было раньше начинать.
P.S. Кстати… “Мои 123456789” даже в toInt() “влезают”.
Можно даже с atoi/atol не “заморачиваться”.
Интересно, а есть ли принципиальная разница (кроме синтаксиса) между atoi() и toInt() ?
P.P.S.
Дедушка xDriver НЕ должен за меня делать.
Он (при желании) просто может помочь другому дедушке разобраться в вопросе “а сколько же в граммах”?
Зависит от процессора, для которого компилируешь.
На Уно-Нано не влезают
ЗЫ
У 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() {
}
Ну, если смущает, пользуйте strtoul
.
Вариант использования Serial для отладки.
- Таблица критичных переменных и булевых флагов хранится в EEPROM и загружается при запуске программы. Можно собрать структуру из разных переменных и в разном количестве в конкретном случае.
- В диалоге создается возможность изменить значения переменных и сохранить новые значения в EEPROM. Естественно, есть и возможность просто посмотреть действующие значения этих переменных.
- Массив булевых флагов позволяет селективно включать или выключать отдельные отладочные сообщения.
Таким образом, если изделие уже изготовлено и установлено без возможности снять, разобраться, исправить - это хорошая возможность.
И, крайне желательно, оснастить этот Serial интерфейс опторазвязкой, для чего пары оптронов , например 6N137, вполне достаточно. Работает , в том числе и на 115200 и выше.
Правда, такой оптрон ( его светодиод ) напрямую с выхода TX не раскачать. Нужно 7-8 миллиампер для надежной работы оптрона, а CH340, например, этого не может. Один транзистор и пара сопротивлений в линии TX решают этот вопрос. Проверено.
В некоторых устройствах пишу логи в ЕЕПРОМ, с просмотром в любой момент. Это не отладка, но здорово помогает при анализе прошедших (особенно редких) событий.