Как я могу использовать методы в 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.
Спасибо за любую помощь!
@Nutmeg, 👍0
1 ответ
Лучший ответ:
В этой ситуации гораздо эффективнее использовать #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)
- C++ против языка Arduino?
- avrdude ser_open() can't set com-state
- Как читать и записывать EEPROM в ESP8266
- Float печатается только 2 десятичных знака после запятой
- устаревшее преобразование из строковой константы в 'char*'
- Запрограммировать ATMega328P и использовать его без платы Arduino.
- Разница между print() и println()
- Как исправить: Invalid conversion from 'const char*' to 'char*' [-fpermissive]
Благодаря тонну! Попробую это, когда я снова смогу получить доступ к компьютеру!, @Nutmeg