1

我刚刚开始使用 Arduino,对更多高级的东西几乎一无所知。这似乎很简单。现在我是一个通常喜欢将两个设备集成在一起的人,所以我想知道我是否可以用计算机的键盘或连接到 Arduino 板上的两个硬件按钮来控制伺服。

如果有帮助,我使用的是 Arduino Uno 板。这是我现在用来扫描伺服的示例代码

// 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,按下一个按钮会根据按钮向左或向右移动伺服系统。我会将按钮插入哪些端口?任何代码示例或图表都会有很大帮助!

4

2 回答 2

1

要移动连接到连接到计算机的 arduino 的伺服系统,您需要两个组件。

您将需要计算机上的软件来接受键盘命令并通过串行端口向 arduino 发送命令。我会推荐一种像 python 或 java 这样的语言来做到这一点,因为一个简单的应用程序可以很容易地编写。

检查此游乐场链接以获取使用 Java 的示例。对于 python 中的示例,请查看此项目

arduino 内置了一个错误/功能,当您继续操作时,它会让您感到悲伤。arduino 设计为在通过 USB 进行串行连接时自动重置。 此页面对问题进行了详细描述,并列举了几种处理方法。

您将需要修改 arduino 上的草图以侦听串行端口并根据从计算机收到的命令调整伺服的位置。查看上面的 python 链接。这是一个完整的(硬件、PC 软件和 arduino 草图)项目,旨在做一些与您正在尝试做的事情非常相似的事情。

我建议您从任一组件开始并尝试让它运行。当您遇到问题时,发布您的代码,有人会很乐意提供进一步的帮助。

至于第二个问题,向 arduino 添加按钮相当简单。您将它们连接到数字输入。网上有数百个例子。搜索“向 arduino 添加按钮”,看看你得到了什么。(大声笑... 130 万次点击)。再次在这里尝试并发布详细信息以获得更多帮助。

于 2012-06-03T08:58:13.660 回答
0

对于串行通信,使用 putty
它是一个跨平台的串行和 ssh 客户端

对于左右箭头命令:箭头
没有 ascii 字符:但有 utf-8;
putty 或其他客户端发送 utf-8 字符,因为基本的 ascii 字符是 utf-8 和 ascii 完全相同;

arduino 只读取 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;那是无效的,所以 in 不起作用

你可以编写一个算法从 5 个 ascii 字符中减去箭头命令

或者您可以使用 4 向左移动和 6 向右移动;它们是 ascii 字符,在数字键盘中是在这些键上绘制的箭头

于 2012-06-08T10:51:08.310 回答