Использование самописных функций в Arduino

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

Метки:
  1. frexxxfred

    frexxxfred Нуб

    Здравствуйте!

    Раньше программил на PHP, но тут, хоть и синтаксис похож все по другом, в частности исполнение в loop, а не последовательно как в PHP, никак не могу привыкнуть)))

    Поэтому прошу помощи.

    Суть такая.

    Есть некоторый код (я его максимально скоратил, чтобы не вдаваться в подробности):


    Код (C++):
    uint32_t timeButton;
    bool stateButtonUP;
     
    void setup()
    {
      Serial.begin(9600);
      Serial.println("Start...");
       pinMode(2, INPUT_PULLUP);
       pinMode(3, INPUT_PULLUP);
    }
    void loop(){
      testButton(2);
      //testButton(3); // !!!!если раскомментировать, то будут проблемы!!!!
    }
    int testButton(int PinButtonUP) { // Функция управления
     
        uint32_t timeNow    = millis();
          // Фиксируем нажатие кнопки UP //
       if( digitalRead(PinButtonUP)  == HIGH && !stateButtonUP && ( timeNow - timeButton ) > 50 ){
          stateButtonUP      = true;
          Serial.println(" ");
          Serial.println(" ");
          Serial.println("********");  
          Serial.println("Press Button on PIN number");
          Serial.println(PinButtonUP);  
       }
          // Фиксируем отпускание кнопки UP //
       if( digitalRead(PinButtonUP) == LOW && stateButtonUP && ( timeNow - timeButton ) > 50  ){
          stateButtonUP      = false;
         
          Serial.println("Realse Button");
          Serial.println("********");      
       }
     
    }

     


    Так вот, если запустить его как есть, с одним выводом функции testButton(2) http://prntscr.com/ex3jaq , то все работает как нужно, то есть при нажатии на кнопку на пине 2 происходит единичный вывод следующих строк в монитор:

    Start...


    ********
    Press Button on PIN number
    2
    Realse Button
    ********

    То есть фиксируется нажатие и отпускание кнопки, сколько кнопку не держи, вывод будет один раз.

    Если же я раскомментирую второе использование функции testButton(3) http://prntscr.com/ex3jig , то у Ардуино едет крыша и при нажатии на кнопку один раз он выводит в монитор сразу кучу нажатий http://prntscr.com/ex3i5r

    Я подозреваю, что проблема в том, что переменная bool stateButtonUP (состояние кнопки) задекларирована глобально и когда я раскомментирую вторую функцию, то она меняет ее состояние независимо от первой. Хотя могу и ошибаться.

    Прошу помощи!
    Заранее большое спасибо!
     
  2. Tomasina

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

    зачем нужна переменная timeButton, если она нигде не используется?
     
  3. sslobodyan

    sslobodyan Гик

    Совершенно верно.