typedef unsigned char u8;
typedef unsigned short u16;

u8 * print_u16(u8 * sink, u16 val) {
    static const u16 dividers[] = {10000, 1000, 100, 10, 1, 0};
    u8 i = 0;
    for (; i < 4; i++) { // обработка лидирующих нулей, типа 00000 - они не печатаются
        u16 divider = dividers[i]; // 10000, 1000, 100, 10
        if (val >= divider) break;
        *(sink++) = ' ';
    };
    for (; i < 5; i++) {
        u16 divider = dividers[i];
        u8 j = 0;
        while (val >= divider) {
            val -= divider;
            j += 1;
        }
        *(sink++) = '0' + j;
    };
    *(sink++) = ' ';
    return sink;
}


void setup() {
  Serial.begin(9600);
}

void loop() {
   static const char * myString = "ESUAP";
   static byte val = 100;
   u8 buf[16];
   u8 * position = print_u16(buf, val);
   strcpy(position, myString);
   Serial.println((char *)buf);
   val++;
   delay(100);
}