вывод двухзначного числа

alexey3
Offline
Зарегистрирован: 25.11.2017

В общем чтото я запутался просто не могу понять какую команду вставить , чтобы выводилось не 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);

 

 

negavoid
Offline
Зарегистрирован: 09.07.2016
box.print( sprintf( "%02d:%02d:%02d", hours, minutes, seconds ) );

 

b707
Offline
Зарегистрирован: 26.05.2017

alexey3 - а до такой очевидности как "вывести вначале ноль, если число меньше 10" - не додумались?

Что за dmd используете?

alexey3
Offline
Зарегистрирован: 25.11.2017

додумался но потом затирает

alexey3
Offline
Зарегистрирован: 25.11.2017

не помогло скинуло опять на 0:0:1

alexey3
Offline
Зарегистрирован: 25.11.2017

вот полный скетч

#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'));
}

 

b707
Offline
Зарегистрирован: 26.05.2017

alexey3 пишет:

додумался но потом затирает

поясните, что  затирает.

И совет - пожалуйста, пишите развернутыми предложениями, а не так, что из вас каждое слово надо вытягивать.

alexey3
Offline
Зарегистрирован: 25.11.2017

делаю часы на модулях p10 и видимо устал так как забыл команду преобразования числа,

изначально нормально пропечатывает 00:00:00 с началом отсчёта выходит так 0:0:1

 

b707
Offline
Зарегистрирован: 26.05.2017

alexey3 пишет:

вот полный скетч

#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'));
}

 

вы в программировании полный нуль, что ли? - строчку. вам данную - надо вставть ВМЕСТО вашей печати цифр!!!

b707
Offline
Зарегистрирован: 26.05.2017

alexey3 пишет:

делаю часы на модулях p10 и видимо устал так как забыл команду преобразования числа,

или никогда ее не знал.

Возьмите на Амперке готовый скетч часов на модулях p10 - в разделе "Смотрите что я сделал" - тема "Часы офисные".

Там не только часы, но и коррекция времени через интернет

alexey3
Offline
Зарегистрирован: 25.11.2017

Так чтоли, но тогда просто 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);

 

sadman41
Offline
Зарегистрирован: 19.10.2016

а где у спринтфа первый аргумент - http://www.cplusplus.com/reference/cstdio/sprintf/ ?

b707
Offline
Зарегистрирован: 26.05.2017

sadman41 пишет:

а где у спринтфа первый аргумент - http://www.cplusplus.com/reference/cstdio/sprintf/ ?

а, ну точно, тогда ему надо что попроще, он c sprintf() не справится

Алексей. так что мешает сделать вот так:

if (hours <10) box.print("0");
box.print(hours);

 

alexey3
Offline
Зарегистрирован: 25.11.2017

вообще бред теперь выводит 422:422:17

alexey3
Offline
Зарегистрирован: 25.11.2017

Спасибо огромное !!! Выправил

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);