我想从loop()方法之外的键盘读取Arduino中的String。
我有以下方法:
void readFromKeyboard(byte arrayAddress[])
{
int count = 0, i = 0;
while ((count = Serial.available()) == 0);
while (i<count)
{
arrayAddress[i++] = Serial.read();
}
}
在loop()方法中,我称之为:
readFromKeyboard(userInput);
其中userInput是byte [];
问题是当我输入多个字符时,它最初读取第一个字符并再次调用 readFromKeyboard 然后读取其余字符。
示例;如果我输入“ asdf ”:
- 它第一次做==&gt; userInput =“ a ”
- 它第二次做==&gt; userInput =“ sdf ”
我尝试过很多东西,但同样的事情一次又一次地发生...... 有什么建议??
答案 0 :(得分:0)
这样做有用:
在 循环() :
中while(Serial.available() == 0);
delay(100);
readInputFlag = readFromKeyboard(userInput);`
在 readFromKeyboard 方法中:
void readFromKeyboard(byte arrayAddress[])
{
int i = 0;
while (Serial.available() > 0)
{
arrayAddress[i++] = Serial.read();
}
}
这种延迟,在循环方法中,以某种方式使串行获取整个字符串而不是第一个字母。
答案 1 :(得分:0)
我知道你让它运转了,但我想向你展示一些我用来处理这个问题的东西。这是一个双层延迟系统,用于捕获由于某种原因而迟到的字节。它旨在最大限度地减少完成该任务所需的延迟。
int received_length = 0;
byte serial_incoming_buffer[200];
while(Serial.available()) {
serial_incoming_buffer[received_length++] = Serial.read();
if(!Serial.available()) {
delay(3);
if(!Serial.available()) {
delay(20);
}
}
}
有时候,Arduino会从发送者那里收集序列号,但有时它会过快地抓取序列号。有时候发件人会稍稍滞后。这段代码将等待3毫秒以获得更多字节,如果它们进入,它将返回接收尽可能多的只有非常短暂的延迟。这在必要时重复,然后当3毫秒没有任何可用时,它会等待更长的时间(此处为20毫秒)以获得更多字节。如果在长时间延迟后没有任何信息进入,则很可能完成传输,您可以安全地继续前进。
我建议根据您的波特率调整延迟。