Tinkercad arduino simulator целые числа выводятся как большие числа, чем они есть?
Я использую симулятор Arduino на www.tinkercad.com (казалось бы, хороший бесплатный продукт от Autodesk). Работа над преобразованием целого числа в 16-битную двоичную строку для вывода в ЦАП, но, к сожалению, даже на первом шаге я получаю неожиданное поведение.
void setup()
{
pinMode(13, OUTPUT);
Serial.begin(9600);
Serial.print("Sanity Check\n");
uint16_t num = 12000;
Serial.print("\nNumber: " + String(num) + "\n");
delay(3000);
}
Удивительно, но вышеприведенный код дал следующий вывод:
Sanity Check
Number: 12222
Есть ли что-то, что я делаю неправильно, или что-то не так с симулятором? Ошибка, по-видимому, возникает при любом значении более 10000. 10001, 10002, 10003 все печатаются как 10000. 11000, 11001, 11002, 11003 все печатают как 11111 и т. Д. Что могло произойти?
@user391339, 👍3
Обсуждение2 ответа
Лучший ответ:
Жучок. Другого объяснения нет. Реальное оборудование (Arduino Uno) печатает 12000.
Даже отладчик говорит мне, что значение этой переменной равно 12000.
Результаты:
Number: 12222
12000
12222 something
Наиболее интересно, что если вы укажете.println() номер
, он будет выведен правильно. Ошибка должна быть в конструкторе строкового
объекта, как показано в "тестовой" строке
. Эта ошибка также возникает в других типах данных, например int
.
Если вы используете только прямые последовательные вызовы.print[ln]
, вы сможете обойти эту ошибку.
Tinkercad-это (был) очень хороший симулятор, но он прекратил обновления. Вот вывод из бесплатного симулятора Arduino отсюда
Этот проект используется для приведенного ниже скриншота
Вот статья, указывающая еще на некоторые особенности симулятора
- Как смоделировать Arduino?
- Моделирование Arduino Mega 2560 с GSM модулем с использованием Proteus
- Есть ли симулятор Arduino или эмулятор, который работает на OS X?
- Переключатель TinkerCAD, кажется, не работает (всегда закрыт)
- Моделирование систем на базе Интернета вещей в программном обеспечении
- Почему светодиод всегда горит в proteus?
- Arduino Uno - Аналоговый симулятор схем
- Сервопривод начинает трястись, когда я добавляю SIM900.begin(19200);
Мой Uno печатает “Номер: 12000”., @Edgar Bonet