Опять кнопка -разные значения при нажатие на одну кнопку

Gagarin74
Offline
Зарегистрирован: 24.08.2013

Добрейшего времени.

Помогите пожалуйста.Надо реализовать что бы при нажатие на одну и туже кнопку ,чередовались значения переменной с 0 и 1.

Тоесть нажали на кнопку -результат единица,ещё раз нажали на кнопку результат -0 и так по кругу.

const int buttonPin = 6;     // номер входа, подключенный к кнопке 1
int buttonState = 0;         // переменная для хранения состояния кнопк
void setup()
{
  pinMode(buttonPin, INPUT);
}

void loop()
{
buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH ) {   
zvon=1;
Serial.print("1");
delay (2000);
}

if (zvon == 1)
{
  if (buttonState == HIGH ){
  zvon=0;
 Serial.print("2");
 }
}

}

 

vvadim
Offline
Зарегистрирован: 23.05.2012
Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013


const byte buttonPin = 6; // номер входа, подключенный к кнопке 1
boolean buttonState = false; // переменная для хранения состояния кнопк

void setup()
{
    pinMode(buttonPin, INPUT);
}

void loop()
{
    if (digitalRead(buttonPin)) // если кнопка нажата
       {
          buttonState = !buttonState; // меняем состояние на противоположное
          Serial.print(buttonState);
          delay (50); // задержка для подавления дребезга
       }

}

 

maksim
Offline
Зарегистрирован: 12.02.2012

Так при удержании кнопки значение будет непрерывно меняться каждые 50 млс

#define buttonPin 6   // номер входа, подключенный к кнопке 1
bool buttonState = 0; // переменная для хранения состояния кнопк
bool zvon = 0;

void setup(){}

void loop()
{
  if(digitalRead(buttonPin)) // если кнопка нажата
  {
    if(!buttonState)
    {
      buttonState = 1;
      zvon = !zvon;      // меняем состояние на противоположное
      Serial.print(zvon); 
    }
    delay(50); // задержка для подавления дребезга
  }
  else buttonState = 0;
}

 

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

bool buttonState = 0;
...
if(!buttonState) - оно никогда не выполнится

maksim
Offline
Зарегистрирован: 12.02.2012

С чего бы это вдруг? Вера не позволит?

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

А ведь верно... Если отрицание лживой истины является правдой, то...

...то Вера все позволит. Теперь спать пора ;)

Piskunov
Offline
Зарегистрирован: 13.02.2014

Если кнопка одна, можно попробовать через прерывания

boolean button = false;
//
void inverse_button(){
  button = !button;
  delay (50);
  check_result();
}
void check_result(){
  Serial.println();
  Serial.print ("_button state_: ");
  Serial.print (button);
  Serial.println();
}
void setup(){
  Serial.begin(4800);
  attachInterrupt (0, inverse_button, FALLING); // для UNO это pin2
}
void loop(){
}