2016-08-23 2 views
0

функциональность:Ардуино Кнопка не на непрерывной последовательной «1»

Последовательный монитор печати «0» на каждые 100 мс, сигнализации о том, что buttonState является низким.

Однако, когда пользователь нажимает кнопку красного купола Red Dome Button, предполагается, что кнопкаState HIGH и на последовательном мониторе должна печатать «1» каждые 100 мс, пока пользователь снова не нажмет кнопку красного купола на что кнопкаState LOW и серийный монитор печатает «0».

Выпуск:

Последовательный монитор выводит «0» на каждые 100 мс на начальном этапе, и когда я нажмите на красную кнопку купола, то buttonState возвращает ВЫСОКИЙ и на последовательном мониторе выводит «1 ». Тем не менее, серийный «1» не удерживается и сразу возвращается к «0».

Последовательный «1» будет отображаться только в последовательном мониторе, когда я нажимаю на кнопку непрерывно.

Значение:

Правильное поведение:

начальное state-> серийный монитор будет выводить все последовательные 0, пока пользователь не нажмет на кнопку, то серийный монитор будет выводить все последовательные 1 до пользователь нажимает кнопку снова, то выход будет меняться к серийному 0

Текущее поведение:

я nitial state-> последовательный монитор выводит все последовательные 0 до тех пор, пока пользователь не нажмет кнопку, после чего последовательный монитор выдает серийный номер 1, но сразу же, серийный номер вернется к 0

Следовательно, как включить последовательное состояние, чтобы оно оставалось на последовательный 1 после того, как я нажму кнопку, и серийный номер будет показывать только 0, только когда я снова нажму кнопку? Мне нужна помощь в этом. Спасибо

Код:

const int buttonPin = 2;  // the number of the pushbutton pin 

// variables will change: 
int buttonState = 0;   // variable for reading the pushbutton status 

void setup() { 
    // initialize the pushbutton pin as an input: 
    pinMode(buttonPin, INPUT); 
    Serial.begin(9600); // Open serial port to communicate 
} 

void loop() { 
    // read the state of the pushbutton value: 
    buttonState = digitalRead(buttonPin); 

    // check if the pushbutton is pressed. 
    // if it is, the buttonState is HIGH: 
    if (buttonState == HIGH) { 
    Serial.println("1"); 
    } 
    else { 
    Serial.println("0"); 
    } 
delay(100); 
} 

ответ

1

Это кажется, что ваша кнопка получает неопрессованные после ее отпускания (не так, как кнопки на 2 состояний). Поэтому вам нужно создать свою собственную переменную состояния, которая переключается при нажатии кнопки.

Предположим, что вы хотите изменить состояние при обнаружении HIGH с кнопки. Это означает, что вам необходимо обнаружить изменение от LOW до HIGH, а не только в режиме HIGH. Чтобы сделать это, вам нужно сохранить последнее состояние кнопки. Кроме того, вам необходимо сохранить состояние вывода, которое переключается при обнаружении изменения от LOW до HIGH.

В коде должно быть что-то вроде этого:

const int buttonPin = 2;  // the number of the pushbutton pin 

// variables will change: 
int buttonState = 0;   // variable for reading the pushbutton status 
int buttonLastState = 0; 
int outputState = 0; 


void setup() { 
    // initialize the pushbutton pin as an input: 
    pinMode(buttonPin, INPUT); 
    Serial.begin(9600); // Open serial port to communicate 
} 

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) 
    { 
    Serial.println("1"); 
    } 
    else 
    { 
    Serial.println("0"); 
    } 
    delay(100); 
} 
+0

кнопка 2 государства действует как переключатель, где когда нажата пользователем, он будет замкнуть цепь и когда нажата снова, он будет размыкать цепь. Я в этом прав? так что, по-видимому, физическая кнопка, которая у меня есть, - это только кнопка прерывания. я прав? – Luke

+0

Я думаю, что ваша кнопка, как вы говорите. Работает ли код? – dubafek

+0

да, сделал. спасибо – Luke