本次需要实现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);
再后面就可以把字符串输出,要注意的是,要用不换行的输出,并且输出以后进行延时操作,如果不延时,接收端接收到的字符串就不是单独一个字符串,而是很多个,因为发送速度太快了,接收端根本来不及处理。
Serial.print(outPut);
delay(40);
processing部分
首先我想到的是用串口中断服务函数,因为这个响应速度快,实验以后发现不行,因为这个函数一次只能接收一个字符,无法进行字符串操作。
void serialEvent(Serial port) {
}
转而采用查询的方式
while(port.available()>0){
}
processing部分可以用的串口函数链接如下
【Processing+Arduino互动编程】_arduino processing交互实例-CSDN博客
我自己采用的是如下函数,首先就是回去串口缓存区的所有字符串,赋值在value变量中并且打印出来便于观察
value = port.readString();
println(value);
用以下方式判断出 字母+数字 中的字母是哪一个
switch(value.charAt(0)){
case 'a':
break;
case 'b':
break;
case 'c':
break;
case 'd':
break;
}
当字符串中的 字母+数字 的字母是 a 的时候,使用以下方法把字符串中的数字提取出来
a = int(split(value, 'a'));
此时已经判断出字母还有对应的数字,就可以进行其他操作了。
实现的效果如下