программирование светодиода ардуино, включение и выключение

Я хочу, чтобы светодиод загорелся в начале и оставался таким некоторое время, а затем погас, поэтому я написал:

int led=13;
void setup() {
  pinMode(led,OUTPUT);    
}
void loop() {
    digitalWrite(led,HIGH);
    delay (5000);
    digitalWrite (led,LOW);
}

насколько я понимаю, он должен начинаться с высокого уровня, то есть с digitalWrite(led,HIGH)... и оставаться в таком состоянии в течение задержки 5000 мкс (5000), затем он должен выключиться с помощью digitalWrite(led,LOW). но почему он не работает, сначала он гаснет на несколько секунд, а затем остается включенным... что я понимаю неправильно в этих простых шагах ????

, 👍0

Обсуждение

при сбросе Arduino он начинает выполнять код. ... он выполняет весь код в void setup() только один раз, затем он выполняет весь код в void loop() и повторяет выполнение кода в void loop() снова и снова, пока вы не сбросите Arduino или не выключите его. .... если вы хотите, чтобы Arduino сделал что-то только один раз, то **не** помещайте код в void loop(), @jsotola

Спасибо, можете ли вы ответить на мой другой вопрос здесь. https://arduinoprosto.ru/q/47858/arduino-led-flashes-with-one-button-press/48164?noredirect=1#comment95932_48164, @sumer fattoum


3 ответа


1

Он немедленно зацикливается, от низкого уровня записи до высокого уровня записи. Добавьте вторую задержку после низкого уровня, чтобы цикл не начался снова.

,

Спасибо, можете ли вы объяснить мне этот цикл и почему он так работает? Насколько я понимаю, он должен заканчиваться отключением цифровой записи, потому что это последний шаг в программе., @sumer fattoum

Я добавил таймер после низкого уровня... но происходит вспышка... она повторяется... но я хочу, чтобы она сначала была включена в течение определенного времени, а затем выключалась и оставалась выключенной., @sumer fattoum


-1

Эта задержка не даёт ничего, кроме траты 5 секунд... вам нужно сделать так:

void loop() {
    digitalWrite(led,HIGH);
    delay (2500);
    digitalWrite (led,LOW);
    delay (2500);
}

Код выполняется последовательно... в вашем коде после выключения светодиода он немедленно включает его снова и ждет 5 секунд... это настолько объемно, что вы этого не замечаете.

,

Я применил это, но оно мигает, не останавливаясь... Я хочу, чтобы оно останавливалось через несколько секунд после включения., @sumer fattoum

Спасибо за объяснение, что это так быстро, что я не замечу., @sumer fattoum

Функция цикла, как следует из её названия, будет повторяться снова и снова. Вам необходимо установить флаг, например, целое число, которое подсчитывает количество выполнений цикла. Затем добавьте оператор if для проверки и выполнения., @Saeid Yazdani


1

«Цикл()» будет повторяться снова и снова, включая и выключая светодиод. Если вы хотите включить светодиод только один раз, поместите команды для включения светодиода в раздел «setup()»:


void setup() {
    pinMode(led,OUTPUT);
    digitalWrite(led,HIGH);
    delay (5000);
    digitalWrite (led,LOW);
} 
void loop() {
}

Другой способ — добавить переменную для подсчёта количества вспышек светодиода. Я скопировал следующий скетч отсюда отсюда


int ledPin =  13;    // Светодиод подключен к цифровому выводу 13
int alreadyBlinked = 0;

// Метод setup() запускается один раз при запуске скетча
void setup()   {
pinMode(ledPin, OUTPUT);    // инициализируем цифровой вывод как выход:
}

// метод loop() выполняется снова и снова,
// пока у Arduino есть питание
void loop()                    
{
     if(alreadyBlinked == 0)
     {
            digitalWrite(ledPin, HIGH);   // включаем светодиод
            delay(5000);                  // ждем пять секунд
            digitalWrite(ledPin, LOW);    // выключить светодиод
            alreadyBlinked = 1;
      }
}

Если переменная «alreadyBlinked» установлена в значение 1, светодиод больше не включится.

,

thnx, я понял, я просто хотел понять структуру программы и инструкции, теперь для большего понимания цикла я добавил once void loop(){ digitalWrite(led,HIGH); digitalWrite(led,LOW);} и один раз высокий, затем низкий, но почему в обоих случаях светодиод всегда остается включенным ???, @sumer fattoum

Вы проверили имена переменных? Светодиод правильно подключен? Один вывод светодиода должен быть подключен к выходу Arduino, а другой — к земле. В первом варианте digitalwrite(led,LOW) — последняя команда, поэтому светодиод должен оставаться выключенным после настройки. Во втором варианте _digitalWrite(ledPin, LOW)_ выполняется до _alreadyBlinked = 1_, и с этого момента светодиод больше не загорается. Завтра попробую этот скетч., @mguima

да, я проверил. теперь я понял, @sumer fattoum