Вопрос к гуру от программирования. Есть кусок кода - Код (C++): ... char mess_Internal[4]; char mess_Error[] = "ERR"; // Сообщение об ошибке (то бишь перегрев кристалла) word InternalTemp; // Температура кристалла const word ChipTemp = 60; // Допустимая температура кристалла ... //==================================================================================== void loop() { InternalTemp = analogRead(ADC_TEMPERATURE); //ADC_TEMPERATURE is #defined to be the channel for reading the temperature; this varies between parts. if (InternalTemp < ChipTemp) { mess_Internal = InternalTemp; !!! Здесь показывает ошибку кода !!! } else { mess_Internal = mess_Error; !!! Здесь тоже покажет ошибку - invalid array assignment !!! } ... ... oled.print(mess_Internal); // Выводим на дисплей температуру кристалла или сообщение о перегреве ... } Не компилируется с сообщением - incompatible types in assignment of 'word {aka unsigned int}' to 'char [4]' Как синтаксически правильно написать этот кусок кода ? С уважением.
Я, как лет десять не касавшийся Си, все равно не стал бы присваивать указателю на массив значение температуры. Здесь с логикой проблемы. Или уже так можно? Там, похожже, звёздочка потерялась.
Если вводим класс String - Код (C++): ... String mess_Internal; String mess_Error = "ERR"; // Сообщение об ошибке (то бишь перегрев кристалла) word InternalTemp; // Температура кристалла const word ChipTemp = 60; // Допустимая температура кристалла ... //==================================================================================== void loop() { InternalTemp = analogRead(ADC_TEMPERATURE); //ADC_TEMPERATURE is #defined to be the channel for reading the temperature; this varies between parts. if (InternalTemp < ChipTemp) { mess_Internal = String(InternalTemp); } else { mess_Internal = mess_Error; } ... ... oled.print(mess_Internal); // Выводим на дисплей температуру кристалла или сообщение о перегреве ... } Компилируется успешно, но код распухает на 2К байт и не лезет в кристалл. Проверить работу в реале или симуляторе естественно - невозможно. Хотелось бы найти способ по-экономнее.
ты хочешь преобразовать числа в символы? Так это делается вовсе не так. так нельзя. операнд слева - это указатель на первый элемент массива. Ему нельзя присвоить значение типа word. так тоже нельзя.
Ну нарисуй как "зя". Тут всего десяток строчек кода. Руки не отвалятся, а я буду премного благодарен. Пойнтеры для меня - темный лес. Сколько пытался - так и не понял.
Быстрое преобразование чисел в символы. Код (C++): #include "stdint.h" typedef struct { uint32_t quot; uint8_t rem; } divmod10_t; inline static divmod10_t divmodu10(uint32_t n) { divmod10_t res; res.quot = n >> 1; res.quot += res.quot >> 1; res.quot += res.quot >> 4; res.quot += res.quot >> 8; res.quot += res.quot >> 16; uint32_t qq = res.quot; res.quot >>= 3; res.rem = (uint8_t)(n - ((res.quot << 1) + (qq & ~7ul))); if (res.rem > 9) { res.rem -= 10; res.quot++; } return res; } char* utoa_fast_div(uint32_t value, char* buffer) { buffer += 11; *--buffer = 0; do { divmod10_t res = divmodu10(value); *--buffer = res.rem + '0'; value = res.quot; } while (value != 0); return buffer; }