Как передать/принять текущее время

sana555
Offline
Зарегистрирован: 11.05.2018

Существует ли способ принять время в формате: 13:50:23?

Передача:

mySerial.print("<Time>");
mySerial.print(sTime);

Можно конечно передать отдельно часы, минуты и секунды, и принять с помощью mySerial.parseInt(), вставив недостающие ":" Но можно ли просто принять это как текст: "13:50:23"?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Можно.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Несколько вариантов, но все связаны разделением принятой строки на фрагменты.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sana555 пишет:

Существует ли способ принять время в формате: 13:50:23?

Да, существует.

Существуют способы передать и принять время в любом формате, хоть в текстовом: "двадцать три часа, семнадцать минут, тридцать две секунды". Другой вопрос, зачем?

Вот Вы собрались передавать время в виде восьми символов. В то время, как в системе оно хранится в виде четырёх байтов. Причём в эти четыре байта помещается не только время, но и дата. Может разумнее передавать системное время (вдвое меньше данных), а красивую строку уже на месте рисовать, если надо?

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

sana555 пишет:

 можно ли просто принять это как текст: "13:50:23"?

Странный вопрос... вы же можете отправить в Сериал "Hello World" и принять потом оттуда?

А чем строка "13:50:23" хуже?

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

Может ему просто на дисплее надо это нарисовать... Ну, или человек использует либу, которая сама парсит такую строку.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707 пишет:

Странный вопрос... вы же можете отправить в Сериал "Hello World" и принять потом оттуда?

А чем строка "13:50:23" хуже?

Это у Вас странный комментарий!

Про Hello World есть учебное видео на ютубе. Так и называется "Serial.print("Hello, world!");" - миллион просмотров, между прочим! 

А про строку "13:50:23" даже паршивого бложика нету! Ну, и как с ней работать? Вот тем и хуже!

sana555
Offline
Зарегистрирован: 11.05.2018

Мне это нужно, чтобы слать в приложение Blynk - своеобразный контроль зависания. Я научился отправлять и принимать только целые и с точкой,  как отправлять текст я не нашел...(

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sana555 пишет:

 как отправлять текст я не нашел...(

В стартовом посте, в скетче, строка №1 - это отправка текста. Нашли?

sana555
Offline
Зарегистрирован: 11.05.2018

Это понятно...) Мне же нужно туда запихнуть переменную со временем...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, и пихайте, кто Вам не даёт. Как она у Вас называется, Ваша переменная? Допустим, kaka, ну так и пишите Serial.print(kaka);

sana555
Offline
Зарегистрирован: 11.05.2018

Дык, оказывается я правильно написал во второй строке первого сообщения..) Хорошо, с этим разобрались..), самое главное теперь как это теперь принять на другой стороне?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

Ну, и пихайте, кто Вам не даёт. Как она у Вас называется, Ваша переменная? Допустим, kaka, ну так и пишите Serial.print(kaka);

не, лучше Serial.print(caca);

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sana555 пишет:

Дык, оказывается я правильно написал во второй строке первого сообщения..) Хорошо, с этим разобрались..), самое главное теперь как это теперь принять на другой стороне?

Как передавали, так и принимайте - в строку.

Хотя, я Вам уже говорил, лучше передавайте системное время. Тем более, Вы говорите, что целые передвать/принимать умеете.

sana555
Offline
Зарегистрирован: 11.05.2018

ЕвгенийП пишет:

Как передавали, так и принимайте - в строку.

Я пользовался только mySerial.parseInt();, но он остановится на ":".

---

Системное время никогда не использовал, поэтому не знаю как передавать.

nik182
Offline
Зарегистрирован: 04.05.2015

А куда в Вlynk слать? Какой виджет? Или какую переменную?

sana555
Offline
Зарегистрирован: 11.05.2018

value display

nik182
Offline
Зарегистрирован: 04.05.2015

Сердце вещует, что время вывести на value display нельзя. На LCD можно, в терминал...

sana555
Offline
Зарегистрирован: 11.05.2018

Як же нельзя, можно..): Blynk.virtualWrite(2, sTime); Я же вывожу...)

nik182
Offline
Зарегистрирован: 04.05.2015

Да, можно выводить string. Ну а string можно любой сгенерить. 

sana555
Offline
Зарегистрирован: 11.05.2018

Да, все верно. Я отправляю string - в Blynk это выглядит как часы, поскольку обновляется каждые 2 сек..)

---

В общем, разобрался...) Ходил на этот сайт: http://www.joyta.ru/10875-arduino-serial-posledovatelnyj-port/ Но, как оказалось, там не было нужной мне функции(Serial.readStringUntil('<')), и, поэтому, я даже и не догадывался о ее существовании....)

А ларчик то вот как открывался..):

Передаем время:

//формируем строку текущего времени из нескольких переменных    
  sTime = String(sHour)+":"+String(sMinute1)+":"+String(sSecond1);
//отправляем время
  mySerial.print("<Time>");
  mySerial.print(sTime); 
  mySerial.print("</Time>");

Принимаем:

if (mySerial.find("<Time>")) {           
  String sTime=mySerial.readStringUntil('<');  //принимаем строку до знака '<'
  Serial.println(sTime);
} 

Поправочка, мне нужно это было для: Сначала я формирую время в Wemos (в формате 0:00:00) (по возможности синхронизирую его с интернетом, если таковой имеется), если интернета нет, то не беда, пойдет отсчет с 0:00:00...) Далее отправляю эту строку в ардуино, расшифровываю там и отправляю ее обратно в Wemos, а после приема в Wemos - отправляю ее в Blynk. Согласен, мудрено, но так я контролирую зависание не только Wemos, но и ардуино...)) Я, наверное, лопух, но какой уж есть...))

Спасибо за подсказки..)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sana555 пишет:
Ходил на этот сайт: http://www.joyta.ru/10875-arduino-serial-posledovatelnyj-port/ Но, как оказалось, там не было нужной мне функции(Serial.readStringUntil('<')), 

Так Вы хоите на оригинал, там все функции есть. Чего по помойкам-то шакалить?

sana555
Offline
Зарегистрирован: 11.05.2018

Прошел по вашей ссылке, далее кликнул serial: https://www.arduino.cc/reference/en/language/functions/communication/ser... , но там тоже нет данной функции...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sana555 пишет:

Прошел по вашей ссылке, далее кликнул serial: https://www.arduino.cc/reference/en/language/functions/communication/serial/ , но там тоже нет данной функции...

Да, ладно, нет. Всё там есть. Просто, может это Вам пока рановано - руководство более или менее профессионально составлено. Дело в том, что у сериала своей такой функции и не было никогда. Он наследует её от родителя - класса Stream (там внизу самая первая ссылка) кликните - в нём она есть.

И, кстати, раз она есть у Stream, значит есть у всех его потомков - Wire, SoftwareSerial, SD, Ethernet и т.п.

sana555
Offline
Зарегистрирован: 11.05.2018

Да, действительно там есть..) Не подготовленному, такому как я, было не в домек искать ее в stream, поскольку в функции этого слова нет, а вот serial есть - вот и, по логике, кликаем туда...))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sana555 пишет:

 вот и, по логике, кликаем туда...))

Это не по логике, а по незнанию и непониманию логики построения потоковых классов. Привыкайте, учитесь.

sana555
Offline
Зарегистрирован: 11.05.2018

Совершенно верно..) Я хотел сказать, по логике неуча, так точнее будет..)

---

а где бы про эту логику построения почитать на русском и по проще?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ЕвгенийП пишет:

Про Hello World есть учебное видео на ютубе. Так и называется "Serial.print("Hello, world!");" - миллион просмотров, между прочим! 

А про строку "13:50:23" даже паршивого бложика нету! Ну, и как с ней работать? Вот тем и хуже!

После тщательного поиска в И-нете выяснилось, что можно работать со строками "13:50:12" и "13:50:30". Ничего, что между ними, найти не удаось.

Вывод: строку "13:50:23" передать невозможно (иначе об этом хоть кто-нибудь да написал).