вывод двухзначного числа
- Войдите на сайт для отправки комментариев
Сб, 21/12/2019 - 18:10
В общем чтото я запутался просто не могу понять какую команду вставить , чтобы выводилось не 1 а 01 но при этом когда дошло до 10 было не 010 а просто 10,
Могу выложить кусок кода если можно добавьте команду или ткните в неё носом,
заранее благодарен
DMD_TextBox box(dmd, 0, 1, 64, 16);
dmd.setBrightness(1);
dmd.selectFont(Arial_Black_16);
dmd.begin();
box.print(hours);
box.print(":");
box.print(minutes);
box.print(":");
box.print(seconds);
alexey3 - а до такой очевидности как "вывести вначале ноль, если число меньше 10" - не додумались?
Что за dmd используете?
додумался но потом затирает
не помогло скинуло опять на 0:0:1
вот полный скетч
#include <SimpleDHT.h> #include <DMD2.h> #include <fonts/Arial_Black_16.h> //#define CLOCK 10//10 //#define DATA 12//12 //#define LATCH 4//4 byte val = 50; //начальное значение на экране int H = 200; int DLA = 2000; int i = 200; int y = 200; byte numberSegments[11] = {0b11111110, 0b00101000, 0b01110101, 0b01111001, 0b00101011, 0b01011011, 0b01011111, 0b01101000, 0b11111111, 0b11111011, 0b00000000}; SoftDMD dmd(2,1); DMD_TextBox box(dmd, 0, 1, 64, 16); // initialize the library with the numbers of the interface pins volatile int sec, minute = 0, hour = 0; int b_h = 4; int b_m = 5; int pinDHT11 = 2; int b_startstop = 3; bool startstop = false; int hours = 00; int minutes = 00; int seconds = 00; // создаем объект класса long для хранения счетчика long lastTime = 0; SimpleDHT11 dht11; void setup() { Serial.begin(9600); { Serial.println("hours: 0-23"); H = Serial.parseInt(); Serial.println("minutes: 0-59"); i = Serial.parseInt(); Serial.println("year: 0-99"); y = Serial.parseInt(); dmd.setBrightness(1); dmd.selectFont(Arial_Black_16); dmd.begin(); box.print("00"); box.print(":"); box.print("00"); box.print(":"); box.print("00"); delay(DLA); pinMode(b_h, INPUT_PULLUP); pinMode(b_m, INPUT_PULLUP); pinMode(b_startstop, INPUT_PULLUP); // attachInterrupt(digitalPinToInterrupt(3), buttons, FALLING); } } void loop() { // как только разница между текущим временем и временем записанным в lastTime становится больше 1000 миллисекунд... while(millis()-lastTime > 1000) { //...обновляем lastTime и добавляем к счетчику Секунд +1 lastTime = millis(); seconds++; // как только счетчик секунд достигнет 60, обнуляем его и добавляем к счетчику Минут +1... if (seconds >= 60) { seconds = 00; minutes++; } // ...тоже самое для Часов... if (minutes >= 60) { minutes = 00; hours++; } // ... и обнуляем счетчик Часов в конце дня if (hours >= 24) { hours = 00; } } DMD_TextBox box(dmd, 0, 1, 64, 16); dmd.setBrightness(1); dmd.selectFont(Arial_Black_16); dmd.begin(); box.print( sprintf( "%02d:%02d:%02d", hours, minutes, seconds ) ); box.print(hours); box.print(":"); box.print(minutes); box.print(":"); box.print(seconds); delay(DLA); } void setTime(const char* compileTimeStamp) { hours = ((compileTimeStamp[11] - '0') * 10 + (compileTimeStamp[12] - '0')); minutes = ((compileTimeStamp[14] - '0') * 10 + (compileTimeStamp[15] - '0')); seconds = ((compileTimeStamp[17] - '0') * 10 + (compileTimeStamp[18] - '0')); }додумался но потом затирает
поясните, что затирает.
И совет - пожалуйста, пишите развернутыми предложениями, а не так, что из вас каждое слово надо вытягивать.
делаю часы на модулях p10 и видимо устал так как забыл команду преобразования числа,
изначально нормально пропечатывает 00:00:00 с началом отсчёта выходит так 0:0:1
вот полный скетч
#include <SimpleDHT.h> #include <DMD2.h> #include <fonts/Arial_Black_16.h> //#define CLOCK 10//10 //#define DATA 12//12 //#define LATCH 4//4 byte val = 50; //начальное значение на экране int H = 200; int DLA = 2000; int i = 200; int y = 200; byte numberSegments[11] = {0b11111110, 0b00101000, 0b01110101, 0b01111001, 0b00101011, 0b01011011, 0b01011111, 0b01101000, 0b11111111, 0b11111011, 0b00000000}; SoftDMD dmd(2,1); DMD_TextBox box(dmd, 0, 1, 64, 16); // initialize the library with the numbers of the interface pins volatile int sec, minute = 0, hour = 0; int b_h = 4; int b_m = 5; int pinDHT11 = 2; int b_startstop = 3; bool startstop = false; int hours = 00; int minutes = 00; int seconds = 00; // создаем объект класса long для хранения счетчика long lastTime = 0; SimpleDHT11 dht11; void setup() { Serial.begin(9600); { Serial.println("hours: 0-23"); H = Serial.parseInt(); Serial.println("minutes: 0-59"); i = Serial.parseInt(); Serial.println("year: 0-99"); y = Serial.parseInt(); dmd.setBrightness(1); dmd.selectFont(Arial_Black_16); dmd.begin(); box.print("00"); box.print(":"); box.print("00"); box.print(":"); box.print("00"); delay(DLA); pinMode(b_h, INPUT_PULLUP); pinMode(b_m, INPUT_PULLUP); pinMode(b_startstop, INPUT_PULLUP); // attachInterrupt(digitalPinToInterrupt(3), buttons, FALLING); } } void loop() { // как только разница между текущим временем и временем записанным в lastTime становится больше 1000 миллисекунд... while(millis()-lastTime > 1000) { //...обновляем lastTime и добавляем к счетчику Секунд +1 lastTime = millis(); seconds++; // как только счетчик секунд достигнет 60, обнуляем его и добавляем к счетчику Минут +1... if (seconds >= 60) { seconds = 00; minutes++; } // ...тоже самое для Часов... if (minutes >= 60) { minutes = 00; hours++; } // ... и обнуляем счетчик Часов в конце дня if (hours >= 24) { hours = 00; } } DMD_TextBox box(dmd, 0, 1, 64, 16); dmd.setBrightness(1); dmd.selectFont(Arial_Black_16); dmd.begin(); box.print( sprintf( "%02d:%02d:%02d", hours, minutes, seconds ) ); box.print(hours); box.print(":"); box.print(minutes); box.print(":"); box.print(seconds); delay(DLA); } void setTime(const char* compileTimeStamp) { hours = ((compileTimeStamp[11] - '0') * 10 + (compileTimeStamp[12] - '0')); minutes = ((compileTimeStamp[14] - '0') * 10 + (compileTimeStamp[15] - '0')); seconds = ((compileTimeStamp[17] - '0') * 10 + (compileTimeStamp[18] - '0')); }вы в программировании полный нуль, что ли? - строчку. вам данную - надо вставть ВМЕСТО вашей печати цифр!!!
делаю часы на модулях p10 и видимо устал так как забыл команду преобразования числа,
или никогда ее не знал.
Возьмите на Амперке готовый скетч часов на модулях p10 - в разделе "Смотрите что я сделал" - тема "Часы офисные".
Там не только часы, но и коррекция времени через интернет
Так чтоли, но тогда просто 1 горит и всё
DMD_TextBox box(dmd, 0, 1, 64, 16); dmd.setBrightness(1); dmd.selectFont(Arial_Black_16); dmd.begin(); box.print( sprintf( "%02d:%02d:%02d", hours, minutes, seconds ) ); // box.print(hours); // box.print(":"); // box.print(minutes); // box.print(":"); // box.print(seconds);а где у спринтфа первый аргумент - http://www.cplusplus.com/reference/cstdio/sprintf/ ?
а где у спринтфа первый аргумент - http://www.cplusplus.com/reference/cstdio/sprintf/ ?
а, ну точно, тогда ему надо что попроще, он c sprintf() не справится
Алексей. так что мешает сделать вот так:
if (hours <10) box.print("0"); box.print(hours);вообще бред теперь выводит 422:422:17
Спасибо огромное !!! Выправил
DMD_TextBox box(dmd, 0, 1, 64, 16); dmd.setBrightness(1); dmd.selectFont(Arial_Black_16); dmd.begin(); if (hours <10) box.print("0"); box.print(hours); box.print(":"); if (minutes <10) box.print("0"); box.print(minutes); box.print(":"); if (seconds <10) box.print("0"); box.print(seconds);