эта патамушта радист обслуживал станки с точностью один микрон на два метра, это не рушилка какая, панимать нада
Вот же словоблуд, прости господи.
один стакан на два литра! ![]()
Лехаим! לחיים
по русски это просто “За жизнь!”, самый популярный тост в наших местах.
Еще вариант.
Создаем отдельную задачу и выполняем ее 1 раз в сек.
void myTask(void *pvParameters) {
TickType_t xLastWakeTime = xTaskGetTickCount();
const TickType_t xFrequency = pdMS_TO_TICKS(1000); // 1 секунда
for (;;) {
// Ждём ровно 1 секунду от предыдущего пробуждения
vTaskDelayUntil(&xLastWakeTime, xFrequency);
uint32_t seconds = xLastWakeTime * portTICK_PERIOD_MS / 1000;
Serial.printf("Task: прошло %u секунд\n", seconds);
}
}
void setup() {
Serial.begin(115200);
xTaskCreate(myTask, "SecTask", 2048, NULL, 1, NULL);
}
Не, ну на ардуинке это уже перебор ))
Подыму. Уже самим бы выжить.( В пору генератор доставать, так бензина нету.( В 2014-м только света небыло, а сейчас ни света, ни бензина. Ужос. И, главное, никаких предпосылок к улучшению.
Спасибо, понятно. Эта тема уже обсуждалась на форуме, но- “повторение-мать учения”, я, к примеру, нюансы подзабыл, сейчас ты помог вспомнить.
Я к тому, что код Деда, за один цикл(секунду) ни одной миллисекунды точно не накапливает, я даже вот проверил ,. “прикрутив” таймер TMR1:
Если бы на каждую секунду накапливалась хотя-бы одна миллисекунда, то на 17 минуте произошёл бы сбой. Однако его нет. Секунды идут “ноздря в ноздрю” с таймером. Микросекунды, может и накапливаются, но это норм. как по мне. Кому не нравится - купите РТС…
P.S.
Если в loop() добавить, скажем delay(300) - да, сбой произойдёт очень быстро, но это уже будет другой код)))
Не привыкайте к плохому. Блокирующий код и любой дурак напишет, пробуйте освоить работу с миллис, потом не раз пригодится (ИМХО)
https://forum.arduino.ru/t/primer-blink-migaem-svetodiodom/9361
хороший хозяин ничего не выбрасывает )))
От задачи зависит. Зачастую можно и блокирующий, если позволяют условия. Иногда это даже проще и нагляднее, нежели городить что то с неблокируемым миллисом.
у меня плохое - в 27й строке. ![]()
Согласен, стремление к лучшему должно быть у человеков…
Согласен. Иногда да..
Так это не блокирующий - это “ожидающий” код.
Он ничего не блокирует. Когда процессору нечего больше делать - он просто ждёт , когда придёт время)))
С этого момента по подробнее пожалуйста.
Пожалуйста
Ну и развитие метода
Какой парашют? Крутился перед зеркалом , но парашюта не видел за собой. Попрошу кого-нибудь посмотреть из рейхсканцелярии- может со зрением у меня не то..
Я не про это.
Я хочу уловить саму мысль данной фразы.
А что там улавливать? Вот классический блинк без делеев, неблокирующий
#define LED1_PIN 13
void setup()
{
pinMode(LED1_PIN, OUTPUT);
}
void loop()
{
static uint32_t led1_timer = millis(); // таймер работы светодиода
static uint32_t led1_interval = 500; // интервал работы светодиода в милисекундах
if (millis() - led1_timer >= led1_interval)
{
static bool led_state = false; // флаг состояния светодиода
led1_timer = millis();
led_state = !led_state;
digitalWrite(LED1_PIN, led_state);
}
}
А вот с делеями, блокирующий
#define LED1_PIN 13
void setup()
{
pinMode(LED1_PIN, OUTPUT);
}
void loop()
{
digitalWrite(LED1_PIN, true);
delay(500);
digitalWrite(LED1_PIN, false);
delay(500);
}
Ну и какой проще написать?
Ну мы же уже говорили… И не раз.
inline void toggle(int pin) { digitalWrite(pin, !digitalRead(pin)); }
void loop() {
toggle(LED1_PIN);
delay(500);
}
Это не будет работать - pinMode() где? ))
Ну в сетапе же)
А сетап где? Я ж говорю - работать не будет ))
