用键盘或其他硬件按钮控制伺服?

时间:2012-06-03 07:50:18

标签: c arduino

我刚刚开始使用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, 然后按下一个可以向左或向右移动伺服 在按钮上。我将哪些端口插入按钮?任何 代码示例或图表会有很大帮助!

2 个答案:

答案 0 :(得分:1)

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

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

检查此playground link以获取使用Java的示例。并在python中查看示例this project

arduino中内置了一个错误/功能,当你在这里时会让你感到悲伤。 arduino设计为在通过usb进行串行连接时自动复位。 This page详细描述了该问题,并列举了几种处理问题的方法。

您需要修改arduino上的草图以收听串口并根据从计算机接收的命令调整伺服位置。看看上面的python链接。它是一个完整的(硬件,个人电脑软件和arduino草图)项目,旨在做一些非常类似于你想要做的事情。

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

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

答案 1 :(得分:0)

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

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

并且arduino只读取ascii字符;

arduino读到了 - &GT; :27,91,67
&lt; - :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字节发送en当你冲洗它可以冲洗27所以你读91,97,27;这是无效的,所以不起作用

你可以编写一个算法来从5 ascii char的

中减去箭头命令

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