设备未响应UART命令



我正在使用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("Rr");

,不要使用String类。它会把你弄乱。:)只需使用char阵列即可填充它们,因为字符可循环使用。当 r 最终到达时,处理数组:

char inputString[16];
int  inputStringIndex = 0;
void loop()
{
  if (Serial.available()) {
    char c = Serial.read();
    if (c == 'r') {
      inputString[ inputStringIndex ] = ''; // NUL-terminate string
      inputStringIndex = 0; // reset for next time
      Serial3.print( inputString );
      Serial3.print( 'r' );
    } else if (inputStringIndex < sizeof(inputString)-1) {
      inputString[ inputStringIndex++ ] = c;
    }
  }

对响应线做类似的事情。这也将避免阻止在Serialevent内部。:p

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

Serial3.begin(9600)

但是在您的问题中,您有

Serial3.print(9600)

并确保您将EZO连接到序列3(14,15)的正确引脚。

还需要使用" "来打印控制字符。

相关内容

  • 没有找到相关文章

最新更新