3

我将首先解释我的总体目标,然后是问题本身。

总体的目标:

向连接到路由器的 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 是服务器。发生这种情况,我会进行编辑。

4

1 回答 1

1

首先替换你的跨度:

<form name='myform' method='GET' action="scriptURL">
    Key Pressed : <input type="text" id="kp" name="KP"></span>
    <br />
    Key Code : <input type="text" id="kc" name="KC"></span>
</form>

(这将生成一个如下所示的网址:scriptURL?KP=xxx&KC=yyy

如果你想要一些重量很轻的东西,那么如何:

<script>     
  document.onkeydown = function(event) {
    var key_press = String.fromCharCode(event.keyCode);
    var key_code = event.keyCode;
    document.getElementById('img').src = "scriptURL?KP=" + key_press + "&KC=" + key_code;
  }
</script>

<img src="scriptURL" id="img" style="display:none;"/>

每次按键都会触发图像的重新加载(它是隐藏的),无论返回的数据如何,服务器上的脚本都会实时接收 KP 和 KC 参数。

于 2012-05-15T03:03:05.513 回答