Как сделать счетчик, который считает количество активных входов?

Я хочу сделать указатель направления с использованием зеленых, желтых и красных светодиодов. Индикаторы должны меняться, когда активный вход1 достигает заданного значения, например:

  • Зеленый, если значение меньше 12;
  • Желтый, если значение больше 11 и меньше 20;
  • Красный, когда значение выше 19.

Я искал несколько дней, но не смог найти никаких ссылок.


1 Под активными входами я подразумеваю одновременное нажатие нескольких кнопок. Если кнопок 29, то при нажатии менее 12 из них загорится зеленый свет.

, 👍1

Обсуждение

Ссылка, которую вы ищете, будет чем-то на языке C или C++. Это описало бы базовую структуру «условных операторов», таких как if (x < 5) {...} и так далее., @jose can u c

Что вы подразумеваете под «активным вводом»? Какой тип ввода и что означает значение?, @Duncan C


1 ответ


Лучший ответ:

0

Вам нужно что-то вроде:

const int BUTTON_MAX = 29;
const int button[BUTTON_MAX] = { 5, 6, 7, ... };
const int GREEN_LED = 2;
const int YELLOW_LED = 3;
const int RED_LED = 4;
int current_led;

void setup()
{
   // Настраиваем входы (кнопки)
   for (int i = 0; i < BUTTON_MAX; i++) pinMode(button[i], INPUT_PULLUP);

   // Настройка выходов (светодиод)
   pinMode(GREEN_LED, OUTPUT);
   pinMode(YELLOW_LED, OUTPUT);
   pinMode(RED_LED, OUTPUT);

   // Начальное состояние
   current_led = GREEN_LED;
   digitalWrite(GREEN_LED, HIGH);
   digitalWrite(YELLOW_LED, LOW);
   digitalWrite(RED_LED, LOW);
}

void loop()
{
   // Подсчет количества активных кнопок
   int count = 0;
   for (int i = 0; i < BUTTON_MAX; i++) count += digitalRead(button[i]);

   // Сопоставляем количество активных кнопок со светодиодами
   int new_led;
   if (count < 12) 
      new_led = GREEN_LED;
   else if (count < 20) 
      new_led = YELLOW_LED;
   else 
      new_led = RED_LED;

   // Проверка изменений и обновлений
   if (new_led != current_led) {
      digitalWrite(current_led, LOW);
      digitalWrite(new_led, HIGH);
      current_led = new_led;
   }

   // Добавляем несколько миллисекунд для устранения дребезга
   delay(20);
}
,

Это кажется достойным ответом, игнорируя все, что означают «активные входы»..., @Duncan C

@DuncanC под активными входами я имею в виду одновременное нажатие нескольких кнопок, если кнопок 29, то при нажатии менее 12 из них загорится зеленый свет. Не уверен, что это поможет., @oliver sindahl

@oliversindahl спасибо за информацию. Это позволяет обновить ответ :), @Mikael Patel