Подсчёт секунд с помощью millis()

За 4 дня на озон не зашел? Странно…

Для объективной оценки нужно как минимум разбираться в предмете. Но

:wink:

Значит урок не выучен и результат - чистая случайность.. Еще что-то поменяете в скетче и опять начнет врать

Уже всё заказал. Дело принципа уже было.

Коллега, ты же видел. что ТС “сделал”, он количество миллисекунд подогнал под накладные расходы его конкретного цикла.
Тот самый случай, когда не нужно ничего объяснять, а только лишь наблюдать, как Дроздов. :wink:
Объяснять приятно тому, кто получает пользу от объяснений. Не наш случай.

Случайности не случайны. Данная случайность заставила меня зарегистрироваться на этом сайте, и пообщаться с хорошими людьми. А то всё сам да сам :grinning_face: .

Я уже писал ранее что буду переходить на малину или esp., и естественно всё буду переписывать.

Сейчас мне нужно запустить опытный образец, далее всё устранять по ходу дела.

Удачи Вам!

Ты продолжаешь выё…ываться, вместо того, чтобы просто уточнить свою ошибку.
Это типично бабье поведение. На эту тему у нас тут у всех опыта - хоть жопой жри. Я 36 лет женат… :wink: Нормальный человек, понимая, что над ним прикалываются, спросит: “А что я делаю не так? Как правильно?”. Но баба будет считать, что над ней насмехаются и унижают… и ей уже никакая наука не нужна - только самоутвердиться.
Что ты и показываешь, своим “гордыми” репликами.
Ни один человек тебе пока не указал на твою ошибку… просто ты не спросил о ней.

вы правда думаете, что когда вы перейдете на ЕСП - у вас все само наладится? :slight_smile:

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

Нет.

Неужели создалось впечатление, что я настолько наивен, и верю что смена платформы решит все мои проблемы?:roll_eyes:

  unsigned long timer = millis();
  static unsigned long cycle;
  static uint8_t sec = 0;

  if(millis() - cycle > 1000) {
    sec += 1;
    cycle = millis();
  }

  if (sec == 60) {sec = 0;}
  
  Serial.println(sec);

  delay(300);

Пожалуйста смотрите.

Максимальную точность времени на ардуино уно/нано можно получить, используя 16-битный таймер. В прерывании добавляйте по одной секунде.
Но на много точнее чем на миллис не будет. Точность сильно зависит от частоты кварцевого/керамического резонатора.

P.S. По скетчу выше: правильнее будет оператор “>” заменить на “>=”.

Давайте без мата, мы цивилизованные люди. Я тоже поприкалывался, но Вас это почему то задело. Поверьте, я спокоен как удав.

Если у Вас в браке проблемы, обращайтесь. Я работал в Кащенко, знакомые остались, помогу :wink: .

Ну и если самой темы чтоб попытаться прояснить ситуацию Вам не хватает, и Вс необходимо попросить, я не гордый:

Многоуважаемый WladDrakula. Не будете ли вы так любезны, оказать мне непосильную помощь, в решении моей проблемы? Низкий Вам поклон!

Ответ принимается ДА - :grin: , НЕТ - :face_vomiting:

ТС, родное сердце. Ты не совсем понимаешь кто ты и куда пришел. Ты Андриано “сделал одолжение” - показал код. Мне с сарказмом ответил. В себя поверил? :wink:
Ну Ок. יום טוב, בהצלחה

Нам не нужна помощь. Она нужна тебе. Таким образом не общаются, если испытывают нужду. Это не “тусовка сверстников” для тебя. Не обмен мнениями.

По теме: Ты пишешь не правильно.Цикл с постоянным интервалом пишется не так. Для понимания рассмотри случай, когда миллис еще не “натикали” 1000, а только 998, а пейлоад довольно тяжелый - пусть те же 300мс, как в твоем примере выше. И тогда на следующий “тик” мы придем уже с погрешностью в 298 мс… и так далее.

שיעורי בית - измени цикл так, чтобы учесть подобные накладки.


вот эти два слова на иврите - это “шиурей байт” = домашка.
Если не получится самому, то есть намек - в одном из постов выше тебе показали пример цикла с постоянным интервалом. Поищи. Если не найдешь сам, я покажу ответ через 40 минут. Как-то же надо учеников мотивировать к самостоятельности?

Я ему еще в #17 написал - да не читатель он, видать ))

ок. время самостоятельно работы вышло. толку конечно не было.
пример

Спойлер
#include <Arduino.h>

void setup()
{
  Serial.begin(115200);
}

void loop()
{
  static int secondCounter1 = 0;
  static int secondCounter2 = 0;

  static unsigned long lastMillis1 = 0;
  static unsigned long lastMillis2 = 0;

  unsigned long currentMillis = millis();

  if (currentMillis - lastMillis1 >= 1000)
  {
    lastMillis1 = currentMillis;
    secondCounter1++;
    Serial.printf("Timestamp %u Counter 1: %d\n\r", currentMillis, secondCounter1);
  }
  if (currentMillis - lastMillis2 >= 1000)
  {
    lastMillis2 += 1000; // Increment by 1000 to maintain a consistent interval
    secondCounter2++;
    Serial.printf("Timestamp %u Counter 2: %d\n\r", currentMillis, secondCounter2);
  }
  auto nDelay = 200 + random(0, 100);
  delay(nDelay);
}

вывод:

Спойлер
 Timestamp 1131 Counter 1: 1
Timestamp 1131 Counter 2: 1
Timestamp 2079 Counter 2: 2
Timestamp 2294 Counter 1: 2
Timestamp 3056 Counter 2: 3
Timestamp 3299 Counter 1: 3
Timestamp 4257 Counter 2: 4
Timestamp 4541 Counter 1: 4
Timestamp 5001 Counter 2: 5
Timestamp 5685 Counter 1: 5
Timestamp 6190 Counter 2: 6
Timestamp 6702 Counter 1: 6
Timestamp 7206 Counter 2: 7
Timestamp 7719 Counter 1: 7
Timestamp 8011 Counter 2: 8
Timestamp 8825 Counter 1: 8
Timestamp 9064 Counter 2: 9
Timestamp 10109 Counter 1: 9
Timestamp 10109 Counter 2: 10
Timestamp 11065 Counter 2: 11
Timestamp 11348 Counter 1: 10
Timestamp 12111 Counter 2: 12
Timestamp 12587 Counter 1: 11
Timestamp 13170 Counter 2: 13
Timestamp 13743 Counter 1: 12
Timestamp 14217 Counter 2: 14
Timestamp 14988 Counter 1: 13
Timestamp 15237 Counter 2: 15
Timestamp 16021 Counter 1: 14
Timestamp 16021 Counter 2: 16
Timestamp 17219 Counter 1: 15
Timestamp 17219 Counter 2: 17
Timestamp 18243 Counter 1: 16
Timestamp 18243 Counter 2: 18
Timestamp 19086 Counter 2: 19
Timestamp 19372 Counter 1: 17
Timestamp 20212 Counter 2: 20
Timestamp 20467 Counter 1: 18
Timestamp 21275 Counter 2: 21
Timestamp 21496 Counter 1: 19
Timestamp 22068 Counter 2: 22
Timestamp 22497 Counter 1: 20
Timestamp 23198 Counter 2: 23
Timestamp 23684 Counter 1: 21
Timestamp 24149 Counter 2: 24
Timestamp 24857 Counter 1: 22
Timestamp 25119 Counter 2: 25

вот так накапливается погрешность

Я конечно всё понимаю, сроки и т.д.и т.п., но я на работе. Поэтому всё зависит от свободного времени.

Зачем оправдания? Я ответ уже показал. Изучай.

В коде #52 меня радует то, что вывод в Сериал сыпется постоянно, с той скоростью что ЛУП позволит…
Этот ляп вроде как прямого отношения к вопросу не имеет, но сразу в глаза бросается, как волочащийся за Штирлицем парашют :slight_smile: