как менять (инвертировать) переменную var?

romiras
Offline
Зарегистрирован: 12.07.2015

подскажите, как правильно записать инверсию var=1 и var=2 на примере: digitalWrite(13,!digitalRead(13));?

var=1(!var=2); что то типа этого, не знаю, как правильно

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Как менять-то? С 1 на 2 и наоборот? Ну, также точно, как и rav

rav = 3 - rav;

Или что-то другое надо? 

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Бог знает что Вы подразумеваете под инверсией, если предположить по примеру, что речь о лигическом отрицании, то читать здесь:

http://arduino.ru/Reference/Boolean

а еще есть и другие варианты: var1 = var2 ^ 0xFF; var1 = ~var2; var1 = !var2;

 

romiras
Offline
Зарегистрирован: 12.07.2015

Вот часть кода, где при нажатии на кнопку я должен выйти в меню, на повторное нажатие выйти в основную функцию

  int var;

  if (buttonState3 == HIGH && flag == 0) {
   var=1(!var=2);
    lcd.clear();
    flag = 1;
  }
  if (buttonState3 == LOW && flag == 1) {
    flag = 0;
  }
  switch (var) {
    case 1:

      lcd.setCursor(3, 0);
      lcd.print("MENU");
      lcd.setCursor(1, 1);
      lcd.print("t=");
      lcd.setCursor(4, 1);

 

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Можно так:

var=(var==1)?2:1;

или так

var ^= 3;

romiras
Offline
Зарегистрирован: 12.07.2015

Спасибо большое, но не помогло, скорее всего сам что-то закосячил

romiras
Offline
Зарегистрирован: 12.07.2015

переделал так:

 int var;

  if (buttonState3 == HIGH && flag == 0) {
    flag = 1;
   var=2;
    lcd.clear();
 }   
 
  if (buttonState3 == HIGH && flag == 1) {
 flag = 2; 
var=1;
lcd.clear();
}

  if (buttonState3 == HIGH && flag == 2) {
 flag = 0; 


}

Но все равно, кнопка не нажата - выполняется var2, var1 выполняется только при удерживании кнопки, почему то не фиксируется

at0mix
at0mix аватар
Offline
Зарегистрирован: 23.11.2015

А в чем глубинный смысл присваивать переменной var значения 1 и 2? Если чисто сила привычки - то таки скажу что с точки зрения машины логичнее использовать булевы выражения - т.е. 0 и 1. А использование 2,3 и далее - если действительно нужен многовариантный выбор.

byte var=0;
while(1)
{
  if(button && !var)
  {
    var=!var;
    void func1();
  }
  if(button&&var)
  {
    var=!var;
    void func2();
  }
}

ну делай между чтениями кнопки для устранения дребезга.

 

romiras
Offline
Зарегистрирован: 12.07.2015

спасибо

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

romiras пишет:

подскажите, как правильно записать инверсию var=1 и var=2 на примере: digitalWrite(13,!digitalRead(13));?

var=1(!var=2); что то типа этого, не знаю, как правильно

var = !var ;

 

BoBo4kA
Offline
Зарегистрирован: 15.01.2016

если кнопка не на прерывании, в момент нажатия может гулять/ждать(delay) где-то в другом месте по ходу программы, т.к. при длительном нажатии срабатывает

at0mix
at0mix аватар
Offline
Зарегистрирован: 23.11.2015

В цикле после ифов delay() на 300-500мс. Я так делал для устранения дребезгов. Хотя иногда приходится секунду держать кнопку ;) но мне техзадание позволяет ;)

vlad072
Offline
Зарегистрирован: 01.08.2017

Подскажите, побитовые операнды применимы к типам любой длины или только 8-bit?

Т.е. будет ли корректным например:

uint32_t var = 0x1234ABCD
var = ~var

 

Green
Offline
Зарегистрирован: 01.10.2015

А не дольше ли ждать ответа, чем попробовать? Или без форума ни-ни?