Дуэльная мишень1

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

  1. Alex Balu

    Alex Balu Нуб

    boolean butt_flag = 0;
    boolean butt;
    boolean led_flag = 0;
    unsigned long last_press;
    byte LEDcounter = 4;
    void setup() {
    pinMode(2, INPUT_PULLUP); // сюда подключена кнопка
    Serial.begin(9600);
    pinMode(4, OUTPUT); // сюда подключен светодиод
    pinMode(5, OUTPUT); // сюда подключен светодиод
    pinMode(6, OUTPUT); // сюда подключен светодиод
    pinMode(7, OUTPUT); // сюда подключен светодиод
    pinMode(8, OUTPUT); // сюда подключен светодиод
    pinMode(9, OUTPUT); // сюда подключен светодиод
    digitalWrite(4, 0);
    digitalWrite(5, 0);
    digitalWrite(6, 0);
    digitalWrite(7, 0);
    digitalWrite(8, 0);
    digitalWrite(9, 0);

    }

    void loop() {
    butt = !digitalRead(2); // считать текущее положение кнопки

    if (digitalRead(9) == LOW && butt == 1 && butt_flag == 0 && millis() - last_press > 100) {
    butt_flag = 1;
    Serial.println("Button pressed");
    digitalWrite(LEDcounter, 1); // включить светодиод с текущим номером
    LEDcounter++; // увеличить номер для следующего включения
    last_press = millis();
    }

    else if (digitalRead(9) == HIGH && butt == 1 && butt_flag == 0 && millis() - last_press > 100) {
    digitalWrite(4, LOW);
    digitalWrite(5, LOW);
    digitalWrite(6, LOW);
    digitalWrite(7, LOW);
    digitalWrite(8, LOW);
    digitalWrite(9, LOW);
    last_press = millis();
    }

    if (butt == 0 && butt_flag == 1) {
    butt_flag = 0;
    Serial.println("Button released");
    last_press = millis();
    }
    }

    Данным кодом запускаю светодиоды нажатием кнопки. Затем одним нажатием кнопки все светодиоды гаснут. Далее необходимо, чтобы процесс запустился с начала. Но запустить с начала не получается. Может кто-нубидь помочь в этом деле?
     
  2. digitalWrite(4, LOW); .. digitalWrite(4, 0); А где же 1? всё 0 и 0, чему ж тут зажигаться?
    Прошу прощения... digitalWrite(LEDcounter, 1); не сразу увидел
     
  3. Daniil

    Daniil Гуру

    Там где вы выключаете светодиоды сбросьте счетчик светодиодов (LedCounter).
    Оформите код в теги, чтобы было легче читать.
    Поясните что означают переменные butt и but_flag? Если я правильно понял, то алгоритм такой:
    У вас включается программа - LedCounter=4.
    Нажимаете на кнопку светодиоды выключаются по очереди - LedCounter увеличивается до 9.
    Потом, если условие продолжает выполняется, "светодиоды" продолжают включаться - LedCounter растёт и более 9(хотя мы знаем, что на пинах более 9ого нет светодиодов).
    Когда вы отпускаете кнопку, то LedCounter уже равен Y, (т.к. он всё ещё рос и выполнялись операции блока включения светодиодов), и теперь выполняется блок выключения светодиодов, там вы выключаете их прямо указывая пины со светодиодами.
    Потом нажимаете на кнопку опять и ждёте, что светодиоды начнут включаться, но LedCounter=Y и этот Y не соответствует номеру пина со светодиодом (больше 9).
    (В принципе, если подождать, то переменная LedCounter должна переполниться и после 255 стать 0, а там и 4 не далеко...)
     
  4. Alex Balu

    Alex Balu Нуб

    butt - нажатие кнопки, butt_flag - отпускание кнопки
     
  5. parovoZZ

    parovoZZ Гуру

    в чем сакральный смысл двух взаимоисключающих переменных? И переменные надо обзывать более осмысленно.
     
  6. Alex Balu

    Alex Balu Нуб

    не зря у меня уровень НУБ!Только познаю, вот и спрашиваю о просвященных!
     
  7. Daniil

    Daniil Гуру

    Проблема то решена?
     
  8. Alex Balu

    Alex Balu Нуб

    Пока пытаюсь.
     
  9. Daniil

    Daniil Гуру

    приравняйте его 4
    После этого что-нибудь изменилось?
     
    Последнее редактирование: 26 июн 2018
  10. Alex Balu

    Alex Balu Нуб

    Да! Все отлично. Примного благодарен!