早上好/下午/晚上。我试图建立这个项目,我有两个arduinos(发射器和接收器),他们将使用RF控制进行通信。发射器/控制器在连接电位器的情况下读取2个不同的模拟输入,创建一个名为" Parametro"使用两个电位计的值(例如:" 05120512" - 50%/ 50% - " 10231023" - 100%/ 100%)并使用Serial将此字符串串行发送到接收器.PRINT(parametro)。它运作得很好。
问题是:如何在另一个Arduino上将String作为String读取。我试图读取String的每个字节并使用这些值创建一个char数组,然后将其转换回String。但是,有一些我无法解释的错误。我试图改变延迟()时间,它起初工作,但随后,数字随机或其他。我将电位计留在中间位置,所以当我使用Serial.print(parametro)将数据从控制器直接发送到串行监视器时,它按预期工作:" 05120512051205120512 ...."
但是当我尝试使用Serial.println(parametro)从接收器发送它时,它给了我类似的东西:
正如你所看到的那样,数字开始变得混乱,我不明白为什么。任何人都可以告诉我另一种解决方案或告诉我我做错了什么吗?
顺便说一句,这是接收器的代码。正如我所说,发射器工作正常:
// READING FUNCTION
String lerString(){
String conteudo = "";
char caracteres[8];
// WHILE RECEIVING
for(int i=0;i<=7;i++){
caracteres[i] = Serial.read();
delay(10);
conteudo.concat(caracteres[i]);
}
return conteudo;
}
void loop() {
// SERIAL READ
if(Serial.available() > 0){
parametro = lerString();
}
Serial.println(parametro);
}
&#13;
答案 0 :(得分:0)
根据给出的信息,我假设您的问题与您每次可用时读取串行端口有关(不一定是您想要的整个8字节/字符)。
只要串口上有任何单个字符,您的支票Serial.available() > 0
就为真。这意味着您过早地调用lerString()
函数。
将检查调整为大于您希望接收的消息的大小(例如8个字节)。
void loop() {
// SERIAL READ
// Change from 0 to 8 VVV
if(Serial.available() >= 8){
parametro = lerString();
Serial.println(parametro);
}
}
答案 1 :(得分:0)
如果您使用分隔符并实现一个简单的状态机来引导您完成解析(例如,字符串 - &gt;“#05120512”,那么您将获得更强大的实现,就像您的接收函数看起来一样:
ele.text(_time);
警告:未经测试的代码 - 请谨慎行事