【问题标题】:Arduino Leonardo keyboard behaviorArduino Leonardo 键盘行为
【发布时间】:2016-03-19 14:45:21
【问题描述】:

我想使用 Arduino Leonardo 作为内置库的键盘输入。

boolean on;

void setup() {
  pinMode(13, OUTPUT);

  pinMode(2, INPUT_PULLUP);
  pinMode(3, INPUT_PULLUP);

  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);

  Keyboard.begin();
  on = true;
}

void loop() {
  if(digitalRead(2) == LOW) {
    Keyboard.end();
    on = false;
  }
  digitalWrite(13, on);

  if(digitalRead(3) == LOW) {
    Keyboard.press('w');
  }
  else {
    Keyboard.release('w');
  }

}

在我运行“Keyboard.end()”后,“Keyboard.press()”功能仍然有效是否正常?

我只是不想让 Arduino 坏掉。

【问题讨论】:

    标签: keyboard arduino


    【解决方案1】:

    你已经使用了 begin() 函数:

    void setup()
    {
      pinMode(13, OUTPUT);
    
      pinMode(2, INPUT_PULLUP);
      pinMode(3, INPUT_PULLUP);
    
      digitalWrite(2, HIGH);
      digitalWrite(3, HIGH);
    
      Keyboard.begin();
      on = true;
    }
    

    你已经结束了交流

     if(digitalRead(2) == LOW) {
        Keyboard.end();
        on = false;
      }
    

    一旦 digitalRead(2) 值变低,通信协议就会停止。您必须先使用另一个 Keyboard.begin():

    if(digitalRead(3) == LOW)
    {
        Keyboard.press('w');
    }
    

    最佳做法是在void loop() 中使用Keyboard.begin();

    【讨论】:

      【解决方案2】:

      从你想要做的事情来看,你应该这样做:

      #include <Keyboard.h>
      boolean on;
      boolean disable;
      
      void setup() {
        pinMode(13, OUTPUT);
      
        pinMode(2, INPUT_PULLUP);
        pinMode(3, INPUT_PULLUP);
      
        digitalWrite(2, HIGH);
        digitalWrite(3, HIGH);
      
        disable = false;
        on = true;
      }
      
      void loop() {
        if(digitalRead(2) == LOW) {
          disable = true;
          on = false;
        }
      
        digitalWrite(13, on);
      
        if(disable == false) {
          if(digitalRead(3) == LOW) {
            Keyboard.press('w');
          }
          else {
            Keyboard.release('w');
          }
        }
      }
      

      我一开始使用的#include是因为我使用的是最新版本的Arduino IDE。

      无论如何,无论您使用的是您的版本还是最新版本的 Arduino IDE,Keyboard.begin()Keyboard.end() 什么都不做,因为我只是在类似 Arduino Leonardo 的板上测试了它(我使用的是 Leostick真正的 Arduino)。

      我不确定我是否完全正确。它可能取决于不同的操作系统(即使我尝试了 Windows 和 Mac 都没有出错)。老实说,我将它们留在那里只是为了安全起见,也是为了让您的代码更易于理解。

      顺便说一句,你不会破坏你的 Arduino。

      【讨论】:

        【解决方案3】:

        键盘beginend 目前不执行任何操作,省略它们不会影响您的代码。如果你去Keyboard Library Github repo查看beginend函数,你会发现它们是空的

        void Keyboard_::begin(void)
        {
        }
        
        void Keyboard_::end(void)
        {
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-08-17
          • 1970-01-01
          • 2019-08-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-13
          • 1970-01-01
          相关资源
          最近更新 更多