Очень даже имеет - луп только выводом и занят, а т.к. вывод в сериал очень и очень долгий, то… ))
Дракула показал тенденцию, вектор или как там по вашему, А ЧАСТНОСТИ В ВИДЕ ВОЛОЧАЩЕГОСЯ ПАРАШЮТА здесь совсем неуместны
“А что я такого сказал?”
Уж не ты будешь решать, что тут уместно, а что нет?
Разумеется, он правда так думает. И не один он – это известный феномен, отмеченный еще полвека назад
Нет, конечно.
Создалось впечатление, что Вы не наивны, а глупы, простите уж старика за прямоту. И Вы сделали немало, чтобы это впечатление возникло и утвердилось.
Ещё как имеет. Он постоянно закрывает прерывания и потому многие тики микрос просто пропускаются.
Здоровья Вам ![]()
И Вам не хворать!
Когда дело доходит до здоровья - уже настораживает…
@MMM, прошу прощения, збрехамши. Что-то переклинило и я с прямым углом SoftSerial перепутал, это он закрывает прерывания в функции write, чтобы тайминги не ломались. Serial не закрывает прерываний.
Когда дело доходит до здоровья
Да, ладно, … спасибо зарядке!
Это да. Тут вообще, бывают парадоксы. Муж бухает, а у жены голова болит.( И фиг ты чем это объяснишь.
спасибо зарядке!
Вчера с женой раком стояли в огороде. Вот это зарядка. Так и хотелось впердолить, но как подумаешь, то снимать, это… А оказалось, что ничего и небыло… Аж расстроился.
Ничего личного, от чистого сердца. А там пусть каждый додумывает по свей испорченности.
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);Пожалуйста смотрите.
if(timer - cycle >= 1000) {
sec += 1;
cycle += 1000;
}
Примечание: когда millis() используют для задания интервала между некоторыми действиями, может преследоваться одна из двух целей:
- Интервал должен быть не менее заданного.
- Интервал должен в среднем равняться заданному.
Вы используете код, предназначенный для первого случая, тогда как по смыслу Вам нужен второй.
Ну а избыточные вызовы millis() которые, будучи вызваны последовательно, не обязаны возвращать одно и то же число, - это дополнительный источник погрешности.
/*
Name: MillisClock.ino
Created: 23.06.2026 19:22:13
Author: DtS
*/
#include <Arduino.h>
constexpr uint32_t READ_INTERVAL = 1000; // миллисекунд в секунде, можно корректировать для калибровки
constexpr uint8_t SECONDS_PER_MINUTE = 60; // секунд в минуте
constexpr uint8_t MINUTES_PER_HOUR = 60; // минут в часе
constexpr uint8_t HOURS_PER_DAY = 24; // часов в сутках
uint8_t softSec, softMin, softHour = 0; // секунды, минуты, часы
uint32_t lastMSRead = 0;
bool EnableTimePrint = true;
static int sputchar(char c, FILE* f) {
return Serial.write(c);
}
void setup() {
Serial.begin(115200);
stdout = fdevopen(sputchar, NULL);
delay(100);
puts("Millis Clock. Version 0.01");
}
static void Tick(void) {
if (++softSec < SECONDS_PER_MINUTE) return;
softSec = 0;
EnableTimePrint = true;
if (++softMin < MINUTES_PER_HOUR) return;
softMin = 0;
if (++softHour == HOURS_PER_DAY) softHour = 0;
}
void loop() {
uint32_t now = millis();
if (now - lastMSRead >= READ_INTERVAL) {
lastMSRead = now;
Tick();
}
if (EnableTimePrint) {
EnableTimePrint = false;
printf("Time changed: %02u:%02u\n\r", softHour, softMin);
}
}
Дет! Я человеку уже все объяснил в #57
Нет. Объяснить то ты объяснил, но ЛЮДЯМ не понятно.
Я требую повторного объяснения!
Объяснить то ты объяснил, но ЛЮДЯМ не понятно.
А я вообще объяснений не увидел, там только код, и протокол, на основе которых каждый сам должен делать выводы. И никаких объяснений.
