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 и т. Д. Что могло произойти?

, 👍3

Обсуждение

Мой Uno печатает “Номер: 12000”., @Edgar Bonet


2 ответа


Лучший ответ:

5

Жучок. Другого объяснения нет. Реальное оборудование (Arduino Uno) печатает 12000.

Даже отладчик говорит мне, что значение этой переменной равно 12000.

debug

Результаты:

Number: 12222 
12000 
12222 something 

Наиболее интересно, что если вы укажете.println() номер, он будет выведен правильно. Ошибка должна быть в конструкторе строкового объекта, как показано в "тестовой" строке. Эта ошибка также возникает в других типах данных, например int.

Если вы используете только прямые последовательные вызовы.print[ln], вы сможете обойти эту ошибку.

,

1

Tinkercad-это (был) очень хороший симулятор, но он прекратил обновления. Вот вывод из бесплатного симулятора Arduino отсюда

Этот проект используется для приведенного ниже скриншота

Вот статья, указывающая еще на некоторые особенности симулятора

,