Почему в Arduino int 2 байта, а не 4?
Зря привыкли. Стандарт C++ регламентирует только минимальные диапазоны значений для типов , так что ардуинская реализация в стандарт прекрасно вписывается.
Хотите использовать типы гарантированной длины - используйте int32_t
Дело не в языке, а в стандарте С++ (на котором основан ардуиновский Wiring), который предполагает тип int равный некоторому размеру, зависящему от целевой платформы:Plain ints have the natural size suggested by the architecture of the execution environment
Причина - оптимальность размера типа для процессора.
С большой долей вероятности там отличаются размеры и остальных типов, включая указатели (void*).