我将首先解释我的总体目标,然后是问题本身。
总体的目标:
向连接到路由器的 Arduino 板发送命令。一台电脑将通过wifi连接到路由器。Arduino 将为本地网站提供服务,计算机将使用该网站向 Arduino 发送按键。根据按键的不同,Arduino 将以某种方式运行。
向 Arduino 发送命令的一种方法是使用 Arduino 服务的网站 URL 末尾的参数。Arduino 可以读取这些参数。我对此没有任何问题。
Arduino 能够为使用 Javascript/HTML/CSS 等编码的网站提供服务。
问题:
我已经使用 Javascript 一个星期了;但到目前为止,我有以下代码:
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
function Submit()
{
document.forms['myform'].submit();
}
document.onkeydown = function(event) {
var key_press = String.fromCharCode(event.keyCode);
var key_code = event.keyCode;
document.getElementById('kp').innerHTML = key_press;
document.getElementById('kc').innerHTML = key_code;
var t=setTimeout("Submit()", 500);
}
</script>
</head>
<form name='myform' method='GET'>
Key Pressed : <span id="kp" name="KP"></span>
<br />
Key Code : <span id="kc" name="KC"></span>
</form>
</html>
有了这个,我可以从我敲击的键盘上看到键的“键码”。该网站将看到按键,输出按键代码和实际按键。
我把设置超时功能放在那里,所以当我拿着一个键时,页面以更慢、恒定的速率刷新。
我知道 HTML 中的某些东西会自行创建和管理参数。例如,下拉框。据我了解,当下拉框放入
<form method='GET'></form>
标签,您可以创建参数。文本框也会做同样的事情。然后,如果一个人“提交”了网页,那么这些对象中的调整值将出现在 URL 的参数中。
但是,我不知道如何将键码的值输出到对象,然后提交页面以将值实时复制到 URL 参数。
通过实时:例如,我的意思是在我按下“向上”时继续发送命令,并在我释放时停止。
我可以通过在文本框中输入一个字母并使用提交按钮将值输入到 URL 参数中来完成此操作的粗略版本。但是,我不能在其中包含向上或向下箭头,并且我希望网页能够实时提交。
TLDR:如何使用键盘上的键码实时控制 URL 中的参数?
非常感谢您阅读本文。非常感谢所有回复。
编辑 5/15/12 web_bod 给了我一些有用的代码。这是完整的新代码:
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
function Submit()
{
document.forms['myform'].submit();
}
document.onkeydown = function(event) {
var key_press = String.fromCharCode(event.keyCode);
var key_code = event.keyCode;
document.getElementById('kp').innerHTML = key_press;
var t=setTimeout("Submit()", 500);
}
</script>
</head>
<body onLoad='document.myform.KP.focus()'>
<form name='myform' method='GET' action="ENTER URL HERE">
Key Pressed : <input type="text" id="kp" name="KP"></span>
</form>
</body>
</html>
我将网页焦点放在了文本框上。没有它,我必须点击文本框,然后代码才能最终注册。
它的表现如何:当网页加载时,页面将自动聚焦在文本框上。它等待按键。按一个键:半秒后页面会加载字母到URL的参数(你可以用setTimeout()让它响应更快)。该键将保留在参数中,直到按下另一个键。
我知道乞丐不能成为选择者,但我希望它能够执行“视频游戏风格”,其中一个动作持续很长时间,我按下一个键,并且在我释放键的那一刻动作停止。在这种情况下,如果您按住一个键,文本框将填充字母,然后提交。这行不通,因为我希望 Arduino 查找单个字符,而不是字符列表。然而,到目前为止这真的很棒。我当然不介意实施这一点。
但是,正如 Tim 所提到的,我一直在对套接字通信进行大量研究。这似乎是一条好路,Arduino Ethernet Shield 使用 UDP 库,到目前为止,我唯一的困难是设置客户端。Arduino 是服务器。发生这种情况,我会进行编辑。