Помогите упростить код убрать половину if else вот код

Тема в разделе "Arduino & Shields", создана пользователем ArtemFBR, 15 янв 2022.

  1. ArtemFBR

    ArtemFBR Нуб

    ну ты представь ардуино мега и вот такое if(long == 0 && long == 0 && long == 0 && long == 0 && long == 0 && long == 0 && long == 0 && long == 0 && long == 0 && long == 0 && long == 0 && long == 0 && long == 0 && long == 0 &&) и таких условий столь ко сколько переменних в этом условии может даже больше там та 20 светофоров на каждий по переменной.
     
  2. Airbus

    Airbus Радиохулиган Модератор

    У Вас три входа. Немного. Поэтому применение if/else оправдано. Если как в примерах выше то лучше так как сказал b707
     
  3. ArtemFBR

    ArtemFBR Нуб

    самый легкий и понятный язык это с++
     
  4. Рокки1945

    Рокки1945 Гуру

    а какой самый сложный по Вашему мнению?
     
  5. parovoZZ

    parovoZZ Гуру

    Русский матерный
     
    Ariadna-on-Line нравится это.
  6. akl

    akl Гуру

    и что, каждый светодиод зависит от всех кнопок одновременно?
     
  7. User248

    User248 Гик

    Сократить код помогает использование массивов, как правило.
    Например, так:
    Код (C++):

    bool rail1a[] = {0, 1, 0, 0, 1, 1, 0, 1};
    bool green1a[] = {1, 0, 0, 1, 0, 0, 0, 0};
    // и так далее

    for (int i = 0; i < 8; i++)
      if (rail1 == rail1a[i] && rail2 == rail2a[i] && rail3 == rail3a[i])
      {

      digitalWrite(green1Pin, green1a[i]);
      digitalWrite(orange1Pin, orange1a[i]);
      digitalWrite(red1Pin, red1a[i]);

      digitalWrite(green3Pin, green3a[i]);
      digitalWrite(orange3Pin, orange3a[i]);
      digitalWrite(red3Pin, red3a[i]);

      digitalWrite(red5Pin, red5a[i]);
      digitalWrite(green5Pin, green5a[i]);
      digitalWrite(orange5Pin, orange5a[i]);
      }
     
     
    Последнее редактирование: 24 янв 2022