当前位置:   article > 正文

Arduino与processing之间的通信——进阶版_arduino processing serialevent

arduino processing serialevent

本次需要实现Arduino获取板子的偏转角度并通过串口发送给processing,processing部分根据传输过来的各个轴的偏转角度建立对应偏转角度的3D模型。

这就涉及了两个轴正负方向的偏转,我的实现思路是使用串口传输 字母+数字 格式的信息,字母用来判断是哪个轴发生偏转,偏转的角度是正是负,数字就用来表示偏转的角度。

此次是Z轴和X轴这两个。

Arduino部分

这部分的难点在于从传感器获取到的信息是 int 类型的数据,而最终传输的数据应该是一个字母+数字的字符串类型,所以需要把字母跟 int 型变量进行拼接,拼接出来一个字符串。

我的实现过程是首先定义一个字符串

char outPut[10] = "a";

在对数据进行处理的时候首先对字符串进行重新定义,也就是复制一个全新的字符串给outPut

strcpy(outPut, "a");

然后把需要拼接的数据转化成字符串的格式,degreesX是需要转化的原始int型数据,string是转化后的字符串的名称(string是需要提前定义好的 char string[16] = {0}; )

itoa(degreesX,string,10);

接着就可以拼接数据到原来的用于输出的总的字符串了

strcat(outPut,string);

再后面就可以把字符串输出,要注意的是,要用不换行的输出,并且输出以后进行延时操作,如果不延时,接收端接收到的字符串就不是单独一个字符串,而是很多个,因为发送速度太快了,接收端根本来不及处理。

  1. Serial.print(outPut);
  2. delay(40);
processing部分

首先我想到的是用串口中断服务函数,因为这个响应速度快,实验以后发现不行,因为这个函数一次只能接收一个字符,无法进行字符串操作。

  1. void serialEvent(Serial port) {
  2. }

转而采用查询的方式

  1. while(port.available()>0){
  2. }

processing部分可以用的串口函数链接如下

【Processing+Arduino互动编程】_arduino processing交互实例-CSDN博客

我自己采用的是如下函数,首先就是回去串口缓存区的所有字符串,赋值在value变量中并且打印出来便于观察

  1. value = port.readString();
  2. println(value);

用以下方式判断出 字母+数字 中的字母是哪一个

  1. switch(value.charAt(0)){
  2. case 'a':
  3. break;
  4. case 'b':
  5. break;
  6. case 'c':
  7. break;
  8. case 'd':
  9. break;
  10. }

当字符串中的 字母+数字 的字母是 a 的时候,使用以下方法把字符串中的数字提取出来

a = int(split(value, 'a'));

此时已经判断出字母还有对应的数字,就可以进行其他操作了。

实现的效果如下

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/767150
推荐阅读
相关标签
  

闽ICP备14008679号