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 设备不响应UART命令_Arduino_Uart_Usart - Fatal编程技术网

Arduino 设备不响应UART命令

Arduino 设备不响应UART命令,arduino,uart,usart,Arduino,Uart,Usart,我正在使用Arduino mega2560和EZO EC(导电性),并试图使用Serial.print()函数发送命令。我正在使用Arduino IDE 1.6.7 我有一些代码,似乎工作良好,这是我在网上找到的。但是我想知道为什么我的代码不能工作。EC传感器似乎没有收到我发送的数据。似乎没有发送任何数据 我知道这不是我的连接,因为我已经用运行正常的代码测试了设置,它运行良好,符合预期 以下是我在网上找到的代码: String inputstring = "";

我正在使用Arduino mega2560和EZO EC(导电性),并试图使用Serial.print()函数发送命令。我正在使用Arduino IDE 1.6.7

我有一些代码,似乎工作良好,这是我在网上找到的。但是我想知道为什么我的代码不能工作。EC传感器似乎没有收到我发送的数据。似乎没有发送任何数据

我知道这不是我的连接,因为我已经用运行正常的代码测试了设置,它运行良好,符合预期

以下是我在网上找到的代码:

String inputstring = "";                              
String sensorstring = "";                             
boolean input_string_complete = false;              
boolean sensor_string_complete = false;             

void setup() {                                        
  Serial.begin(9600);                                 
  Serial3.begin(9600);                                
  inputstring.reserve(10);                           
  sensorstring.reserve(30);                          

}


void serialEvent() {                                 
  inputstring = Serial.readStringUntil(13);          
  input_string_complete = true;                       
}


void serialEvent3() {                                
  sensorstring = Serial3.readStringUntil(13);        
  sensor_string_complete = true;                      
}


void loop() {                                        
  float wt = 28.9;
  String tempCal = "T,";
  tempCal += wt;
  if (input_string_complete == true) {                
    Serial3.print(inputstring);
    Serial3.print("\r");                             
    inputstring = "";                                 
    input_string_complete = false;                    
  }

  if (sensor_string_complete == true) {               
    if (isdigit(sensorstring[0]) == false) {          
      Serial.println(sensorstring);                  
    }
    else                                             
      print_EC_data();                                
    }
    sensorstring = "";                                
    sensor_string_complete = false;                   
  }
}


void print_EC_data(void) {                           

  char sensorstring_array[30];                        
  char *EC;                                          
  char *TDS;                                          
  char *SAL;                                         
  char *GRAV;                                         
  float f_ec;                                         

  sensorstring.toCharArray(sensorstring_array, 30); 
  EC = strtok(sensorstring_array, ",");              
  TDS = strtok(NULL, ",");                            
  SAL = strtok(NULL, ",");                            
  GRAV = strtok(NULL, ",");                         

  Serial.print("EC:");                                
  Serial.println(EC);                                 
  Serial.print("TDS:");                             
  Serial.println(TDS);                               
  Serial.print("SAL:");                            
  Serial.println(SAL);                                
  Serial.print("GRAV:");                             
  Serial.println(GRAV);                               
  Serial.println();                                  

//f_ec= atof(EC);                                     
}
这是我的密码:

void setup() {
  Serial.begin(9600);
  Serial3.print(9600);
}
void loop() {
  Serial3.print("R/r");
  Serial.print("R/r");
  delay(2000);
}
Serial3.print无法发送到传感器。但是另一段代码也使用Serial3.print()函数发送一个字符串,它工作正常。我不知道我做错了什么

我知道我需要编写一个程序来接收来自传感器的任何信息。但一开始似乎什么也没有发送到传感器


任何帮助都将不胜感激。谢谢你

你用的是斜杠,不是反斜杠。改变这个

Serial3.print("R/r");
为此:

Serial3.print("R\r");
不要使用
字符串
类。这会把你搞砸的。:)只需使用字符数组,并将其填充为循环中可用的字符。当\r\n最终到达时,处理数组:

char inputString[16];
int  inputStringIndex = 0;

void loop()
{
  if (Serial.available()) {
    char c = Serial.read();
    if (c == '\r') {
      inputString[ inputStringIndex ] = '\0'; // NUL-terminate string
      inputStringIndex = 0; // reset for next time

      Serial3.print( inputString );
      Serial3.print( '\r' );

    } else if (inputStringIndex < sizeof(inputString)-1) {
      inputString[ inputStringIndex++ ] = c;
    }
  }
char输入字符串[16];
int inputStringIndex=0;
void循环()
{
if(Serial.available()){
char c=Serial.read();
如果(c=='\r'){
inputString[inputStringIndex]='\0';//NUL终止字符串
inputStringIndex=0;//下次重置
Serial3.打印(inputString);
Serial3.打印('\r');
}else if(inputStringIndex

对响应行执行类似的操作。这也将避免在SerialEvent内部阻塞。:p

您使用的是斜杠,而不是反斜杠。更改此选项

Serial3.print("R/r");
为此:

Serial3.print("R\r");
不要使用
String
类。它会把你搞得一团糟。:)只需使用字符数组,并将它们填充为循环中可用的字符。\r最终到达时,处理数组:

char inputString[16];
int  inputStringIndex = 0;

void loop()
{
  if (Serial.available()) {
    char c = Serial.read();
    if (c == '\r') {
      inputString[ inputStringIndex ] = '\0'; // NUL-terminate string
      inputStringIndex = 0; // reset for next time

      Serial3.print( inputString );
      Serial3.print( '\r' );

    } else if (inputStringIndex < sizeof(inputString)-1) {
      inputString[ inputStringIndex++ ] = c;
    }
  }
char输入字符串[16];
int inputStringIndex=0;
void循环()
{
if(Serial.available()){
char c=Serial.read();
如果(c=='\r'){
inputString[inputStringIndex]='\0';//NUL终止字符串
inputStringIndex=0;//下次重置
Serial3.打印(inputString);
Serial3.打印('\r');
}else if(inputStringIndex

对响应行执行类似的操作。这也将避免在SerialEvent内阻塞。:p

您的
设置()中有错误。
阻塞:在通过串行连接发送数据之前,您需要使用语句配置连接:

Serial3.begin(9600)
但是在你问题的代码中你有

Serial3.print(9600)
并确保将EZO连接到(14,15)的正确引脚


您还需要使用“\”来打印控制字符。

您的
setup()
块中有一个错误:在通过串行连接发送数据之前,您需要使用一条语句配置连接:

Serial3.begin(9600)
但是在你问题的代码中你有

Serial3.print(9600)
并确保将EZO连接到(14,15)的正确引脚


您还需要使用“\”来打印控制字符。

Hi-slash-dev,好的,我会试试这个。但是我如何理解传感器,是传感器应该向它连接的Arduino串行排序发送一个“*ER”。如果它已经发送了命令,但是那些不理解它的人。它将发送“*OK”如果它理解它。那么它至少应该接收我发送的命令。例如,如果我发送“R”,那么它至少应该接收命令。但是从我的测试中,我知道它甚至没有接收到它。你能解释为什么会这样吗?问:为什么要将它设置为Serial.available()和Serial.read()?它是否应该是Serial3?因为我想直接写入序列。3根本不想使用Serial0。或者这是必要的?@JohnB.,您的程序使用
serialEvent
序列中读取
输入字符串
(与序列0一样)。我假设这是对传感器的一个命令。我只是从您的草图开始工作。剪切并粘贴我的代码部分以读取Serial3,并在\r最终到达时处理响应。还要注意mhopeng下面的回答:
Serial3。在
设置中打印
应该是
Serial3。开始
,LOL。感谢您的帮助。我的代码has现在已经工作了两周多。干杯:>>嗨,slash dev,好的,我会试试这个。但是我如何理解传感器,是传感器应该向它连接的Arduino串行排序发送一个“*ER”。如果它已经发送了命令,但是那些不理解它的人。它将发送“*OK”如果它理解它。那么它至少应该接收我发送的命令。例如,如果我发送“R”,那么它至少应该接收命令。但是从我的测试中,我知道它甚至没有接收到它。你能解释为什么会这样吗?问:为什么要将它设置为Serial.available()和Serial.read()?它是否应该是Serial3?因为我想直接写入序列。3根本不想使用Serial0。或者这是必要的?@JohnB.,您的程序使用
serialEvent
序列中读取
输入字符串
(与序列0一样)。我假设这是对传感器的一个命令。我只是从您的草图开始工作。剪切并粘贴我的代码部分以读取Serial3,并在\r最终到达时处理响应。还要注意mhopeng下面的回答:
Serial3。在
设置中打印
应该是
Serial3。开始
,LOL。感谢您的帮助。我的代码has在两周多的时间里表现良好。干杯:>>