Arduino从串口读取字符串 #包括 #定义LED 13 无效设置(){ 引脚模式(LED,输出); Serial.begin(9600); } void循环(){ int i; char命令[5]; 对于(i=0;inumberOfBytes){ 如果(Serial.read()==0x00){//在字符串前面发送一个0作为起始字节 对于(字节i=0;i
我试图用Arduino的序列读取一个4个字符长的字符串,当它是AAAA时打开LED,当它是BBBB时关闭序列 然而,当我输入“AAAA”时,它会读到“AAAÿ”,沿途有很多“ÿ”Arduino从串口读取字符串 #包括 #定义LED 13 无效设置(){ 引脚模式(LED,输出); Serial.begin(9600); } void循环(){ int i; char命令[5]; 对于(i=0;inumberOfBytes){ 如果(Serial.read()==0x00){//在字符串前面发送一个0作为起始字节 对于(字节i=0;i,c,arduino,C,Arduino,我试图用Arduino的序列读取一个4个字符长的字符串,当它是AAAA时打开LED,当它是BBBB时关闭序列 然而,当我输入“AAAA”时,它会读到“AAAÿ”,沿途有很多“ÿ” 我想我读的东西都是正确的,但效果不太好,你知道我做错了什么吗?你应该检查一下是否有可以阅读的内容。如果不是,则read()将返回-1。您可以使用Serial.available()检查读取缓冲区。\define numberOfBytes 4 #include <stdio.h> #define LED
我想我读的东西都是正确的,但效果不太好,你知道我做错了什么吗?你应该检查一下是否有可以阅读的内容。如果不是,则read()将返回-1。您可以使用Serial.available()检查读取缓冲区。
\define numberOfBytes 4
#include <stdio.h>
#define LED 13
void setup() {
pinMode(LED, OUTPUT);
Serial.begin(9600);
}
void loop() {
int i;
char command[5];
for (i = 0; i < 4; i++) {
command[i] = Serial.read();
}
command[4] = '\0';
Serial.println(command);
if (strcmp(command, "AAAA") == 0) {
digitalWrite(LED, HIGH);
Serial.println("LED13 is ON");
} else if (strcmp(command, "BBBB") == 0) {
digitalWrite(LED, LOW);
Serial.println("LED13 is OFF");
}
}
char命令[numberOfBytes];
void serialRX(){
while(Serial.available()>numberOfBytes){
如果(Serial.read()==0x00){//在字符串前面发送一个0作为起始字节
对于(字节i=0;i它读取“ÿ”,因为缓冲区中没有可读取的字符。其他字符从uart缓冲区中取消堆叠需要一些时间。因此,您无法执行读取字符的循环。您必须等待另一个字符可用后才能读取它
此外,这种等待字符的方式不是最好的方式,因为它会阻塞主循环
以下是我在程序中所做的:
String txtMsg = "";
char s;
void loop() {
while (serial.available() > 0) {
s=(char)serial.read();
if (s == '\n') {
if(txtMsg=="HIGH") { digitalWrite(13, HIGH); }
if(txtMsg=="LOW") { digitalWrite(13, LOW); }
// Serial.println(txtMsg);
txtMsg = "";
} else {
txtMsg +=s;
}
}
}
确认您的波特率、停止位、流量控制和奇偶校验在两端都是相同的。即使您“知道这是真的”,也要花3分钟进行验证。节省您自己的时间。您的Serial.begin()
代码是什么?
String txtMsg = "";
char s;
void loop() {
while (serial.available() > 0) {
s=(char)serial.read();
if (s == '\n') {
if(txtMsg=="HIGH") { digitalWrite(13, HIGH); }
if(txtMsg=="LOW") { digitalWrite(13, LOW); }
// Serial.println(txtMsg);
txtMsg = "";
} else {
txtMsg +=s;
}
}
}
String command;
void loop()
{
if(readCommand())
{
parseCommand();
Serial.println(command);
command = "";
}
}
void parseCommand()
{
//Parse command here
}
int readCommand() {
char c;
if(Serial.available() > 0)
{
c = Serial.read();
if(c != '\n')
{
command += c;
return false;
}
else
return true;
}
}