А я запрещал?))
Я лишь показал как сделал бы я (первое что в голову пришло).
Ещё раз здравствуйте! Нужна помощь по скетчу. Имеется переменная Float DIST= 13469. Необходимо каждую цифру из этой переменной вывести отдельно на жк экран. Удалось вывести только первую и последнюю цифру.
uint32_t km1 = DIST;
Write_1621( 18,num[km1 / 10000]); // зажигаем первую цифру
//зажигаем вторую цифру
//зажигаем третью цифру
//зажигаем четвёртую цифру
Write_1621( 10,num[km1 % 10]); // зажигаем пятую цифру
//адреса цифр 1-18 | 2-16 | 3-14 | 4-12 | 5-10. (цифра-адрес)
void setup() {
Serial.begin(9600);
uint32_t km1 = 12345;
for(byte n = 10; n < 19; n+=2){
byte r = (byte)(km1 % 10);
km1 = km1 / 10;
// Write_1621( n, num[r]);
Serial.print("adres = ");//это просто для наглядности
Serial.println(n);// потом убрать
Serial.print("num = ");
Serial.println(r); // выводим, начиная с младшего разряда
}
}
void loop() {
// put your main code here, to run repeatedly:
}
Послепервая и предпоследняя точно так же.
Ну и выводи так же как и до этого выводил…
Вот для наглядности и понимания:
uint32_t km1 = DIST;
Write_1621(18, num[(km1 / 10000) % 10]); // зажигаем первую цифру
Write_1621(16, num[(km1 / 1000) % 10]); // зажигаем вторую цифру
Write_1621(14, num[(km1 / 100) % 10]); // зажигаем третью цифру
Write_1621(12, num[(km1 / 10) % 10]); // зажигаем четвёртую цифру
Write_1621(10, num[(km1 / 1) % 10]); // зажигаем пятую цифру
//адреса цифр 1-18 | 2-16 | 3-14 | 4-12 | 5-10. (цифра-адрес)
Общее в формуле проследил?
Чуть подправил и формил код @Дим-мычъ в функцию, получилось вот это:
// Функция выводит с младцего разряда к старшему число number,
// которое передается в качестве аргумента в функцию NumPrint,
// если число имеет менее 5 разрядов, то вместо старших разрядов будет "пусто"
// Например число 124 выведет так: " 124" (то есть "[пусто][пусто]124")
void NumPrint (uint32_t number) {
for (uint8_t addr = 10; addr < 19; addr += 2) {
uint8_t r = (uint8_t)(number % 10);
Write_1621(addr, ((number > 0 ) ? num[r] : 0x00));
number = number / 10;
}
//адреса цифр 1-18 | 2-16 | 3-14 | 4-12 | 5-10. (цифра-адрес)
}
...
uint32_t km1 = DIST;
NumPrint (km1);
Да, тоже думал, но чего-то поленился))
Дык, вроде ж
Если number == 0; то и r == 0, т.е num[0]; // то что надо
Т.е. тоже надо хотябы один 0 выводить, а если запятая есть, то два.
Write_1621(addr, num[r]); // ? Или нет?
А, пардоньте… ![]()
Про просто ноль я и забыл…
Сейчас добавим ![]()
Вот так правильнее будет ))
// Функция выводит с младцего разряда к старшему число number,
// которое передается в качестве аргумента в функцию NumPrint,
// если число имеет менее 5 разрядов, то вместо старших разрядов будет "пусто"
// Например число 124 выведет так: " 124" (то есть "[пусто][пусто]124")
void NumPrint (uint32_t number) {
if (number == 0) {
Write_1621(10, num[number]);
for (uint8_t addr = 12; addr < 19; addr += 2) {
Write_1621(addr, 0x00);
}
} else {
for (uint8_t addr = 10; addr < 19; addr += 2) {
uint8_t r = (uint8_t)(number % 10);
Write_1621(addr, ((number > 0 ) ? num[r] : 0x00));
number = number / 10;
}
}
//адреса цифр 1-18 | 2-16 | 3-14 | 4-12 | 5-10. (цифра-адрес)
}
...
uint32_t km1 = DIST;
NumPrint (km1);
...
uint32_t km1 = DIST;
NumPrint (km1);
А без вот этого:
Write_1621(addr, ((number > 0 ) ? num[r] : 0x00));
Число 253 выводилось бы так:
00253
А ноль знаешь как? Вот так:
00000
Мне так не нравится ))
А без вот этого:
а так у тебя, если число == 0 то вапще ничего не выведется
то вапще ничего не выведется
Я поправил это в #48…
Луче па щеччику
// Функция выводит с младцего разряда к старшему число number, // которое передается в качестве аргумента в функцию NumPrint, // если число имеет менее 5 разрядов, то вместо старших разрядов будет "пусто" // Например число 124 выведет так: " 124" (то есть "[пусто][пусто]124") void NumPrint (uint32_t number) { if (number == 0) { Write_1621(10, num[number]); for (uint8_t addr = 12; addr < 19; addr += 2) { Write_1621(addr, 0x00); } } else { for (uint8_t addr = 10; addr < 19; addr += 2) { uint8_t r = (uint8_t)(number % 10); Write_1621(addr, ((number > 0 ) ? num[r] : 0x00)); number = number / 10; } } //адреса цифр 1-18 | 2-16 | 3-14 | 4-12 | 5-10. (цифра-адрес) }
Вот так сократил:
void NumPrint (uint32_t number) {
for (uint8_t addr = 10; addr < 19; addr += 2) {
uint8_t r = (uint8_t)(number % 10);
Write_1621(addr, ((number > 0) ? num[r] : ((addr == 10) ? num[r] : 0x00)));
number = number / 10;
}
//адреса цифр 1-18 | 2-16 | 3-14 | 4-12 | 5-10. (цифра-адрес)
}
Вроде бы не накосячил…)))
Вот вы развлекаетесь, а тс закинул запрос и свалил
что пробовать, мне не в порт посылать надо, а на экран
Чё тут думать, трясти надо!
Мне нравится как ТС приходит сюда за каждым чихом, а как только всей толпой чих решат, он вроде исчезает, но тут же приходит за следующим.
Напомнило пьесу “Драма на системной магистрали”. Автора не помню, но это из 80-х. Вот полный текст. Обратите внимание на ремарку “проходит одна миллисекунда” в конце ![]()
Драма на системной магистрали
Действующие лица:
ПРОГРАММА - программа пользователя
СИСТЕМА - операционная система
КАНАЛ - магистральный канал
ПРИНТЕРљ
ТЕРМИНАЛ
ДИСК
БУФЕР
Действие происходит в обычном компьютере
ПРОГРАММА: - Эй, Система!
СИСТЕМА: - Чего тебе?
ПРОГРАММА. - Цифру “6” напечатать надо.
СИСТЕМА: - Эй, Принтер!
ПРИНТЕР: - Я занят.
ПРОГРАММА: - Тогда, Система, дай еще памяти.
СИСТЕМА: - Нет памяти, пиши на диск. Диск!
ДИСК поднимает флаг готовности: - Вызывали?
СИСТЕМА: - Записать надо!
ДИСК: - Есть!
КАНАЛ: - Система! Для вас получен байт.
СИСТЕМА: - Жди. Диск, записал?
ДИСК: - Нет свободного места.
СИСТЕМА: - Канал! Давай свой байт!
КАНАЛ: - Я уже принял следующий, а старый стер.
СИСТЕМА: - Программа, это тебе прислали байт?
ПРОГРАММА: - Нет.
СИСТЕМА (засовывает байт в буфер): - Терминал! Пользователь что-нибудь нажимал?
ТЕРМИНАЛ: - Нет.
СИСТЕМА: - Программа! Работай дальше.
ПРОГРАММА: - Не могу, цифру “6” напечатать надо.
СИСТЕМА: - Эй, Принтер!
ПРИНТЕР: - Я занят.
КАНАЛ: - Система, для вас получен байт.
СИСТЕМА: - Давай. Программа, это твой байт?
ПРОГРАММА: - Нет.
СИСТЕМА: - Буфер!
БУФЕР: - Я переполнен.
СИСТЕМА выбрасывает байт: - Эй, Принтер!
ПРИНТЕР. - Свободен.
СИСТЕМА: - Печатай цифру “6”.
ПРИНТЕР: - Есть.
СИСТЕМА: - Программа, работай дальше. (Программа работает, проходит одна миллисекунда)
ПРОГРАММА: - Эй, Система! Цифру “7” напечатать надо!
Вот вы развлекаетесь
О том и речь… )))
Драма на системной магистрали
Особенно драматично это сейчас выглядит с гигагерцами) Как всё тормозило, так и тормозит)
И диски террабайтные полны… )))
Если мне память не изменяет, то во времена написания «драмы» диски мегабайтами считались.)