Arduino和Java之间的串行通信

时间:2015-06-15 18:17:23

标签: java arduino serial-communication

我使用Arduino打印具有此结构的包中的值:

<3B,3B,3B,3B,3B,5B>

我在UDOO板上运行的Java应用程序上得到它。 这是我的代码。

public void run() {
            byte[] buffer = new byte[64];
            int len = 0;
            String mStringReceived = "";
            int ind1,ind2;
            String DATA[];
            try {
                while((len = this.in.read(buffer)) > -1) {

                    mStringReceived += new String(buffer, 0, len);

                    if(mStringReceived.contains("<") && mStringReceived.contains(">")){

       ind1=mStringReceived.indexOf("<");
       mStringReceived= mStringReceived.subString(ind1,mStringReceived.lenght);
       ind1=0;
       ind2=mStringReceived.indexOf(">");

             if(ind1<ind2){ //Always true
                  mStringReceived=mStringReceived.subString(ind1,ind2);
                  DATA=mStringReceived.replaceAll("<|>","").split(",");





            }       
            }
               mStringReceived="";
            }
            } catch (IOException ioe) {
                ioe.printStackTrace();
            }
        }

所以,我有一个64字节的缓冲区。我得到了包(&lt; to&gt;),我将每个字节组分开,用逗号(如Arduino前)分组在一个数组中。 如果你遇到一种模式&#39;调试&#39; (一步一步),它完美地运作。每个周期都为我的包装获得一个给定的清除。但如果我以正常方式运行,我就不会得到任何数据。为什么?为每个系统9600设置速度。谢谢!

1 个答案:

答案 0 :(得分:0)

串行规则

异步串行协议具有许多内置规则 - 这些机制有助于确保稳健且无错误的数据传输。我们为避开外部时钟信号而采用的这些机制是:

  • 数据位
  • 同步位
  • 奇偶校验位
  • 波特率

关键部分是确保串行总线上的两个设备都配置为使用完全相同的协议。

  

注意:9600 bps是您正在使用的波特率。

波特率

波特率指定通过串行线传输数据的速度。它通常以每秒位数(bps)为单位表示。波特率可以是合理的任何值。唯一的要求是两个设备以相同的速率运行。其中一种比较常见的波特率,特别是速度不重要的简单事物,是9600 bps。其他“标准”波特率分别为1200,2400,4800,19200,38400,57600和115200。