用键盘或其他硬件按钮控制伺服?(Control servo with keyboard or oth

2019-09-17 17:49发布

我刚开始得到与Arduino的,几乎有更多的先进的东西的想法。 这似乎很简单。 现在我一个谁平时最喜欢的两个设备整合在一起,所以我想知道如果我能控制与计算机的键盘或连接到Arduino板两个硬件按钮伺服装置。

如果有帮助,我使用一个Arduino板乌诺。 下面是示例代码我使用扫伺服现在

// Sweep
// by BARRAGAN <http://barraganstudio.com> 
// This example code is in the public domain.


#include <Servo.h> 

Servo myservo;  // create servo object to control a servo 
            // a maximum of eight servo objects can be created 

int pos = 0;    // variable to store the servo position 

void setup() 
{ 
  myservo.attach(11);  // attaches the servo on pin 9 to the servo object 
} 


void loop() 
{ 
  for(pos = 0; pos < 45; pos += 1)  // goes from 0 degrees to 180 degrees 
  {                                  // in steps of 1 degree 
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(10);                       // waits 15ms for the servo to reach the position 
  } 
  for(pos = 45; pos>=1; pos-=1)     // goes from 180 degrees to 0 degrees 
  {                                
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(10);                       // waits 15ms for the servo to reach the position 
  } 
}
  1. 现在,让我们说,我想通过我按下电脑键盘上的左/右箭头键来改变伺服的角度。 我将如何去这样做?

  2. 或者,如果我有什么附加的两个按钮到Arduino,并按下一个会移动的伺服或左或右视按钮。 哪些端口,我会堵塞按钮进入? 任何代码示例或图表将极大地帮助!

Answer 1:

若要移动连接到连接到你需要两个组件的计算机一个Arduino伺服装置。

您需要在您的计算机上的软件来接受键盘命令,并通过串口发送命令到Arduino。 我会推荐一个语言如Python或Java来做到这一点作为一个简单的应用程序可以很容易地编写。

检查这个操场链接使用Java的一个例子。 而对于一个例子在Python检查这个项目 。

有建成,这将使你悲伤,你在这里去Arduino的一个bug /功能。 Arduino的设计为自动复位时,串行连接到它通过USB制成。 此页面有问题的详细说明,并列举了几种方法来对付它。

您将需要修改Arduino的草图根据您的计算机接收到的命令听串口和调整伺服的位置。 退房蟒蛇以上链接。 这是一个完整的(硬件,电脑软件以及Arduino的草图)项目设计做的非常相似,你正在尝试做一些事情。

我建议你开始与任一部件,并设法得到它去。 当你遇到问题,发布您的代码,有人会很乐意进一步帮助。

至于第二个问题,将按钮添加到Arduino是相当简单的。 您将它们连接到数字输入。 有数以百计的网站上的例子。 搜索“添加按钮的Arduino”,看看你会得到什么。 (笑...... 130万次点击)。 在这里,尝试一下,以获得更多帮助发布细节。



Answer 2:

对于串行通信使用腻子
它是一个跨平台的串行和SSH客户端

为左,右箭头命令:
有对箭头的无ascii字符:但也有UTF-8;
油灰或其它客户端发送UTF-8字符的基本ASCII字符是UTF-8和ASCII完全相同;

和阿尔杜伊诺只读取ASCII字符;

Arduino的读取
- >:27,91,67
< - :27,91,68

所以它不是那么简单的读取。

你可以使用这样的事情

int pos = 0;
Serial.flush(); // flush all received data
while(Serial.avaialble()<3); // wait for the 3 ascii chars
if(Serial.read()==27){ // first char
  if(Serial.read()==91){ //second char
    switch (Serial.read()){
      case 67: // Right arrow
        myservo.write(++pos); // increment pos with 1 before write it
        break;
      case 68: // left arrow
        myservo.write(--pos); // derement pos with 1 before write it
        break;
      case 65: // up arrow
        myservo.write(++pos); // increment pos with 1 before write it
        break;
      case 66: // down arrow
        myservo.write(--pos); // decrement pos with 1 before write it
        break;
      case default:
        break;
    }
  }
}

但这不是因为箭头人物的一个好的解决方案在3个字节的发送,当你冲它可以冲洗27所以你看恩91,97,27; 那就是没有有效所以不工作

你可以写一个算法减去箭头命令出的5点ASCII字符的

或者您可以使用4移动到左,6向右移动; 其是ASCII字符和在数字小键盘上的键的那些绘制的箭头



文章来源: Control servo with keyboard or other hardware buttons?
标签: c arduino