Несколько кнопок для управления одним и тем же светодиодом в разное время.
Я только изучаю Arduino, это, безусловно, кривая обучения.
Использование встроенного светодиода Я хочу использовать две кнопки, чтобы светодиод мигал в разное время.
Я не уверен, чего не хватает в коде, так как нажатие BUTTON2 дает то же время, что и BUTTON.
Мы будем очень признательны за любую помощь.
const byte BUTTON = 2;
const byte BUTTON2 = 3;
const byte LED = 13;
unsigned long buttonPushedMillis;
unsigned long ledTurnedOnAt;
unsigned long turnOnDelay = 500;
unsigned long turnOffDelay = 500;
unsigned long turnOnDelay2 = 1000;
unsigned long turnOffDelay2 = 1000;
bool ledReady = false;
bool ledState = false;
void setup() {
pinMode(BUTTON, INPUT_PULLUP);
pinMode(BUTTON2, INPUT_PULLUP);
pinMode(LED, OUTPUT);
digitalWrite(LED, LOW);
}
void loop() {
unsigned long currentMillis = millis();
if (digitalRead(BUTTON) == LOW) {
delay(50);
buttonPushedMillis = currentMillis;
ledReady = true;
}
if (ledReady) {
if ((unsigned long)(currentMillis - buttonPushedMillis) >= turnOnDelay) {
digitalWrite(LED, HIGH);
ledState = true;
ledTurnedOnAt = currentMillis;
ledReady = false;
}
}
if (ledState) {
if ((unsigned long)(currentMillis - ledTurnedOnAt) >= turnOffDelay) {
ledState = false;
digitalWrite(LED, LOW);
}
}
{
unsigned long currentMillis = millis();
if (digitalRead(BUTTON2) == LOW) {
delay(50);
buttonPushedMillis = currentMillis;
ledReady = true;
}
if (ledReady) {
if ((unsigned long)(currentMillis - buttonPushedMillis) >= turnOnDelay2) {
digitalWrite(LED, HIGH);
ledState = true;
ledTurnedOnAt = currentMillis;
ledReady = false;
}
}
if (ledState) {
if ((unsigned long)(currentMillis - ledTurnedOnAt) >= turnOffDelay2) {
ledState = false;
digitalWrite(LED, LOW);
}
}
}
}
\\
@Tom109, 👍1
Обсуждение1 ответ
▲ 1
Вы слишком усложняете свою программу, что вредит ей.
Вместо того, чтобы менять свой блинк-код в зависимости от того, какая кнопка нажата, просто заставьте кнопку изменять параметры блинк-кода и придерживайтесь только одного блинк-кода.
Это означает наличие только одного набора переменных мигания, которые использует ваш код мигания, а затем код вашей кнопки просто меняет значения, содержащиеся в этих переменных.
,
@Majenko
Смотрите также:
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Пожалуйста, правильно отформатируйте свой код (отступите все 4 начальных символа и завершите его тремя обратными галочками в отдельной строке)., @Majenko