Как сделать счетчик, который считает количество активных входов?
Я хочу сделать указатель направления с использованием зеленых, желтых и красных светодиодов. Индикаторы должны меняться, когда активный вход1 достигает заданного значения, например:
- Зеленый, если значение меньше 12;
- Желтый, если значение больше 11 и меньше 20;
- Красный, когда значение выше 19.
Я искал несколько дней, но не смог найти никаких ссылок.
1 Под активными входами я подразумеваю одновременное нажатие нескольких кнопок. Если кнопок 29, то при нажатии менее 12 из них загорится зеленый свет.
@oliver sindahl, 👍1
Обсуждение1 ответ
Лучший ответ:
Вам нужно что-то вроде:
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
- Как объявить массив переменного размера (глобально)
- Программирование Arduino с использованием Python, а не C/C ++
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Как справиться с rollover millis()?
- Является ли использование malloc() и free() действительно плохой идеей для Arduino?
- Можно ли сделать несколько функций loop() с помощью Arduino Uno?
- Какие накладные расходы и другие соображения существуют при использовании структуры по сравнению с классом?
- устаревшее преобразование из строковой константы в 'char*'
Ссылка, которую вы ищете, будет чем-то на языке C или C++. Это описало бы базовую структуру «условных операторов», таких как
if (x < 5) {...}
и так далее., @jose can u cЧто вы подразумеваете под «активным вводом»? Какой тип ввода и что означает значение?, @Duncan C