Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino从串口读取字符串 #包括 #定义LED 13 无效设置(){ 引脚模式(LED,输出); Serial.begin(9600); } void循环(){ int i; char命令[5]; 对于(i=0;inumberOfBytes){ 如果(Serial.read()==0x00){//在字符串前面发送一个0作为起始字节 对于(字节i=0;i_C_Arduino - Fatal编程技术网

Arduino从串口读取字符串 #包括 #定义LED 13 无效设置(){ 引脚模式(LED,输出); Serial.begin(9600); } void循环(){ int i; char命令[5]; 对于(i=0;inumberOfBytes){ 如果(Serial.read()==0x00){//在字符串前面发送一个0作为起始字节 对于(字节i=0;i

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

我试图用Arduino的序列读取一个4个字符长的字符串,当它是AAAA时打开LED,当它是BBBB时关闭序列

然而,当我输入“AAAA”时,它会读到“AAAÿ”,沿途有很多“ÿ”


我想我读的东西都是正确的,但效果不太好,你知道我做错了什么吗?

你应该检查一下是否有可以阅读的内容。如果不是,则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;

    }
}