1

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);
   
}
4

0 回答 0