Остановка действия в void loop

Тема в разделе "Arduino & Shields", создана пользователем Матроскин, 14 июн 2018.

  1. Приветствую всех. После решенной проблемы с переменой и кнопкой следующая не заставила себя долго ждать.
    if (millis() - last_time > x ) {
    digitalWrite(red,1);
    Необходимо сделать так, чтобы при включении светодиода проходило 5 секунд, после чего он выключался совсем, а вместо него включался другой пин
     
  2. Airbus

    Airbus Оракул

    И что тут сложного?delay Вам в помощь и не надо мудрить
     
  3. Пробовал, но толку никакого
     
  4. Хотя, можно попробовать еще раз
     
  5. Ничего не произошло. Светодиод тупо все время горит

    Код (C++):
    int blue = 12;
    int green = 11;                // настройка портов
    int red = 10;
    int motor = 7;
    int buzzer = 6;

    const int start = 9;           // работа с кнопками
    const int choice = 8;
    int choice_status = 0;

    unsigned long last_time;       // работа с таймером
    int x = 5000;

    void setup() {
    pinMode(blue, OUTPUT);         // установка режима работы портов
    pinMode(green, OUTPUT);
    pinMode(red, OUTPUT);
    pinMode(start, INPUT);
    pinMode(choice, INPUT);
    pinMode(motor, OUTPUT);
    pinMode(buzzer, OUTPUT);

    int x = 5000;                  // установка времени
    }

    void loop() {

    choice_status = digitalRead(choice);
    if (choice_status == HIGH) {
      digitalWrite(green, 0);
      digitalWrite(buzzer, 0);
     
    }
    else {
      digitalWrite(green,1);
      digitalWrite(buzzer, 1);
      x = 10000;
      }

    if (millis() - last_time > x ) {
      digitalWrite(red,1);
        }
    delay(5000);
    digitalWrite(red,0);
    }

     
     
  6. BAR__MEN

    BAR__MEN Гуру

    Убрать: if(millis()- last_time > x ){
     
  7. Можно, но нельзя, т.к. на ней работает таймер
     
  8. Airbus

    Airbus Оракул

    Таймер чего?
     
  9. Запуска мотора
     
  10. BAR__MEN

    BAR__MEN Гуру

    Автор, проснись!
    В loop'е твоего кода ни разу не сказано про мотор.
     
  11. DIYMan

    DIYMan Гуру

    Решение в лоб:
    Код (C++):
    bool isOn = false;
    uint32_t onTimer = 0;

    void diodeOn()
    {  
        if(isOn)
        {
            onTimer = millis();
            return;
        }
       
        isOn = true;
        digitalWrite(LED_BUILTIN,HIGH);
       
    }

    void diodeCheck()
    {
        if(!isOn)
            return;
       
        if(millis() - onTimer > 5000)
        {
            isOn = false;
            digitalWrite(LED_BUILTIN,LOW);
            digitalWrite(OTHER_PIN,HIGH);
        }
    }

    void setup()
    {
        pinMode(LED_BUILTIN,OUTPUT);
        pinMode(OTHER_PIN,OUTPUT);
    }

    void loop()
    {
        if(buttonClicked)
            diodeOn();
       
        diodeCheck();
    }
     
  12. Извиняюсь, ошибся. Просто пока что делаю со светодиодом, пока все не заработает
     
  13. parovoZZ

    parovoZZ Гуру

    Чудилы, решается всё на таймере без задействования процессора вообще. Процессор вообще можно загнать в IDLE режим, а светодиод сам выключится. ДвоеШники.
     
  14. BAR__MEN

    BAR__MEN Гуру

    И как всегда, паровоз прибыл и оказалось что все "чудилы" и "двоеШники"....