Verpis
10.Июль.2023 14:56:05
1
Здравствуйте. Пытаюсь упростить повторяющийся код.
Имеется:
const int rele1 = D0;
const int rele2 = D1;
...
digitalWrite(rele1, LOW);
Требуется подставить в digitalWrite вместо “rele1” динамично собранную внутри скетча конструкцию типа “rele”.1 или “rele”+“2”. Это возможно?
Ты не в скаску попал, смирись.
void SetRelayState(const int &Relay, bool AValue){
digitalWrite(Relay, AValue);
}
вызов:
SetRelayState(rele1, LOW);
SetRelayState(rele2,HIGH);
я так понимаю он индекс пытается прицепить, так может массив?
Verpis
10.Июль.2023 15:08:12
4
Да, индекс. Чтобы в цикле суметь по индексу вытаскивать из массивов нужные параметры и запускать требуемые исполнительные механизмы.
Ну, так бы и писали! Слов-то умных развели.
Verpis:
Это возможно?
ДА !!!
Штудировать Вам надо язык программирования от начала и до конца. Отрывками тут не поможешь.
Вы же даже вопрос задать не можете. Ваш вопрос непонятен, т.к. не видно проблемы. Можно ли там использовать переменные? Можно! Используйте на здоровье, проблема-то в чём?
Возможно было бы понятнее, если бы Вы написали код в котором пробовали это сделать и сказали, что именно у Вас не получилось.
1 лайк
по понедельникам добрый , надеюсь мысль и направление понятно
const int rele[] = { 0, 1, 2};
void setup()
{
for (uint8_t idx = 0; idx < 3; idx++)
{
pinMode(rele[idx], OUTPUT);
}
}
void loop()
{
for (uint8_t idx = 0; idx < 3; idx++)
{
digitalWrite(rele[idx], LOW);
delay(100);
}
delay(5000);
for (uint8_t idx = 0; idx < 3; idx++)
{
digitalWrite(rele[idx], HIGH);
delay(100);
}
delay(5000);
}
xDriver:
по понедельникам добрый
А чё так? Особый день? В понедельник мама родила?
Verpis
10.Июль.2023 15:29:55
10
В том-то и проблема, что я не могу подступиться к коду даже для его публикации. И для меня в вопросе ну все понятно. :))
for (int i = 1; i < 12; i++) {
digitalWrite(<rele+i>, HIGH); // Требуется срабатывание объявленных ранее rele1, rele2...
}
Verpis
10.Июль.2023 15:31:07
11
Спасибо! Хотя, да… Быть добрым по понедельникам…
не, родился я в среду, да просто чет бездельничаю, то протеус запущу, то еще чего
1 лайк
И на форум Ардуино
Я без шуток не хожу,
То им скетч в забор просуну,
То Протеус покажу.
4 лайка
Так это конструкции из C++33, рано её ещё применять в ардуине. Она будет изобретена только лет через 7.
Поосторожнее там, а то к пятнице начнётся “похмельё” с горькими причитаниями “Как всё запущено-то! ”
1 лайк
Ну, если Вы не можете не только решить задачу, но даже сформулировать её, то остаётся только повторить:
Давайте, штудируйте.
Чуть подредактирую выложенный ранее xDriver скетч.
#define rele0 8
#define rele1 6
#define rele2 2
#define numRele 3
const int rele[numRele] = { rele0, rele1, rele2};
void setup()
{
for (uint8_t idx = 0; idx < numRele; idx++)
{
pinMode(rele[idx], OUTPUT);
}
}
void loop()
{
for (uint8_t idx = 0; idx < numRele; idx++)
{
digitalWrite(rele[idx], LOW);
delay(100);
}
delay(5000);
for (uint8_t idx = 0; idx < numRele; idx++)
{
digitalWrite(rele[idx], HIGH);
delay(100);
}
delay(5000);
}
Verpis
11.Июль.2023 06:37:03
18
Спасибо. Будет ли работать конструкция
#define rele0 D8
?
Будет. Но правильней такая
constexpr uint8_t pinRelay0 = 8;
BOOM
11.Июль.2023 06:45:19
20
DetSimen:
Будет.
В заблуждение вводишь.
error: 'D8' was not declared in this scope
pinMode(D8, OUTPUT);
1 лайк