Вопрос по sprintf

Код:

uint8_t nanoMode = 0; 
uint32_t luxValue = 0; 
int16_t temperatureBME=0; 
int16_t temperatureDS1=0; 
int16_t temperatureDS2=0; 
uint16_t humidityBME=0; 
uint16_t pressureBME=0; 
uint8_t voltage = 0; 

constexpr uint8_t LEN_CHARBUF = 50;

void setup() {
Serial.begin(9600);
static char charbuf[LEN_CHARBUF];
nanoMode = 1; 
luxValue = 2; 
temperatureBME = 3; 
temperatureDS1 = 4; 
temperatureDS2 = 5; 
humidityBME = 6; 
pressureBME = 7; 
voltage = 8; 

sprintf(charbuf, "%u %u %d %d %d %u %u %u", nanoMode, luxValue, temperatureBME, 
            temperatureDS1, temperatureDS2, humidityBME, pressureBME, voltage);

Serial.print("charbuf "); Serial.println(charbuf);
}

void loop() {}

Выводит: charbuf 1 2 0 3 4 5 6 7

Почему так? У меня подозрение на uint32_t luxValue.

Пробовал на nano и в Wokwi.

вторым должен идти спецификатор %ul

charbuf 1 2l 0 3 4 5 6 7

ну, значить, %lu

1 лайк

где-то там, в дебрях

Здесь подробнее нашёл.

1 лайк