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