Небольшой скетч по работе с ШИМ

Руставелли

✩✩✩✩✩✩✩
20 Апр 2024
2
0
Уважаемые форумчане, всем доброго времени. Подскажите пожалуйста абсолютному чайнику на пути программирования для ардуино. Хочу собрать приборчик для автоматического управления световым оборудованием в авто и сразу на этапе макетированния упёрся в проблему. Суть прибора и скетча следующая: при появлении на 8 пине логического нуля на 5 пине должен формироваться шим с плавным повышением мощности до 50 % и последующим удержанием данной нагрузки на уровне 50%, а при подче на 8 ногу логической единицы генерация шим должна сразу прекратиться. Собственно проблема следующая: все условия выполняются, шим есть, включенме/отключение по состоянию 8го пина есть. Но при прохождения программы до конца шим перезапускается и лампа плавно разгорается, тухнет и сново разгорается бесконечно. Понимаю, что вопрос абсолютно глупый, но как убрать эту цикличность. Ардуинку только постигаю, но очень интересно. Нагрузка развязана на мосфет модуле. Скетч ниже, заранее спасибо.



C++:
const int loadPin = 5; // Пин, к которому подключена нагрузка

const int controlPin = 8; // Пин для управления включением/выключением нагрузки

int brightness = 0; // Переменная для управления яркостью нагрузки



void setup() {

  pinMode(loadPin, OUTPUT); // Устанавливаем пин на вывод

  pinMode(controlPin, INPUT); // Устанавливаем пин на ввод

}



void loop() {

  if (digitalRead(controlPin) == LOW) {

    // Включение нагрузки с плавным повышением яркости до 50%

    if (brightness < 128) {

      brightness += 2;

      analogWrite(loadPin, brightness);

      delay(80);

    }

  } else {

    // Выключение нагрузки

    analogWrite(loadPin, 0);

    brightness = 0; // Сбрасываем значение яркости

  }

}
 
Изменено:

Bruzzer

★★★✩✩✩✩
23 Май 2020
370
112
@Руставелли,
Вставьте код правильно. В окне редактирования сообщения есть значок </>

Код должен работать так как вы описали - (если на controlPin действительно приходят 0 и +)
Если цикличность происходит при постоянно нажатой кнопке, т.е. на controlPin всегда 0, то скорее всего Ардуино перезапускается по каким то причинам. Добавьте в Setup моргание встроенным светодиодом на пару секунд, чтобы увидеть факт перезапуска, или вывод в Serial сообщения "==START==".
 
  • Лойс +1
Реакции: Руставелли

Руставелли

✩✩✩✩✩✩✩
20 Апр 2024
2
0
@Bruzzer,добрый день. Спасибо большое, разобрался. Совсем забыл про подтяжку 8го пина к земле. То есть не было чистого логического нуля. Сделал подтяжку всё заработало, как задумывалось. Хорошего дня.
 
Изменено: