我们正在建造一个漫游车,应该通过网络对其进行控制。它由十几个分工的arduino组成。一种专门用于语音命令和文本转语音,两种专用于控制一系列超声波传感器,依此类推。
为了广播消息,以便其他元素可以读取和使用所需的任何信息,我们决定使用can-bus系统。问题位于界面和pi的can-hat之间。
工作: -具有php内置界面的Pi网络服务器:可访问且正常运行。 -名为can_send的Pi c文件可执行文件,该文件接收两个参数(id和message)并驱动can-hat。 -Arduino读取器,一种通用的arduino,可在我们的PC串行监视器上输出接收到的can消息。它可以正常工作,并且通过在Pi上启动can_send可以获取正确的信息。
不工作: -在网络服务器上,没有刷新或中间没有页面,我们应该单击一个按钮并执行can_send脚本。
我们最初的想法是这样的: PHP界面->按钮onclick-> javascript函数->执行shell_exec的PHP文件。
我们现在被打到这里了。不知道我们是在挖坟墓还是迈向成功的一步。
Web界面上的按钮:
<button style='width: 100px; height: 100px;background: url(./design/images/right.png)' onclick='cantxedx()' />
javascript函数(在页面顶部声明)
function cantxedx() {
var x = new XMLHttpRequest();
x.open("GET", "../SCRIPTS/can_transmission.php?id=15&msg=001" + document.getElementbyId('myRangeThr'), true);
x.send();
return false;
}
</script>
can_transmission.php如下:
//can_transmission.php
$TXmsgid= $_GET['id'];
$TXmsg= $_GET['msg'];
//formattazione stringa
$wordsize = sizeof($TXmsg);
if($wordsize<8)
{
while($wordsize<8)
{
$TXmsg= $TXmsg . "0";
$wordsize = sizeof($TXmsg);
}
}
if($wordsize>8)
{
//placeholder for building long messages
}
$TXstring= "sudo /var/www/html/SCRIPTS/c/can_send ".$TXmsgid." ".$TXmsg;
$handle = fopen("log.txt", "a+");
fwrite($handle, $TXstring);
fclose($handle);
shell_exec($TXstring);
?>
还有一个滑块,用于设置罐头消息的最后一部分的值
<div align='center'>
<p>THROTTLE</p>
</div>
<div class='slidecontainerv'>
<input type='range' min='5' max='100' step='5' value='50' class='sliderv' id='myRangeThr' orient='vertical' width='500'>
</div>
<div align='center'>
<p>Value: <span id='throttle'></span>%</p>
</div>
这个想法是: 单击html按钮时,将执行所需的javascript函数。
在此函数中,我们调用传输文件,传递所需的信息(消息的ID,与味精的第一个数字中按下的按钮有关的一些信息以及从滑块读取的另一个值)
传输文件驱动can-hat,然后由arduino排读取并使用该消息。
按钮和传输文件之间的某处不起作用。单击按钮时,没有任何反应,不会显示新的can-bus消息或新的日志行。
新信息
我们整理出一些东西: 在HTML按钮中,我们添加了
onclick='cantxebw(\"010\")
这使我们能够减少javascript功能(每个按钮不减少一个)。 在JavaScript中,我们收集了信息,然后得到了:
function cantxebw(jdir) {
var jid = '10';
var slider = document.getElementById('myRangeThr');
var vt = slider.value;
var vtx = jid + jdir + vt;
alert(vtx);
$.ajax({
url: '../SCRIPTS/can_transmission.php',
type: 'POST',
data: {'id':'jid', 'msg':'vtx'},
success: function(data) {
console.log(data); // Inspect this in your console
}
});
};
</script> ";
这时,单击按钮后,我们将显示一个警报窗口,其中显示了所需的正确值。 问题是: -ajax函数不调用php脚本或不发送值(我们尝试使用简单的形式,在can_transmission上使用相同的值和$ _POST并起作用)。
即使是这样的形式,我们也无法通过shell exec来操作(通过控制台脚本can_send可以工作,但不能通过shell_exec)。在这里,我们尝试使用fileexist和bot使用完整路径或相对路径工作来查看路径是否正确。