Arduino库源码:https ://github.com/joranbeasley/SDISerial
我遇到的问题是,当我尝试使用 SDI12 从传感器获取测量值时,我只收到第一个数字,即设备的通道号。
这是它应该如何工作的:
Master: 1M! (Measure)
Sonde: 10617[CR][LF] (ch1, 061s to measure,7 sensors).
Sonde: 1[CR][LF] (Measurement ready)
Master: 1D0! (Send data)
Sonde: 1+17.5+12.05+98.7+8.25+6.45[CR][LF]
Master: 1D1! (Send rest of the data)
Sonde: 1-325+10[CR][LF]
我在 1D0 之后收到的唯一东西!命令为“1”。我认为这一定是因为测量数据设备中的+ - 运算符发送(1+17.5+12.05+98.7+8.25+6.45)。我试图理解库代码(.cpp 和 .h),但没有解决这个问题。关于如何解决这个问题的任何想法?
Arduino代码:
#define DATALINE_PIN 2
#define INVERTED 1
#define MAX_TIMEOUT 1000
//see: http://arduino.cc/en/Reference/attachInterrupt
//for pins that support interupts (2 or 3 typically)
SDISerial connection(DATALINE_PIN, INVERTED);
char b_in[125];
char output_buffer[255];
char tmp_buffer[10];
void wait_for_message(char* buffer,char terminal){
Serial.println("Waiting For input...");
int i=0;
while( true){
if(!Serial.available())delay(500);
else{
buffer[i] = Serial.read();
if(buffer[i] == terminal){
buffer[i+1] = '\0';
return;
}
i+=(buffer[i] >= 32 && buffer[i] <= 127);
}
}
}
void setup(){
Serial.begin(9600);
connection.begin();
delay(1000);
Serial.println("Initialization Complete");
}
void loop(){
wait_for_message(b_in,'!');
sprintf(output_buffer,"[out]:%s",b_in?b_in:"No Output");
Serial.println(output_buffer);
char *response =connection.sdi_query(b_in,MAX_TIMEOUT);
//sprintf(output_buffer,"[in]:%s",response?response:"No Response");
Serial.println(response);
Serial.flush();
delay(1000);
}