Как написать условие

grekhem
Offline
Зарегистрирован: 31.08.2017

Доброго времени суток!

В общем такая проблема, есть три скажем тумблера, необходимо написать код так, что бы сначала проверялось включены ли первые два тумблера, а дальше

1) если третий тумблер выключен, то программа бы ждала его включения и после включала светодиод

2) если третий тумблер включен, то необходимо его сначала выключить, а потом снова включить, и тогда бы загорался светодиод.

if (buttonState == HIGH) { 
  if (buttonState2 == HIGH) { need = true; }
  else {need = false;}}
                            else {need = false;} // так проверяется условие что 2 тумблера включены, в случае соблюдения условия в переменную need записывается true
 

  if (need == true) // а вот тут пошли проблемы

Может ли кто нибудь помочь с этим?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

grekhem пишет:
Может ли кто нибудь помочь с этим?
 Вам мало своей глупости,надо добавить чужую. Вы криво придумали алгоритм. Вот и кривизна полезла.

grekhem
Offline
Зарегистрирован: 31.08.2017

Вы не могли бы подсказать как? По крайней мере с этим алгоритмом проверка проходила, что дальше делать не пойму

grekhem
Offline
Зарегистрирован: 31.08.2017
if (buttonState == HIGH && buttonState2 == HIGH )  
  { need = true; }
  else {need = false;}
                           
 

  if (need == true) 
  {digitalWrite(ledPin, HIGH);}
  else {digitalWrite(ledPin, LOW);}

Так лучше? Все же как сделать условие

1) если третий тумблер выключен, то программа бы ждала его включения и после включала светодиод

2) если третий тумблер включен, то необходимо его сначала выключить, а потом снова включить, и тогда бы загорался светодиод.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Ну скорее всего у вас первые два это не тумблеры а датчики. А светодиод это индикатор. Опять вы не сказали как они подключены к питанию, к земле. Подтяжка программная или резисторная.

grekhem
Offline
Зарегистрирован: 31.08.2017

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

 Ну и нахера подтяжка на землю. Проще повесить кнопки на землю, а подтяжку сделать программную.

Вот скечь 

//**/
unsigned long mill;
//------Cl_Led----------------------
// класс светодиод
class Cl_Led {
  protected:
    const byte pin;
  public:
    Cl_Led(byte pin_): pin(pin_) {}
    void setup() {
      pinMode(pin, OUTPUT);
      OFF();
    }
    void ON() {
      digitalWrite(pin, HIGH);
    }
    void OFF() {
      digitalWrite(pin, LOW);
    }
};
//------Cl_Btn----------------------
// класс кнопка
class Cl_Btn {
  protected:
    const byte pin;
    void (*Do)();
    bool bounce = 0;
    bool btn = 1, oldBtn;
    unsigned long past;
  public:
    Cl_Btn(byte pin_, void (*Do_)()): pin(pin_), Do(Do_) {}
    void setup() {
      pinMode(pin, INPUT_PULLUP);
    }
    void loop() {
      bool newBtn = digitalRead(pin);
      if (!bounce && newBtn != btn) {
        bounce = 1;
        past = mill;
      }
      if (bounce && mill - past >= 10) {
        bounce = 0 ;
        oldBtn = btn;
        btn = newBtn;
        if (!btn && oldBtn) (*Do)();
      }
    }
};
//-----компоновка----------------------
Cl_Led Led(/*пин*/13);
void DoBtn1() {
  Led.ON();
}
Cl_Btn Btn1(/*пин*/2,/*обработчик*/DoBtn1);
//-----main-----------------------
int main() {
  init();
  // setup()
  Led.setup();
  Led.OFF();
  Btn1.setup();
  for (;;) {
    // loop()
    mill = millis();
    Btn1.loop();
  }
  return 0;
}
/*Скетч использует 1208 байт (3%) памяти устройства. Всего доступно 32256 байт.
  Глобальные переменные используют 24 байт (1%) динамической памяти, оставляя 2024 байт для локальных переменных. Максимум: 2048 байт.
*/

Вот под вашу схему

//**/
unsigned long mill;
//------Cl_Led----------------------
// класс светодиод
class Cl_Led {
  protected:
    const byte pin;
  public:
    Cl_Led(byte pin_): pin(pin_) {}
    void setup() {
      pinMode(pin, OUTPUT);
      OFF();
    }
    void ON() {
      digitalWrite(pin, HIGH);
    }
    void OFF() {
      digitalWrite(pin, LOW);
    }
};
//------Cl_Btn----------------------
// класс кнопка
class Cl_Btn {
  protected:
    const byte pin;
    void (*Do)();
    bool bounce = 0;
    bool btn = 1, oldBtn;
    unsigned long past;
  public:
    Cl_Btn(byte pin_, void (*Do_)()): pin(pin_), Do(Do_) {}
    void setup() {
      pinMode(pin, INPUT);
    }
    void loop() {
      bool newBtn = digitalRead(pin);
      if (!bounce && newBtn != btn) {
        bounce = 1;
        past = mill;
      }
      if (bounce && mill - past >= 10) {
        bounce = 0 ;
        oldBtn = btn;
        btn = newBtn;
        if (btn && !oldBtn) (*Do)();
      }
    }
};
//-----компоновка----------------------
Cl_Led Led(/*пин*/13);
const byte sen1Pin =/*пин*/5;
const byte sen2Pin =/*пин*/7;
void DoBtn1() {
  if (digitalRead(sen1Pin) && digitalRead(sen1Pin))Led.ON();
}
Cl_Btn Btn1(/*пин*/2,/*обработчик*/DoBtn1);
//-----main-----------------------
int main() {
  init();
  // setup()
  pinMode(sen1Pin, INPUT);
  pinMode(sen2Pin, INPUT);
  Led.setup();
  Led.OFF();
  Btn1.setup();
  for (;;) {
    // loop()
    mill = millis();
    Btn1.loop();
  }
  return 0;
}
/*Скетч использует 1258 байт (3%) памяти устройства. Всего доступно 32256 байт.
  Глобальные переменные используют 24 байт (1%) динамической памяти, оставляя 2024 байт для локальных переменных. Максимум: 2048 байт.
*/

 

grekhem
Offline
Зарегистрирован: 31.08.2017

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

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Не понимаю, зачем рубильник на вывод Ардуины?

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

qwone пишет:

Не понимаю, зачем рубильник на вывод Ардуины?

возможно, для создания учебного стенда

grekhem
Offline
Зарегистрирован: 31.08.2017

для антуража)) готовим небольшой перфоманс, и вот такая штука требуется, думаю как сделать

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

grekhem пишет:

а вот тут пошли проблемы

Они пошли гораздо раньше.

CheS_66
CheS_66 аватар
Offline
Зарегистрирован: 08.02.2017

grekhem пишет:

для антуража))

Очередная квест-комната?