функциональность:Arduino Light не отображается один раз, а в непрерывной последовательности
пользователь нажимает на красную кнопку купола Красный купол Кнопка, то предположим, чтобы сигнализировать о том, что buttonState ВЫСОКОЕ и на последовательном мониторе, он должен печатать «1» каждые 100 мс и после задержки 5 секунд: светодиодный индикатор будет находиться в состоянии HIGH, которое загорится примерно на 10 секунд, а после этого светодиод переключится в состояние «НИЗКИЕ», что означает светодиод будет выключен.
Следовательно, поток:
Правильное поведение:
начальное state-> Последовательный монитор показывает "0", когда пользователь нажмите кнопку -> Последовательные монитор отображает "1" на каждые 100 мс и после задержки 10 секунд состояние светодиода будет ВЫСОКИЙ.
и после задержки 10 секунд индикатор состояния будет низкой, дисплей серийный монитор еще на «1», на каждые 100 мс, чтобы сигнализировать о том, что buttonstate кнопки красного купола еще при высоких
Выпуск:
Текущее Поведение: начальное state-> Последовательный монитор показывает «0», когда пользователь нажмите кнопку -> Последовательный монитор отображает один «1», а не д воспроизведение непрерывного «1» с, но после задержки 10 секунд состояние светодиода будет ВЫСОКИЙ.
и после задержки 10 секунд состояние светодиода будет низким. В этот момент светодиод снова не должен быть HIGH, однако после задержки 10 секунд состояние светодиода становится HIGH и LOW после 10 секунд. Затем он становится петлей. дисплей последовательного монитора по-прежнему находится на «1», чтобы сигнализировать о том, что кнопка кнопки красного купола по-прежнему находится на уровне HIGH
Следовательно, как включить, когда кнопка нажата, будет отображаться непрерывный «1 »и задержкой в 10 секунд, светодиод будет состоять из HIGH и еще 10 с задержек, состояние светодиода будет низким. и индикатор остается состояние LOW затем даже, хотя, buttonstate находится на высоком
Код:
const int buttonPin = 2; //the number of the pushbutton pin
const int Relay = 4; //the number of the LED relay pin
uint8_t stateLED = LOW;
uint8_t btnCnt = 1;
int buttonState = 0; //variable for reading the pushbutton status
int buttonLastState = 0;
int outputState = 0;
void setup() {
Serial.begin(9600);
pinMode(buttonPin, INPUT);
pinMode(Relay, OUTPUT);
digitalWrite(Relay, LOW);
}
void loop() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
// Check if there is a change from LOW to HIGH
if (buttonLastState == LOW && buttonState == HIGH)
{
outputState = !outputState; // Change outputState
}
buttonLastState = buttonState; //Set the button's last state
// Print the output
if (outputState)
{
switch (btnCnt++) {
case 100:
stateLED = LOW;
digitalWrite(Relay, HIGH); // after 5s turn on
break;
case 200:
digitalWrite(Relay, LOW); // after 10s turn off
break;
case 102: // small loop at the end, to do not repeat the cycle
btnCnt--;
break;
}
Serial.println("1");
}else{
Serial.println("0");
if (btnCnt > 0) {
// disable all:
stateLED = LOW;
digitalWrite(Relay, LOW);
}
btnCnt = 0;
}
delay(100);
}
что uint8_t? и мог ли я использовать Serial.begin (9600) вместо (57600)? это имеет значение? и поэтому я могу удалить весь случай 0, так как мне не нужно инициировать stateLED = HIGH в случае 0? – Luke
Я протестировал, и я также отредактировал код. Я изменил Serial.begin (57600) на Serial.beign (9600), это позволяет мне Serial.printIn («0») или («1»). Я также изменил следующий код, так как ваше предложение будет только включать светодиод в состояние HIGH, когда я должен постоянно нажимать кнопку, иначе это будет LOW. Код, который я изменил, позволяет мне нажимать кнопку один раз, а «1» будет непрерывным без необходимости непрерывного нажатия кнопки. думаю, моя кнопка не является кнопкой состояния 2, поэтому мне нужно создать состояние переключения. – Luke