Как работает функция подскажите пожалуйста

Тема в разделе "Arduino & Shields", создана пользователем arduin, 8 мар 2017.

  1. arduin

    arduin Нерд

    Данная функция рабочая. просто я удалил весь код, так как он не нужен.

    Подскажите пожалуйста каким образом opcion передает значения при нажатии на кнопку
    в блоки if
    Код (C++):
    if (opcion ==1)
    На что влияет переменная
    Код (C++):
    int a
    Код (C++):
    void menu(int a)

    без вставленной
    Код (C++):
    void menu(int a)
    ошибка. В место a Можно воткнуть любую переменную



    Код (C++):

    void setup() {   }

    void item_menu()
      {
            if(digitalRead(12) == HIGH){
            opcion++;
            if(opcion == 3) opcion = 1;
            menu(opcion);
      }
       }

    void loop() { item_menu();}


    void menu(int a)

       {


          if (opcion ==1)
          {
             //Код
          }

         if (opcion ==2)
         {
           //Код
          }


    }
     
     
  2. mcureenab

    mcureenab Гуру

    Вы слишком много удалили, в том числе не лишнего. Хотя-бы предоставьте код который компилируется.
     
  3. Tomasina

    Tomasina Сушитель лампочек Модератор

    В функции menu обрабатывается переменная opcion (значение которой устанавливается в функции item_menu и зависит от количества нажатий кнопки на пине 12).
    В зависимости от значения переменной opcion отрисовывается то или иное содержимое экрана.
    Также в функцию menu передается некое значение a, которое в данном урезанном коде никак не обрабатывается и не используется.
     
  4. mcureenab

    mcureenab Гуру

    ?
    Идентификатор opcion не объявлен. Вероятно в исходном варианте это глобальная переменная.

    Нажатия как таковые не подсчитываются. Проверка идет только по удержанию.
     
    arduin нравится это.
  5. arduin

    arduin Нерд

    Вот код он полностью работает, выводит блоки 1 и 2.

    Код (C++):



    int opcion = 1;

    void setup() {
    Serial.begin(9600);
      tft.reset();
      tft.begin(0x7575);
      tft.setRotation(1);
      menu(1);


    }



    void item_menu()
    {      if(digitalRead(12) == HIGH){
            opcion++;
            if(opcion == 3) opcion = 1;
            menu(opcion);
            delay(100);
        }

    }

     
    void loop(){
     
    item_menu();
             }


    void menu(int seleccion){  
     
    if (opcion ==1 ) {
       tft.fillScreen(BLACK); //Очистка  экрана от  левых данных
         tft.setCursor(280, 2);
         tft.setTextColor(WHITE);
         tft.setTextSize(1);
         tft.print("MENU 1");

    tft.setCursor(10, 90);
         tft.setTextColor(YELLOW);
         tft.setTextSize(3);
         tft.print("MENU 1");

        }

        if (opcion ==2) {
         tft.fillScreen(BLACK);
              tft.setCursor(280, 2);
              tft.setTextColor(WHITE);
         tft.setTextSize(1);
         tft.print("MENU 2");

       
        }


       
    }
    получается что menu(opcion); передает значения в функцию в переменную opcion

    Только не пойму какой толк от переменной (int seleccion)

    название могу любое вписать, а если оставить пусто тогда будет ошибка


    Может что посоветуете почитать про функции, чтоб понять как с ними работать
    Желательно с самого простого.
    Спасибо.



    И еще как сделать функцию например у меня в коде есть одинаковые данные.
    код
    Код (C++):




    tft.setCursor(10, 90);
         tft.setTextColor(YELLOW);
         tft.setTextSize(3);
         tft.print("[B]MENU 1[/B]");


    tft.setCursor(10, 90);
         tft.setTextColor(YELLOW);
         tft.setTextSize(3);
         tft.print("[B]MENU 2[/B]");


     

    Сделать одну функцию и массив значений меню 1 меню 2 и тд.

    а в блок кода вставить к примеру для меню 1
    block_menu(1);


    для меню 2
    block_menu(2);
     
  6. arduin

    arduin Нерд

    глобальная переменная. Лучше сделать ее локальной?
    Проверка идет по нажатию кнопки, есть более правильный вариант посчитать нажатия?

    Там по сути каждое нажатие + 1
    дошли до конца обнулили.
     
  7. mcureenab

    mcureenab Гуру

    Декларация функции содержит список формальных аргументов.
    Вызов функции содержит список фактических аргументов.
    Как правило порядок и количество аргументов должно совпадать.
    Если вы удаляете формальный аргумент нужно поправить и вызовы функции.
     
  8. mcureenab

    mcureenab Гуру