Тот вариант, что я предложил как-раз без стрингов. Могу найти перевод флоата в символы вручную, вообще без библиотек )) он и короче в разы в машинном коде.
Недоделаный могу дать, там сразу на LCD вывод, вместо него надо подставить вывод символов куда надо; и знаков там дохрена, надо сократить, и там всё вручную ))
void PrintHexDigit(unsigned char i) // Печать мл. ниббла 0...9 A...F
{
i &= 0b1111; // уберем старшие биты
if(i < 10)
i += 0x30; // цифры
else
i += 0x41 - 10;
ByteToLCD(i);
}
void PrintLong10(unsigned long i) // вывод long 11 знаков на дисплей
{
// *-----------------23.03.03 20:49-------------------
// * Печать 11 знаков
// * --------------------------------------------------*
unsigned long j;
unsigned char c;
unsigned char Poz;
Poz = 10; //11-5=6
j = 1000000000;
do
{
c = i / j % 10;
PrintHexDigit(c); // выводим цифры
j /= 10;
} while ( --Poz != 0);
} //________
void PrintDouble5s(double F) // печать double 5знаков, 4 зн после зап.макс. со знаком
{
unsigned long i;
unsigned long j;
unsigned char c;
unsigned char DecPoz, Poz;
if ( F < 0) // если отрицательное
{
ByteToLCD('-'); // печатаем минус
F = -F; // сделаем положительным
}
// автомасштаб запятой:
DecPoz = 1; // положение запятой на последнем знаке
Poz = 5 - 1;
j = 10000;
do
{
if( (F + 0.5) >= j) continue; // после запятой чисел не будет
F *= 10;
if( ++DecPoz > 6) break; // ограничим число зн. после запятой
} while ( --Poz != 0);
i = (unsigned long) (F + 0.5); //округлим
// выводим числа:
Poz = 5; // число знаков для вывода
do
{
c = i / j % 10; // Остаток от делени
if(DecPoz == (Poz + 1)) ByteToLCD('.');
PrintHexDigit(c);
j /= 10;
} while ( --Poz != 0);
ByteToLCD(' '); // затрем если был минус, а потом плюс
} //_______________конец PrintDouble5 ____________________________________
Да, там лишнюю функцию по печати long по ошибке вставил, ну пусть будет. Может пригодится, посмотреть сам принцип. Эта технология называется “Закат солнца вручную” ахаха
А можно даже сделать процедуры для переноса переменных, например, типа int в какую-то часть массива char с применением указателей. Параметры такой процедуры: откуда, куда, сколько. И если это относительно несложно, то с float придется потанцевать.
Секунду! тут не просто байты из флоата, а перевод флоата в символы. Сам формат флоат-числа совсем другой и нечитаемый человеком ))
Его можно разбирать на части при помощи union, например. Или да, через указатели.
Но это - Другое™ Тут надо не путать.
Так никто же не спорит. Но в моём (#31) без стрингов и хлп (как ты, вроде бы, и хотел). И ещё…
Просто сравни:
#22:
Скетч использует 4364 байт
#31:
Скетч использует 1544 байт
А вроде бы тоже самое делают… ))
ЗЫ: Ардуино Нано на 168PA чипе.
ЗЫ2: И запомни уже (если читать книжки лень) - если в массиве символов объявлено 10 символов, то «запихать» туда можно только 9. Десятым идет нулевой символ (признак конца строки) ‘\0’. Он туда без явного тобой объявления добавляется.