Схемы мигания светодиодов с несколькими светодиодами с помощью millis() без использования Delay()
Я хочу создать схемы мигания нескольких светодиодов с помощью функции millis()
. Я исследовал эту проблему, но не нашел идеального решения.
Я нашел один блог, но в нем используется массив светодиодных контактов; Мне нужно решение без массива. Будем признательны за любую помощь.
Это мой код, который я написал:
const int Button_code_1 = 2;
const int Button_code_2 = 3;
const int Button_code_stop = 4;
const int LED_one = 6;
const int LED_two = 8;
const int LED_three = 10;
const int LED_four = 12;
int buttonState_code_1 = 0;
int buttonState_code_2 = 0;
int buttonState_code_stop = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(Button_code_1,INPUT);
pinMode(Button_code_2,INPUT);
pinMode(Button_code_stop,INPUT);
pinMode(LED_Button_one,INPUT);
pinMode(LED_Button_two,INPUT);
pinMode(LED_Button_three,INPUT);
pinMode(LED_Button_four,INPUT);
pinMode(LED_one, OUTPUT);
pinMode(LED_two, OUTPUT);
pinMode(LED_three, OUTPUT);
pinMode(LED_four, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
buttonState_code_1 = digitalRead(Button_code_1);
Serial.println(buttonState_code_1);
buttonState_code_2 = digitalRead(Button_code_2);
Serial.println(buttonState_code_2);
delay(1000);
buttonState_code_stop = digitalRead(Button_code_stop);
if(buttonState_code_1==1)
{
pattern_one();
}
if(buttonState_code_2==1)
{
pattern_two();
}
}
void pattern_one()
{
digitalWrite(LED_one, LOW);
digitalWrite(LED_two, HIGH);
digitalWrite(LED_three, LOW);
digitalWrite(LED_four, LOW);
delay(3000);
digitalWrite(LED_one, LOW);
digitalWrite(LED_two, LOW);
digitalWrite(LED_three, LOW);
digitalWrite(LED_four, HIGH);
delay(3000);
digitalWrite(LED_one, HIGH);
digitalWrite(LED_two, LOW);
digitalWrite(LED_three, LOW);
digitalWrite(LED_four, LOW);
delay(3000);
digitalWrite(LED_one, LOW);
digitalWrite(LED_two, LOW);
digitalWrite(LED_three, HIGH);
digitalWrite(LED_four, LOW);
delay(3000);
}
void pattern_two()
{
digitalWrite(LED_one, HIGH);
digitalWrite(LED_two, LOW);
digitalWrite(LED_three, LOW);
digitalWrite(LED_four, LOW);
delay(3000);
digitalWrite(LED_one, LOW);
digitalWrite(LED_two, LOW);
digitalWrite(LED_three, HIGH);
digitalWrite(LED_four, LOW);
delay(3000);
digitalWrite(LED_one, LOW);
digitalWrite(LED_two, HIGH);
digitalWrite(LED_three, LOW);
digitalWrite(LED_four, LOW);
delay(3000);
digitalWrite(LED_one, LOW);
digitalWrite(LED_two, LOW);
digitalWrite(LED_three, LOW);
digitalWrite(LED_four, HIGH);
delay(3000);
}
Это мой пример кода с четырьмя светодиодами. Я написал этот код с помощью delay()
, поэтому, когда я хочу изменить шаблон, я не могу, потому что delay()
блокирует код.
Я изучил этот вопрос и нашел в качестве решения функцию millis()
. Как реализовать этот код с помощью функции millis()
?
@coder, 👍-2
Обсуждение1 ответ
Это один из эффектов для 3 (наборов) светодиодов из наброска светового будильника. :
void cycleEffect() {
static unsigned long previousMillis;
static uint8_t cycleCounter;
if (millis() - previousMillis > 100) {
previousMillis = millis();
digitalWrite(LEDS_CENTRAL_PIN, cycleCounter == 0);
digitalWrite(LEDS_LEFT_PIN, cycleCounter == 1);
digitalWrite(LEDS_RIGHT_PIN, cycleCounter == 2);
cycleCounter++;
if (cycleCounter == 3) {
cycleCounter = 0;
}
}
}
@Juray: вы можете заменить последние три строки более распространенным способом сделать это: cycleCounter = (cycleCounter + 1) % 3
(хотя я просто понимаю, что это может быть, когда производительность важнее), @Michel Keijzers
- Кнопка переключения переключает между операторами обращения с разблокированием кнопки
- Как запустить 4 светодиода последовательно на основе кнопочного входа?
- Как установить таймеры, используя миллисекунды на 3 датчиках PIR?
- Пытаюсь поддерживать мой основной код в рабочем состоянии, если ввод не будет LOW в течение определенного промежутка времени
- Несколько условий оператора if
- Светодиоды: разница между общим анодом и общим катодом
- Остановить мигание светодиодов
- Интеграция 2 кнопок для включения и выключения светодиода.
1. Почему без массива? Это странное требование. Это для школьных упражнений? 2. Вы не предоставили нам достаточно информации, чтобы помочь вам. Какова именно ваша цель и какая у вас проблема в ее реализации, @chrisl
У меня 9 светодиодов, и мне нужно мигать один за другим с задержкой в 3 секунды, и у меня есть 2 разных шаблона мигания и две кнопки для выбора шаблона и одна кнопка для остановки программы. поэтому для использования разных шаблонов я хочу, чтобы он не был массивом, иначе, если я получу больше шаблонов, я должен взять больше массива по одному для каждого шаблона. Надеюсь, это очистит запрос, @coder
Таким образом, ваш шаблон заключается в том, какой светодиод загорается следующим, а продолжительность всегда одинакова? Тогда чем плох один массив для каждого паттерна, а лучше один массив массивов (двухмерный массив)? Все еще кажется, что это простой подход. С двумерным массивом вы можете записать его таким образом, что добавление шаблона — это просто добавление другого шаблона в массив., @chrisl
Пожалуйста, поместите всю информацию в вопрос, отредактировав его. Также, пожалуйста, подробно опишите, где именно вы застряли. В чем проблема? Что именно вы не понимаете. Тогда мы сможем написать хороший ответ, соответствующий вашему вопросу., @chrisl
Я отредактировал свой вопрос., @coder