Цикл Arduino не останавливается - только с меньшими счетчиками. Ардуино Нано Каждый

Я не могу объяснить себе, почему этот код в некоторых случаях работает правильно, а в некоторых - нет. Вот такая ситуация:

Я пытаюсь переключить реле с помощью Arduino Nano. Поэтому в качестве ориентира я взял пример "Blink". Он должен включиться примерно на 5 минут и выключиться примерно на 25 минут. Вот код:

      // the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(2, OUTPUT);               // sets PIN 2 as switcher for the relay
}

// the loop function runs over and over again forever
void loop() {
  int count = 0;
  int run_pump = 300;               // 5 Min run
  int stop_pump = 1500;             // 25 Min stop
  digitalWrite(LED_BUILTIN, LOW);   // turn the LED off (HIGH is the voltage level)
  digitalWrite(2, HIGH);            // turn the pump on
  while(count < run_pump) {
    count++;
    delay(1000);                    // wait for a second
  }
  
  count = 0;              
  digitalWrite(LED_BUILTIN, HIGH);  // turn the LED on by making the voltage LOW
  digitalWrite(2, LOW);             // turn the pump off
  while(count < stop_pump) {
    count++;
    delay(1000);                    // wait for a second
  }
}

если я запустил этот код на Arduino, он просто включит реле навсегда. НО: Если я установил run_pump а также stop_pumpпримерно на 10 сек. он будет работать нормально! Есть ли объяснение, почему это не работает с большими счетчиками? Это так сбивает с толку ....

так что этот код здесь работает абсолютно нормально, но почему приведенный выше код не работает?

      // the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(2, OUTPUT);               // sets PIN 2 as switcher for the relay
}

// the loop function runs over and over again forever
void loop() {
  int count = 0;
  int run_pump = 5;               // 5 sec run
  int stop_pump = 10;             // 10 sec stop
  digitalWrite(LED_BUILTIN, LOW);   // turn the LED off (HIGH is the voltage level)
  digitalWrite(2, HIGH);            // turn the pump on
  while(count < run_pump) {
    count++;
    delay(1000);                    // wait for a second
  }
  
  count = 0;              
  digitalWrite(LED_BUILTIN, HIGH);  // turn the LED on by making the voltage LOW
  digitalWrite(2, LOW);             // turn the pump off
  while(count < stop_pump) {
    count++;
    delay(1000);                    // wait for a second
  }
}

Надеюсь, у кого-то есть подсказка .... Спасибо! Том

1 ответ

Хорошо, ребята, я решил. Проблема заключалась в дешевом реле, которое пыталось связаться с Arduino ... Замена его на лучшее решила всю проблему. Спасибо за идею со светодиодом, это заставило покатиться по камешкам ... :)

Другие вопросы по тегам