我对arduino (uno)缓冲区溢出有问题。我试图创建一个简单的应用程序,在其中我插入b(蓝色二极管)或r(红色二极管)或空格(空格不打开任何二极管)通过PHP页面进入表单,发送它,然后蓝色或红色二极管亮起。Arduino通过USB (COM3)连接:我将"br b rbrb“插入文本区域,前9个字符通过二极管灯显示,但在第九个字符arduina缓冲区可能被填充之后,其他字符在大约10秒后被显示(由二极管显示)。如果有人知道怎么修的话,我想谢谢你。
顺便说一句,如果我在arduino应用程序中使用串行监视器,这个问题就不是,缓冲区也不会填满,因此arduino将处理整个字符串("br b rbrb"),而不会干扰第九个字符。
Arduino代码:
int red_2=4;
int blue_1=5;
void setup() {
Serial.begin(9600);
// set diodes for outputs
pinMode(red_2, OUTPUT); // red
pinMode(blue_1, OUTPUT); // blue
//all diodes going LOW in start
digitalWrite(red_2, LOW);
digitalWrite(blue_1, LOW);
}
void loop() {
char var_characters;
if (Serial.available() > 0) {
var_characters = Serial.read();
if (var_characters == ' ') {
Serial.println("Reading charakter: 'space' ");
delay(500);
digitalWrite(red_2, LOW);
digitalWrite(blue_1, LOW);
}
if (var_characters == 'b') {
digitalWrite(blue_1, HIGH);
Serial.print("Reading charakter: ");
Serial.println(var_characters);
delay(500);
digitalWrite(blue_1, LOW);
}
if (var_characters == 'r') {
digitalWrite(red_2, HIGH);
Serial.print("Reading charakter: ");
Serial.println(var_characters);
delay(500);
digitalWrite(red_2, LOW);
}
}
} PHP代码:
<html>
<head>
<title>PHP and Arduino</title>
</head>
<body>
<?php
exec("mode COM3: BAUD=9600 PARITY=n DATA=8 STOP=1 to=off dtr=off rts=off");
$port = fopen("COM3", "w+");
sleep(2);
?>
<center>
<h1>PHP and Arduino</h1>
<form method="post">
Message: <textarea type="text" name="msg_form"></textarea>
<input type="submit" name="send1">
</form>
<br>
</center>
<?php
if (isset($_POST['send1'])) {
$msg_post = $_POST['msg_form'];
echo "<center> $msg_post </center>";
fwrite($port, "$msg_post");
}
fclose($port);
?>
</body>
</html>发布于 2020-03-11 13:46:42
您的delay(500);调用禁止每秒读取两个以上字符。
有几种方法可以改善这种行为。
请记住,Uno串行输入缓冲区非常有限(64 char)。
如果发送例如"br b rbrb“(11个字符)的时间序列超过5秒,则发送方只需等待足够长的时间就可以发送下一个序列(最简单的手动发送)。
但是,您的溢出问题描述并不适合(发送的buffer_size小于64 char ?)。请仔细看看。
https://stackoverflow.com/questions/60637030
复制相似问题