Избавьте меня от 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
  2. NikitOS

    NikitOS Король шутов Администратор

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

    ostrov Гуру

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

    parovoZZ Гуру

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

    Укусит?
     
  5. Airbus

    Airbus Радиохулиган Модератор

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

    NikitOS Король шутов Администратор

    Его нет
     
  7. parovoZZ

    parovoZZ Гуру

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

    NikitOS Король шутов Администратор

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

    Airbus Радиохулиган Модератор

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