Arduino включить случайный светодиод
У меня есть проект, в котором есть два варианта № 1. Случайным образом включите один светодиод из группы из 6 светодиодов (Релейная плата). № 2 случайным образом включите один светодиод из группы из 2 светодиодов (плата реле) Выбор нужной опции происходит с помощью переключателя.
Я нашел этот код в Интернете, который просто идеально подходит для 6 светодиодов, но я не знаю, как добавить в него выбор опций, как это сделать?
int timeShowRandom = 3000;
int timeShowDecision = 6000;
int timeBlink = 100;
int buttonPin = 2;
int buttonPress = false;
int randomNumber;
int previousNo = 0;
int timePassed = 0;
void setup() {
// Set button pin
pinMode(buttonPin, INPUT);
// Set output pins
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(8, OUTPUT);
pinMode(7, OUTPUT);
}
void getRandomNo() {
int rand = random(7,13);
if (rand == previousNo) {
getRandomNo();
} else {
randomNumber = rand;
previousNo = randomNumber;
}
}
void loop() {
if (digitalRead(buttonPin) == HIGH && buttonPress == false ) {
buttonPress = true;
} if (buttonPress == true && timePassed <= timeShowRandom) {
getRandomNo(); // Get random pin number
digitalWrite(randomNumber, LOW);
delay(timeBlink);
digitalWrite(randomNumber, HIGH);
delay(timeBlink);
timePassed = timePassed + (timeBlink * 2);
} else if(buttonPress == true) {
digitalWrite(random(7,13), LOW); // Set random pin on
delay(timeShowDecision); // For x seconds
buttonPress = false; // Set button to be enabled again
timePassed = 0;
}
else {
// Reset all output pins
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
digitalWrite(9, HIGH);
digitalWrite(8, HIGH);
digitalWrite(7, HIGH);
}
}
@tofi, 👍1
Обсуждение1 ответ
Различные предложения:
Создайте 2 различных массива номеров контактов: 1 для первой группы контактов реле и 2-й для второй группы контактов реле:
byte firstRelayPins[] = [7, 8, 9, 10, 11, 12];
byte secondRelayPins[] = [13, 14]; //Замените значения своими контактами реле
Напишите функцию, которая возвращает случайный индекс из одного или другого массива на основе bool:
byte randomPin(bool useSecondArray) {
int max;
int index;
if useSecondArray {
return secondRelayPins[random(sizeof(secondRelayPins))]; //Извлекает случайный вывод из массива
} else {
return firstRelayPins[random(sizeof(firstRelayPins))]; /Извлекает случайный вывод из массива
}
}
В зависимости от состояния вашего коммутатора установите значение useSecondArray при вызове этой функции, чтобы определить, какой вывод реле вы включаете.
Используйте возвращенное значение, чтобы установить нужный вывод реле.
В своем коде "отключить все" используйте массивы индексных выводов, а не жестко закодированные индексы.
Вы также должны переработать свой код, чтобы использовать millis ()
, а не использовать delay()
. (Найдите в разделе "Arduino мигает без задержки" руководство о том, как это сделать.)
Обратите внимание, что это приблизительный план того, что нужно сделать. Приведенный выше код, скорее всего, потребуется скорректировать в соответствии с вашими потребностями. Не ожидайте, что сможете скопировать/вставить его в свой проект.
Это помогает?, @Duncan C
- Питание светодиодной ленты - Сколько ампер?
- Как управлять встроенными светодиодами Arduino Nano 33 BLE Sense?
- Есть ли функция Adafruit для инвертирования цветов моего экрана для языка Arduino?
- Почему некоторые контакты Arduino Nano (D3, D4, A3, A4, A6, A7) не могут быть установлены на высокий уровень?
- Мигающий светодиод при движении сервопривода
- Не удалось преобразовать «digitalWrite(8u, 1u)» из «void» в «bool»
- Можно ли запитать 25 светодиодов через USB?
- Как погасить светодиод за определенное время с помощью FastLED
Светодиоды? Или реле? Вы, кажется, используете оба термина. Это не одно и то же., @Delta_G