Избавьте меня от delay()

Тема в разделе "Arduino & Shields", создана пользователем Леонид_19.03.2008, 15 май 2018.

  1. У меня в скетче нужно избавиться от функции delay() в строке 48. Она во встроенной функции, так что осторожно.
    Код (C++):
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    #include <Strela.h> // подключаем библиотеку для работы с платформой "Strela"

    boolean butt_flag = LOW; // флажок кнопки
    boolean lamp_flag = LOW; // флажок ламп

    unsigned long last_press = 0; // время последнего нажатия

    byte lamps[] = {L4, L3, L2, L1}; // порты ламп

    int pin = 0; // переменная для бегущего огонька

    LiquidCrystal_I2C lcd(LC_ADDR, LCEN, LCRW, LCRS, LC4, LC5, LC6, LC7);

    void setup() {
      uPinMode(S1, INPUT); // кнопку - на вход
      uPinMode(BUZZER, OUTPUT);

      // настройка всех ламп на выход
      for (int i = 0; i <= 3; i++) uPinMode(lamps[i], OUTPUT);

      lcd.begin(8, 2);
      lcd.setCursor(1, 0);
      lcd.print("Hello,");
      lcd.setCursor(1, 1);
      lcd.print("friend");
      delay(2000);
      lcd.clear();
    }

    void loop() {
      // если кнопка нажата и нажата не была
      if (uDigitalRead(S1) && butt_flag == LOW && millis() - last_press > 200) {
        lamp_flag = !lamp_flag; // инвертируем флажок лампы
        butt_flag = HIGH; // записываем, что кнопка была нажата
        last_press = millis(); // записываем время последнего нажатия
      }

      // если кнопка не нажата и нажата была
      if (uDigitalRead(S1) == LOW && butt_flag) butt_flag = LOW; // записываем, что кнопка нажата не была

      // если флажок лампы
      if (lamp_flag) {
        tone(BUZZER, 350);
        lcd.clear();
        lcd.setCursor(2, 0);
        lcd.print("True");
        // бегущий огонёк с 4-мя лампами...
        uDigitalWrite(lamps[pin], HIGH);
        delay(125);
        uDigitalWrite(lamps[pin], LOW);
        pin++;

        if (pin > 3) pin = 0;
      }
      // иначе
      else {
        noTone();
        lcd.setCursor(1, 0);
        lcd.print("False");

        // выключаем все лампы
        for (int i = 0; i >= 3; i++) {
          uDigitalWrite(lamps[i], LOW);
        }
      }
    }
     
    Последнее редактирование: 18 май 2018 в 18:29
  2. BAR__MEN

    BAR__MEN Гуру

    Моя логика здесь не работает...
    А нельзя ли уточнить, зачем?))))
     
  3. ostrov

    ostrov Гуру

    Значит до этого была отпущена.
     
  4. parovoZZ

    parovoZZ Гуру

    Ну избавляйся, раз нужно.

    Укусит?
     
  5. Airbus

    Airbus Оракул

    Смысл?
     
    BAR__MEN нравится это.
  6. BAR__MEN

    BAR__MEN Гуру

    Его нет
     
  7. parovoZZ

    parovoZZ Гуру

    смысл не схлопотать парашу по информатике.
     
  8. А зачем тебе удалять?
     
  9. Тормозить не будет?
     
  10. Спасибо, я дурак
     
    Airbus нравится это.
  11. А то думал про
    Код (C++):
    millis()
    .
     
  12. Можешь просто комментарии не читать
     
  13. BAR__MEN

    BAR__MEN Гуру

    Я их редко читаю....
     
  14. Airbus

    Airbus Оракул

    В данном случае нет.