Мучения с millis. Наверное я что-то элемнтарное не пойму(

RVE

✩✩✩✩✩✩✩
19 Окт 2020
11
0
Добрый день! Уже несколько дней мучаюсь с этим кодом. Суть проекта - мигание адресной лентой, то есть задним фонарем велосипеда. Но не получается подружиться с millis. Оно просто не работает, даже в сериал ничего не пишется(
Наверное я что-то не так написал в коде...


C++:
#include <Wire.h>
uint32_t redTimer;
#define LED_PIN 6       // пин ленты
#define NUMLEDS 8       // кол-во светодиодов

#define ORDER_GRB
#define COLOR_DEBTH 1
#include <microLED.h>
LEDdata leds[NUMLEDS];  // буфер ленты типа LEDdata (размер зависит от COLOR_DEBTH)
microLED strip(leds, NUMLEDS, LED_PIN);  // объект лента
bool redLed; //флаг фонаря



void redLed_blink (void) {
  if (millis() - redTimer >= 100) {   // ищем разницу (100 мс)             
  redLed = redLed; //ивертируем флаг включения
      redTimer = millis();  // сброс таймера
}
}
void redLed_checker (void) { //проверка флага redLed
  if(redLed = true) {         //если 1
    strip.setBrightness(20);
    strip.fill(mCOLOR(RED));
    strip.show();
    Serial.println("on");  //печать в сериал о том что включенно
  }
  else{   //иначе выключить
    strip.clear();
    strip.show();
    Serial.println("off");  //печать в сериал о том что выключенно
  }
}


 
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

  // put your main code here, to run repeatedly:
void loop() {
   redLed_blink; //запуск функций
   redLed_checker;
}
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,263
1,301
Москва
Тут нет инвертирования:
redLed = redLed; //ивертируем флаг включения

Функции надо запускать с () , т.е.
redLed_blink(); //запуск функций
redLed_checker();

и еще, важное
if(redLed = true) { //если 1
тут не если у тебя, тут если удалось присвоить значение тру переменной redLed, а это всегда тру.
 
Изменено:
  • Лойс +1
Реакции: Arhat109 и RVE

RVE

✩✩✩✩✩✩✩
19 Окт 2020
11
0
Тут нет инвертирования:
redLed = redLed; //ивертируем флаг включения

Функции надо запускать с () , т.е.
redLed_blink(); //запуск функций
redLed_checker();

и еще, важное
if(redLed = true) { //если 1
тут не если у тебя, тут если удалось присвоить значение тру переменной redLed, а это всегда тру.
Я тебя обожаю! Спасибо огромное!!!!! СПАСИБО!!!!!!


вот так исправил)
C++:
#include <Wire.h>
uint32_t redTimer;
#define LED_PIN 6       // пин ленты
#define NUMLEDS 8       // кол-во светодиодов

#define ORDER_GRB
#define COLOR_DEBTH 1
#include <microLED.h>
LEDdata leds[NUMLEDS];  // буфер ленты типа LEDdata (размер зависит от COLOR_DEBTH)
microLED strip(leds, NUMLEDS, LED_PIN);  // объект лента
bool redLed;



void redLed_blink (void) {
  if (millis() - redTimer >= 100) {   // ищем разницу (100 мс)             
  redLed = !redLed; //ивертируем флаг включения
      redTimer = millis();  // сброс таймера
}
}
void redLed_checker() { //проверка флага redLed
  if(redLed == true) {         //если 1
    strip.setBrightness(20);
    strip.fill(mCOLOR(RED));
    strip.show();
    Serial.println("on");  //печать в сериал о том что включенно
  }
  else{   //иначе выключить
    strip.clear();
    strip.show();
    Serial.println("off");  //печать в сериал о том что выключенно
  }
}


 
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

  // put your main code here, to run repeatedly:
void loop() {
   redLed_blink(); //запуск функций
   redLed_checker();
}