arduino与Processing通信问题

我在网上查到好多资料都是讲的是传输一个数据的问题,没有讲到传输多个数据的问题,我通过一天的摸索,终于找到用arduino给processing传输多个数据的解决方法。下面是讲传输三个数据的代码。
1、先看我的arduino代码我把关键地方写出来,供参考

light = BH1750();
  Serial.print(light);
  Serial.print(',');

 // smoke();
  wenshidu();
  if (humidity < 30) {
    jdq();
  }
  if (temperature > 40) {
    speak();
/*这块的延时也挺重要的,发送数据的速度不能太快,要不然processing接收有可能接收混乱,我这是三个数据,我延时了4秒,我发现可以读取到,而且不出错,我看有的人是发送2个数据是用了0.1秒作为延时,然后如果是其他更多的或者更少的数据,可以试着通过延时来解决,processing那边接收可能混乱的问题。*/
  delay(4000);


}void wenshidu() {
  DHT11.read(DHT11PIN);

  // Serial.print("temperature:");

  Serial.print((byte)DHT11.temperature);
  Serial.print(',');

  temperature = DHT11.temperature;

  //Serial.print("humidity:");

  Serial.print((byte)DHT11.humidity);
  Serial.println(',');

  humidity = (byte)DHT11.humidity;




  //delay(100);
}

这段代码是我的arduino程序主要是向串口发送三个数据,用逗号分隔开,最后以换行作为数据分隔单元的依据。
2、下面是processing的代码
还是将主要的列出来,供大家参考

import processing.serial.*;
Serial myPort;
byte[] inBuffer = new byte[100];
int Hum = 0;
int Tem = 0;
int light = 0;
void setup(){
  myPort=new Serial(this,"COM7",9600 );
  myPort.clear();
/*下面是读取数据的代码,也是最关键的地方,由这里可以读取到arduino传过来的数据也是它们两交互的关键,希望大家好好看看这段代码*/
  void readQ(){
  if(myPort.available()>0 )
  {   //receive=myPort.read()+""; 
    if(myPort.readBytesUntil(10,inBuffer)>0)
    //这里的10是代表换行的ASCLL码是10,所以说只要是你arduino程序是以换行为一组数据的结尾的话,这里的读取单元数据,第一个参数必须是10.
    {
      String inputString = new String(inBuffer);
      String[] inputStringArr = split(inputString,',');
      light = int(inputStringArr[0]);
      println(light);
      Tem = int(inputStringArr[1]);
      println(Tem);
      Hum = int(inputStringArr[2]); 
      println(Hum);
    }
       //light=myPort.read();
      // println(light);
      //Tem=myPort.read();
      //println(Tem);
      //Hum=myPort.read();
      //println(Hum); 
   } 
}
void draw(){
  readQ();
  /*后面的程序就是利用传输到的数据来进行画图,做各种交互效果了,由自己发挥了*/
  }

好这就是我这个问题的解决方案,如果哪里有问题,恳请指正。

你可能感兴趣的:(arduino与Processing通信问题)