串行通信中的inStream.read

时间:2012-03-17 10:34:52

标签: java at-command

我正在尝试使用TC65调制解调器监控远程设备的温度。要请求,'C'必须在结尾处带回车。问题是,我只能在手机上看到这个:“这是测试短信。当前温度是”没有我要求的温度。我尝试使用HyperTeminal与恒温器进行通信没有问题。

你能用instream.read帮我吗?输出是双精度(精确到两位小数)。

这是我的代码。谢谢。

package example.rs232demo;

import javax.microedition.midlet.*;
import java.io.*;
import javax.microedition.io.*;
import com.siemens.icm.io.*;


public class RS232Demo extends MIDlet {

  CommConnection  commConn;
  InputStream     inStream;
  OutputStream    outStream;
  private  ATCommand ATC;
  public static String phone = "+97455781868";
  public static String message = "This is test sms.";

  /**
   * RS232Demo - default constructor
   */
  public RS232Demo() {
   //System.out.println("RS232Demo: Constructor");
   //System.out.println("Available COM-Ports: " + System.getProperty("microedition.commports"));
    try {
      //String strCOM = "comm:com0;blocking=on;baudrate=115200";
      String strCOM = "comm:com0;blocking=on;baudrate=9600;bitsperchar=7;parity=even";
      commConn = (CommConnection)Connector.open(strCOM);
     //System.out.println("CommConnection(" + strCOM + ") opened");
     //System.out.println("Real baud rate: " + commConn.getBaudRate());
      inStream  = commConn.openInputStream();
      outStream = commConn.openOutputStream();
     //System.out.println("InputStream and OutputStream opened");
    } catch(IOException e) {
     //System.out.println(e);
      notifyDestroyed();
    }
  }

  /**
   * startApp()
   */
  public void startApp() throws MIDletStateChangeException {

    int ch = 0;  
   //System.out.println("RS232Demo: startApp");
   //System.out.println("Looping back received data, leave with 'Q'..."); 
    try {
       outStream.write('C');
       outStream.write('\r');

       ch = inStream.read();

    } catch(IOException e) {
      //System.out.println(e); 
    }


    try
        {
            this.ATC = new ATCommand(false);
        }
        catch (ATCommandFailedException ex)
        {
            ex.printStackTrace();
        }

        send_Simple_SMS(phone, message, ch);
        try
        {
        this.ATC.release();
        }
        catch(ATCommandFailedException ex)
        {
            ex.printStackTrace();
        }

    destroyApp(true);
  }


  public void pauseApp() {
   //System.out.println("RS232Demo: pauseApp()");
  }


 public int send_Simple_SMS(String phone, String message, int ch)
    {
        int res = -1;
        String AT = "";
        String response = "";
        synchronized (System.out)
        {
        }
        if(ATC==null){return res;}
        try
        {
            synchronized (ATC)
            {
                ATC.send("AT+CMGF=1\r");
                ATC.send("AT+IFC=1,1\r");
                response = "";
                response = ATC.send("AT+CMGS=?\r");
                if (response.trim().indexOf("OK") < 0)
                {
                    return res;
                }
                response = ATC.send("AT+CMGS=" + phone + '\r' + '\n');
               //System.out.println("Sending.");
                response = ATC.send(message + "The current temperature is " + (char)ch + '\032');
               //System.out.println("Sent.");

                    if (response.trim().indexOf("OK") >= 0)
                    {
                        res = 0;
                    }

                ATC.notifyAll();

            }
        }
        catch (ATCommandFailedException ex)
        {
            ex.printStackTrace();
            res = -1;
        }
        return res;
    } 



  public void destroyApp(boolean cond) {
   //System.out.println("RS232Demo: destroyApp(" + cond + ")");
    try {
      inStream.close();
      outStream.close();
      commConn.close();
     //System.out.println("Streams and connection closed");
    } catch(IOException e) {
     //System.out.println(e);
    }

    notifyDestroyed();
  }
}

1 个答案:

答案 0 :(得分:0)

问题出在这里:

 response = ATC.send(message + "The current temperature is " + (char)ch + '\032');

它将ch转换为相应的字符,而不是数字字符串。

尝试以下方法:

 response = ATC.send(message + "The current temperature is " + ch + '\032');