我刚刚开始使用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
}
}
现在,假设我想通过按下来改变伺服角度 计算机键盘上的左/右箭头键。我怎么去 关于这样做?
或者,如果我将两个按钮连接到Arduino, 然后按下一个可以向左或向右移动伺服 在按钮上。我将哪些端口插入按钮?任何 代码示例或图表会有很大帮助!
答案 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因此阅读它并不那么简单。
你可以使用这样的东西
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字符和数字小键盘是在这些键上绘制的箭头