Включение устройства по кнопке с неизвестным пином

Необходимо по кнопке включить / выключить устройство.
Причем программисту неизвестно к какому пину подключили это устройство.
Что исправить в этом коде, чтоб независимо от пина включилось устройство?

int LED ;
int i;
int BUTTON=2;
int val=0;
void setup()
{
for (i=1; i<=13;i++);{
  LED=i;
  pinMode(LED, OUTPUT); }
pinMode(BUTTON, INPUT);
}
void loop()
{ for (i=1; i<=13;i++);{
  LED = i; 
val=digitalRead(BUTTON);
if (val==HIGH)
{
digitalWrite(LED, HIGH);
}
else
{
digitalWrite(LED, LOW);
}
}
}

стр.13 ???

При данных вводных - никакие исправления не приведут к гарантированному результату.

Прям представляю злорадную улыбку препода:

" - Ага… А устройство подключено к GND - не сдал!!"

1 лайк

@Lopatin, у вас ведь код уже есть… вопрос-то в чем? Работает?

Это первая публикация Lopatin — поприветствуем его в нашем сообществе!

думаю, последняя

Код есть, только он не работает. При указании конкретного пина светодиод загорается
А мне нужно, чтоб загорался при любом пине

Если ещё и ; расставите правильно, то уже будет хорошо)))

1 лайк

Для начала сформулируйте задание четко.

  • К каким пинам может быть подключено устройство - укажите диапазон или список.
  • Светодиод должен гореть пока кнопка нажата? Или при первом нажатии должен включится, при втором выключится?

Может проблема в том, что вы кнопку мало держите ? :slight_smile:

для начала строку 10 перенести на строку после 6
в простейшем случае так видимо:

int BUTTON = 2;

void setup()
{
  pinMode(BUTTON, INPUT);
  for (int i = 1; i <= 13; i++)
  {
    pinMode(i, OUTPUT);
  }
}

void loop()
{
  for (int j = 1; j <= 13; j++) {
    if (digitalRead(BUTTON))
      digitalWrite(j, !digitalRead(j));    
  }
  delay(300);
}

ну вот, началось :slight_smile:
Давайте теперь любому лентяю, который даже букв не удосужился выучить - будем сообща писать поэмы.

ТС бери мой код, точно пятёрку получишь.

constexpr uint8_t BUTTON=2;
void setup() {
  for (uint8_t i=3; i<=13;i++)
    pinMode(i, OUTPUT);
  pinMode(BUTTON, INPUT);
}
void loop() { 
  static bool click = 0;
  click = digitalRead(BUTTON) ? 1 : 0;
  for (uint8_t i=3; i<=13; i++) 
     digitalWrite(i, click);
  delay(20);
}

если сможет объяснить, но твой кот не работает по схеме нажал включил, нажал выключил

Может кнопка с фиксацией, кто же его знает.

так на фото тактовая…

Представь, что тебя на экзамене спросили - зачем тут статик? Что ответишь?
Добавка - я уж не говорю про тернарный оператор…

В этом и “фишка”.

троллишь молодёжь )))

ааааа…
я в такие игры не играю.
Если вы у меня видите ошибку в коде - можете быть уверены, она настоящая, а не посаженная специально.

Я бы спросил зачем там ноль…