Мигающие огни ARDUINO
Я создаю схему с помощью своего Arduino, чтобы, когда он получает «1» или «2» или «а» включает или выключает светодиоды. Но я хотел, чтобы свет блеснуть и не знаю как делать петли в петлях или если это то, что я нужно делать вообще. Любая помощь будет очень признательна, и код будет ниже.
//-----------------ЭЛЕКТРОНИКА--------------------------------//
int left = 11;
int stoP = 12;
int right = 8;
//переменные
int Received = 0;
int left_state =0;
int stoP_state = 0;
int right_state = 0;
void setup() {
Serial.begin(9600);
pinMode(left,OUTPUT);
pinMode(stoP,OUTPUT);
pinMode(right,OUTPUT);
}
void loop() {
if (Serial.available() > 0)
{
Received = Serial.read();
}
////////////////ЛЕВЫЙ//////////////////
if (left_state == 0 && Received == '1')
{
digitalWrite(left,HIGH);
Received = 0;
left_state = 1;
}
if (left_state == 1 && Received == '1')
{
digitalWrite(left,LOW);
Received = 0;
left_state = 0;
}
////////////////////////////////////
///////////////останавливаться////////////////
if (stoP_state == 0 && Received == 'a')
{
digitalWrite(stoP,HIGH);
Received = 0;
stoP_state = 1;
}
if (stoP_state == 1 && Received == 'a')
{
digitalWrite(stoP,LOW);
Received = 0;
stoP_state = 0;
}
/////////////////////////////////
///////////верно///////////////
if (right_state == 0 && Received == '2')
{
digitalWrite(right,HIGH);
Received = 0;
right_state = 1;
}
if (right_state == 1 && Received == '2')
{
digitalWrite(right,LOW);
Received = 0;
right_state = 0;
}
}
@Darwin, 👍-1
Обсуждение1 ответ
Как уже упоминал Крисл, вы должны использовать функцию millis
.
Помимо установки вывода ВЫСОКИМ, вы сохраняете переменную для каждого состояния для времени запуска и устанавливаете ее, когда соответствующее состояние установлено на 1:
unsigned long left_start_time = millis();
Затем в цикле вы проверяете каждое состояние, когда оно равно 1 (включено или мигает), и включаете или выключаете вывод, например:
if (left_state == 1)
{
digitalWrite((millis() - left_startTime % 400) < 400 / 2) ? HIGH : LOW);
}
Это означает, что первая половина периода 400 мс (время % 400 < 200) будет ВЫСОКОЙ, а вторая половина (время % 400 >= 200) будет НИЗКОЙ.
Улучшения:
- Не используйте 400, а постоянное значение.
- Не используйте отдельные переменные для левой/правой/остановки, а поместите их в структуру, сохраняя состояние, время, вывод и ключ активации ('1', '2', 'a') вместе.
- Если вы сделаете все вышеперечисленное, вы сможете упростить свою программу (и избежать дублирования кода), параметризовав свой код.
- Выполнить функцию цикла из основного цикла()
- Мигните светодиодом 5 раз с помощью цикла for
- Реализовать связь Visible Light с помощью Arduino
- Светодиодная лента RGB с дистанционным управлением Arduino, проблемы с яркостью/затемнением
- 4-битный счетчик вверх и вниз
- Скетч мигания ESP8266 не мигает светодиодом
- Объектно-ориентированное программирование Arduino
- Pro Micro ATMEGA32U4 не может загрузить
Вы можете отключить светодиоды через короткое время, используя
millis()
. Вы можете посмотреть на пример BlinkWithoutDelay, который поставляется с Arduino IDE., @chrisl