Wolf_Yout
@Wolf_Yout

Не работает таймер на основе millis(), где ошибка?

#include <SPI.h>
#include <GyverMAX7219.h>
#include <microDS3231.h>
#include <AHT10.h>

byte timemod = 1;

unsigned long last_time = 0;

int pinCS = 9;
int numberOfHorizontalDisplays = 4; // теперь у нас по-горизонтали 6 матриц
int numberOfVerticalDisplays = 1; // а по-вертикали, по-прежнему, одна

MicroDS3231 rtc;
AHT10Class aht10;

MAX7219 < 4, 1, 9 > mtrx;


void setup() {
  aht10.begin();
  mtrx.begin();
  mtrx.setBright(2);
  mtrx.setScale(0.50);
  mtrx.print("Хай!");
  mtrx.update();
  delay(1000);
  mtrx.clear();
  mtrx.setCursor(0,0);
  mtrx.print("Сек...");
  mtrx.update();
  delay(3000);
  mtrx.clear();
  mtrx.update();
  delay(300);
}

void loop() {
  mtrx.clear();
  mtrx.setCursor(2,0);
  mtrx.print(rtc.getHours());
  mtrx.setCursor(19,0);
  mtrx.print(rtc.getMinutes());
  mtrx.update();
  if (millis() - last_time >= 1000) {
    timemod = !timemod;
    if (timemod == 1) {
      mtrx.circle(16, 1, 1, 1);
      mtrx.circle(16, 5, 1, 1);
      mtrx.update();
    } 
    if (timemod == 0) {
      mtrx.clear();
    }
  }
}

Центральные светодиоды просто очень быстро моргают, настолько быстро что это еле заметно, как исправить?
  • Вопрос задан
  • 215 просмотров
Решения вопроса 1
EreminD
@EreminD
Кое-что умею
1. unsigned long last_time = 0;
2. if (millis() - last_time >= 1000)

Получается число мс (минус 0) >= 1000 всегда

Полагаю, вы хотите где-то вписывать, что last_time = millis()
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@kalapanga
В примерах к Arduino IDE есть BlinkWithoutDelay.ino. Один в один Ваша задача. Сравните и сразу увидите, где и что пропустили.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы