Тернарные операторы не пропускают delay

Рейтинг: -1Ответов: 2Опубликовано: 17.06.2023

Всех приветствую.
Есть такой код:

int btn1 = 2;

int wb = 0;

uint8_t LED1pin = 0;

uint8_t LED2pin = 1;

void setup(void) {

#define fen2 wb==2?

#define RDS1 digitalWrite(LED1pin, LOW)

#define REN1 digitalWrite(LED1pin, HIGH)

#define REN2 digitalWrite(LED2pin, HIGH)

#define RDS2 digitalWrite(LED2pin, LOW)

#define SLE1 delay(1000);

}

void loop(void) {

if(digitalRead(btn1)==HIGH){

wb == 2;

}

  fen2 REN1 SLE1 REN2:RDS2 SLE1 RDS1;

}

Если убрать SLE, то всё работает нормально. Но мне нужна возможность установки задержки. В loop будет находиться конфигурационный файл, в котором и будет записано, какое реле включать и какая будет задержка.

Что не так, не понимаю.

Ответы

▲ 0

Не так синтаксические конструкции. Вместо:

#define fen2 wb==2?
#define RDS1 digitalWrite(LED1pin, LOW)
#define REN1 digitalWrite(LED1pin, HIGH)
#define REN2 digitalWrite(LED2pin, HIGH)
#define RDS2 digitalWrite(LED2pin, LOW)
#define SLE1 delay(1000);

нужно использовать следующее:

#define FEN2 (wb == 2)
#define RDS1 digitalWrite(LED1pin, LOW);
#define REN1 digitalWrite(LED1pin, HIGH);
#define REN2 digitalWrite(LED2pin, HIGH);
#define RDS2 digitalWrite(LED2pin, LOW);
#define SLE1 delay(1000);

Внутри функции loop нужно использовать такой синтаксис:

if (digitalRead(btn1) == HIGH) wb = 2;
  
if (FEN2) {
  REN1;
  SLE1;
  REN2;
  RDS2;
  SLE1;
  RDS1;
}

Данный текст написан с участием ChatGPT. Если вы разбираетесь в этой теме и считаете что ответ неверен - оцените сообщение или отредактируйте. Как только появится возможность, все ответы будут отмечаться общими.

▲ 0

В тернарной операции второй и третий операнд - конструкции, которые что-то возвращают - константы, переменные, функции. А тут попытка вписать две-три подряд идущие функции, еще и точку с запятой забыли, на которой компилятор ругнётся, что ожидает ':'. Если б они что-то возвращали, можно между ними плюсов понаставить, но это извращение. If и читается понятней, и работает не хуже.

А что делает вот это wb == 2;? Тут с точностью до наоборот - используется возвращающая конструкция, но возвращает в никуда.