Проблемы с millis вместо delay

Тема в разделе "Arduino & Shields", создана пользователем Sowe, 10 мар 2020.

  1. Sowe

    Sowe Нуб

    Всем привет.
    Из темы наверное немного понятно в чем проблема. Хочу заменить delay в коде на millis, чтобы можно было задавать через настройку время когда светодиод включен и время когда выключен. Перелапатил интернет, ничего годного по вопросу не нашел. От проги смог добиться только равномерного цикла (состояние включено = состояние выключено по времени). Пробовал реализовать через true/false, но светодиод просто горит и даже не думает блинковать. Код из ide приложу, человеко/часы понимаю.
    Код (C++):
    const int Led = 3;
    long Flash = 500;
    long Dark = 1000;

    void setup(){
    Serial.begin(9600);

    pinMode(Led, OUTPUT);
    digitalWrite(Led, HIGH);

    }

    uint32_t Ms, Ms1 = 0;
    bool State = true;

    void loop(){
    Serial.println(State);
    Ms = millis();

    if( State = true && ((Ms - Ms1) > Flash)){
      Ms1 = Ms;
      digitalWrite(Led, HIGH);
      State = false;}

    if( State = false && ((Ms - Ms1) > Dark)){
       Ms1 = Ms;
       digitalWrite(Led, LOW);
       State = true;}

    }
     
  2. b707

    b707 Гуру

    Ошибка - в синтаксисе условия
    почитайте, чем отличаются оператор сравнения и оператор присваивания.
     
    Sowe нравится это.
  3. akl

    akl Гуру

    ==

    кстати вроде как обычный компилятор на это ругается предупреждением. а вот ардуино почему-то нет.
     
    Sowe нравится это.
  4. Daniil

    Daniil Гуру

    кто варнинги читает?;)
     
  5. Sowe

    Sowe Нуб

    Спасибо большое, упустил этот момент) все заработало
     
  6. parovoZZ

    parovoZZ Гуру

    В ардуино специально выключено, чтоб кривые библы не плодили их. А то у юзера-новичка от их количества легкий шок случится.