• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь Как упростить скетч

Demonstrius

New member
Как упростить скетч, чтобы не плодить 50 одинаковых функций? Чтобы в зависимости от значения переменной count к переменным var и song прибавлялся порядковый номер. То есть если count = 1, то var1 и song1. Если count = 2, то var2 и song2 и т.д. Заранее спасибо.

if ((count == 1) && (var1 == 1))
{
play_rtttl(song1);
var1 = 0;
}
if ((count == 2) && (var2 == 1))
{
play_rtttl(song2);
var2 = 0;
}
if ((count == 3) && (var3 == 1))
{
play_rtttl(song3);
var3 = 0;
}
if ((count == 4) && (var4 == 1))
{
play_rtttl(song4);
var4 = 0;
}
if ((count == 5) && (var5 == 1))
{
play_rtttl(song5);
var5 = 0;
}
 

Юрий Ботов

Moderator
Команда форума
Может массивы указателей? Что то в таком духе:
(тип) var0,...var5;
(тип) song0,...song5;
(тип**) varx = [&var0,&var1,&var2,&var3,&var4,&var5];
(тип**) songx = [&song0,&song1,&song2,&song3,&song4,&song5];

count = ...

if( *varx[count] == 1) { playrtttl(*songx[count]); *varx[count] = 0; }

В зависимости от типов переменных синтаксис может немного поменяться...
 

Demonstrius

New member
Может массивы указателей? Что то в таком духе:
(тип) var0,...var5;
(тип) song0,...song5;
(тип**) varx = [&var0,&var1,&var2,&var3,&var4,&var5];
(тип**) songx = [&song0,&song1,&song2,&song3,&song4,&song5];

count = ...

if( *varx[count] == 1) { playrtttl(*songx[count]); *varx[count] = 0; }

В зависимости от типов переменных синтаксис может немного поменяться...
Спасибо вам за помощь.
 

Demonstrius

New member
" ... вы про существование массивов слышали?",

" ... вообще-то в вашем примере всего одна функция. поэтому данные советы к Вашему примеру не имеют никакого отношения."
-------
Вот это вы называете помощью? Я понимаю что вы спецы своего дела и даже знаете как решить эту проблему. Поэтому я и обратился к вам за помощью.
 

Сергей_Ф

Moderator
Команда форума
@Demonstrius т.е. про массивы вы не слышали? Что мешает погуглить или пояндексить? Вам вообще не нужно ничего, возможно, из того что вы спрашиваете. Если вам помог @Юрий Ботов, то хорошо. Но по моему это совсем не оптимальный путь. А помочь можно только зная что нужно.
Функции на то и существуют, что бы им передать параметры и получить результат. Зачем их плодить, если у вас она одна?
 

CodeNameHawk

Moderator
Команда форума
Примерно так
Код:
if ((count == 1) && (var[count] == 1))
{
play_rtttl(count);
var[count] = 0;
}
 

CodeNameHawk

Moderator
Команда форума
Возможно и такой код, если условия, как в шапке
Код:
igrat_trek_nomer(void)
{
   if (var[count] == 1)
  {
     play_rtttl(count);
     var[count] = 0;
  }
}
 

Сергей_Ф

Moderator
Команда форума
Проблема не решена, но все равно всем огромное спасибо за помощь.
Трудно помочь, когда непонятно что вы хотите сделать и каков ваш уровень подготовки. На вопросы вы не отвечаете, так что уточнить ничего нельзя. Что вы хотите в результате получить - тоже непонятно.
Вам предложили уже три варианта, но... Что вам не подошло?
 

Сергей_Ф

Moderator
Команда форума
Код:
int igrat_trek_nomer(uint8_t c)
{
     play_rtttl(song[c]);
     return 0;
}
вызывать
count = igrat_trek_nomer(count);
по индексу 0 хранить пустой трэк. Чем не вариант?
не нужна переменная var и всё работает также.
 

Demonstrius

New member
Трудно помочь, когда непонятно что вы хотите сделать и каков ваш уровень подготовки. На вопросы вы не отвечаете, так что уточнить ничего нельзя. Что вы хотите в результате получить - тоже непонятно.
Вам предложили уже три варианта, но... Что вам не подошло?
Что я хочу сделать - я объяснил в самом начале.
Уровень моей подготовки я бы оценил начальный , хотя своими силами и с помощью добрых людей осилил написание скетчей для матричных wi-fi часов с датчиками и охранной сигнализацией и передачей этих данных на сервер, а также термоконтроль с сервоприводом для котла и автоматическое управление жалюзи. Но все равно уровень я оцениваю как начальный.
В предложенных вариантах в скетче возникает ошибка:
var[count] = 0; --> invalid types 'int[int]' for array subscript
Судя по вашим ответам понимаю что отвлекаю вас от других дел, поэтому не хочу никого напрягать.
"Что вы хотите в результате получить" - хотел не прописывать 50 раз почти одинаковый кусок кода и спросил совета можно ли это как-то оптимизировать. Самому это сделать не хватает опыта.
Вроде все.
 

Сергей_Ф

Moderator
Команда форума
"Что вы хотите в результате получить" - хотел не прописывать 50 раз почти одинаковый кусок кода и спросил совета можно ли это как-то оптимизировать.
чтобы оптимизировать - надо понимать что программа должна делать. Из вашего куска кода это не ясно. Там только то как вы себе что то придумали, а для чего это - не понятно. Объясните задачу простыми человеческими словами. К чему там count, куча var и song. Что это и для чего?
 

Demonstrius

New member
чтобы оптимизировать - надо понимать что программа должна делать. Из вашего куска кода это не ясно. Там только то как вы себе что то придумали, а для чего это - не понятно. Объясните задачу простыми человеческими словами. К чему там count, куча var и song. Что это и для чего?
Вам можно сбросить весь скетч в архиве?
 

Сергей_Ф

Moderator
Команда форума
@Demonstrius скетч в архиве кидайте сюда, но от описания того что нужно вам на человеческом языке это не освобождает. В любом случае посмотрите курсы по C++ на предмет массивов и функций. Без базовых знаний у вас вряд ли что то получится склеить из чужих скетчей. Всегда будут ошибки, которые поставят в тупик, хотя их решение элементарно.
Начните хотя бы отсюда
 

Demonstrius

New member
@Demonstrius скетч в архиве кидайте сюда, но от описания того что нужно вам на человеческом языке это не освобождает. В любом случае посмотрите курсы по C++ на предмет массивов и функций. Без базовых знаний у вас вряд ли что то получится склеить из чужих скетчей. Всегда будут ошибки, которые поставят в тупик, хотя их решение элементарно.
Начните хотя бы отсюда
"Без базовых знаний у вас вряд ли что то получится " - поверьте что я это пытаюсь делать, но как вам сказать правильно ... возраст... зараза.
Вот весь скетч:
 

Вложения

Сергей_Ф

Moderator
Команда форума
@Demonstrius глянул мельком, назначение var# не понял. Но дырку во флэш вы протрете очень скоро, судя по коду.
Вечером посмотрю подробнее если время будет.
 
Сверху Снизу