Как объединить время в переменную

У меня есть проект Arduino Uno, который записывает посещаемость учащихся с помощью датчика отпечатков пальцев. Поэтому, когда датчик найдет совпадение, последовательный монитор будет распечатывать идентификатор студента и текущее время следующим образом:

    DateTime now;
    void setup()
      {
          ...
      }

    void loop()
      {
          .....
          //найдено совпадение
          Serial.print("Found ID #");
          Serial.println(finger.fingerID);
          Serial.print("Time->");
          Serial.print(now.hour(), DEC);
          Serial.print(':');
          Serial.print(now.minute(), DEC);
          Serial.print(':');
          Serial.print(now.second(), DEC);
      }

Пример результата:

Found ID#1
Time-> 18:11:54

Я хотел бы сохранить время в переменной и распечатать его вместо того, чтобы печатать часы, минуты и секунды отдельно. Как мне это сделать???

Я пытался сделать так, как показано ниже, но получаю сообщение об ошибке, я хотел бы сохранить его в виде строки. Как мне это сделать?

string time = now.hour() + ':' + now.minute() + ':' + now.second();

, 👍3

Обсуждение

Будет эффективнее печатать по частям. Потому что он создает текст прямо в буфере вывода, вместо того, чтобы копировать его., @ratchet freak

Подсказка: если вы хотите выполнить некоторые вычисления или сохранить отметку времени, лучше выбрать тип данных time_t. Он определяется как секунды с полуночи 1 января 1970 года (время Unix). Подробнее см. https://github.com/PaulStoffregen/Time/blob/master/TimeLib.h#L21., @Mikael Patel


1 ответ


Лучший ответ:

2

Для этого вы хотите использовать snprintf:

char timeString[9];

snprintf(timeString, 9, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
Serial.println(timeString);

Используя такую строку формата, вы принимаете во внимание временные интервалы < 10 (например, 7 минут и 23 секунды 03:00, что в противном случае было бы 3:7:23), дополнив время ведущими нулями там, где это необходимо.

,

Черт, ты был на три минуты быстрее с тем же раствором. Замена «9» на «sizeof timeString» может быть полезна, если он когда-нибудь захочет включить больше данных в свою отметку времени., @towe

Может быть - пока timeString находится в той же (или большей) области, а не указатель, переданный функции :), @Majenko

@Majenko Вы знакомы с python или firebase? Потому что я хотел бы отправить вывод в код Python, потому что сам код Python поймает вывод и отправит его в базу данных Firebase в реальном времени. Я ссылаюсь на этот [веб-сайт](https://muhd-lokman.weebly.com/projects), я сделал вывод следующим образом: Serial.println("{'SID':"+ String(finger.fingerID) +" ,'time':"+ String(timeString) +"}"); но я не знаю, как это поймать в моем питоне, @Michael

Я страстно ненавижу python и никогда не слышал о firebase., @Majenko

@ Маженко Все в порядке. Я делаю то же самое на сегодняшний день. Но я могу отображать дату так: «2018/11/». День не отображается, что случилось?, @Michael

Вы дали достаточно места в своей строке?, @Majenko