Как я могу использовать методы в digitalWrite(): digitalWrite(int, "methodHere")?

При создании фрагмента кода для работы с 7-сегментным дисплеем я столкнулся с проблемой:

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

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

Я не могу найти способ заставить метод digitalWrite(int pin, int val) работать с методом, который возвращает int вместо "int val"

Это код, который не будет работать:

int F = 11;
int G = 10;
int E = 9;
int D = 8;
int C = 7;
int DP = 6;
int B = 5;
int A = 4;
int type = 1;

 int highLow(int highOrLow)
{

  int digOutput;

  if(type = 1)
  {

    if(highOrLow = 1)
    {

      digOutput = 1;

    }
    if( highOrLow = 0)
    {

      digOutput = 0;

    }

  }
  if(type = 0)
  {

    if(highOrLow = 0)
    {

       digOutput = 0;

    }
    if( highOrLow = 2)
    {

      digOutput = 1;

    }

  }
  return digOutput;
}

void zero()
{
  digitalWrite(F, highLow(0));
  digitalWrite(G, HIGH);
  digitalWrite(E, LOW);
  digitalWrite(D, LOW);
  digitalWrite(C, LOW);
  digitalWrite(DP, HIGH);
  digitalWrite(B, LOW);
  digitalWrite(A, LOW);
}

setup
{
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);
pinMode(E, OUTPUT);
pinMode(D, OUTPUT);
pinMode(C, OUTPUT);
pinMode(DP, OUTPUT);
pinMode(B, OUTPUT);
pinMode(A, OUTPUT);
zero();
}

Примечание. Я использую контакт f только для проверки.

Кроме того, мой этикет не очень хорошо определен или протестирован, поэтому, пожалуйста, постарайтесь сделать его достаточно простым, если можете.

Если это имеет значение, я собираюсь использовать Arduino Mega2560 производства Elegoo.

Спасибо за любую помощь!

, 👍0


1 ответ


Лучший ответ:

0

В этой ситуации гораздо эффективнее использовать #define и условную компиляцию.

// Раскомментируйте это для tinkercad
// #define ИНВЕРТИРОВАННЫЙ

#ifdef INVERTED
#  define ON HIGH
#  define OFF LOW
#else
#  define ON LOW
#  define OFF HIGH
#endif

Затем просто используйте ON или OFF вместо HIGH и LOW.

digitalWrite(3, ON);

Но причина, по которой у вас возникла проблема, не в том, что вы пытаетесь использовать функцию в качестве значения для digtalWrite() — проблема на самом деле в вашем базовом синтаксисе C.

Вы используете оператор присваивания (=), вместо того, чтобы использовать оператор сравнения (==). Например здесь:

if(highOrLow = 0)

вы должны иметь:

if(highOrLow == 0)
,

Благодаря тонну! Попробую это, когда я снова смогу получить доступ к компьютеру!, @Nutmeg