一步一步用arduino与Processing实现雷达扫描(3)

前面我们已经比较完整的实现了processing的雷达扫描效果,软件部分只剩下目标扫描点的类封装、扫描线的拖影效果及硬件部分的实现。
其中类的封装,在我的博文《Processing摸索前行(4)》中有过比较详细的介绍。但我们这里具体处理扫描点的方法有必要详细介绍一下。

我们首先明确一下思路:我们的扫描雷达上传给processing的应该是距离和角度两个值,也就是说,我们在模拟中应该是模拟角度值和距离值来送给我们封装的类来绘图。那么我们下面来具体说明:

一、扫描目标模拟类的整体设计
1、由于一个点在图像中是在太小,看不太清楚,所以在这个类中我们用一个填充圆来替代点,我们需要一个构造函数,用它完成点的实现。
2、我们要模拟扫描线扫过后,点渐渐的淡出屏幕的效果,故而需要一个改变透明度的方法;
3、我们必须让这个点能够自带无参数的绘制函数,方便我们在获取对象后随时绘制出这个点。

class CirclePoint
{
  float Px;
  float Py;
  float Alf;
  float Csize;
  
  //构造函数
  CirclePoint(float x,float y,float alf,float size)
  {
     Px=x;
     Py=y;
     Alf=alf;
     Csize=size;
  }
  
  //自绘制函数
  void cpDraw()
  { 
    fill(200,201,0,Alf);
    ellipse(Px,Py,Csize,Csize);
    noFill();
  }
  
  //透明度改变函数
  void changeAlf(float alf)
  {
    Alf=alf;
  }

有了上面这个类,那么我们可以让每个扫描点的透明度随着扫描线角度的变化而变化,就实现了模拟扫描目标点淡出屏幕的效果了。

二、扫描线的拖影效果
1、用线来实现拖影效果将会在线与线之间留下空隙,最终出来的效果会类似没有了纸的折纸扇,所以我们这里用arc来替代,可以比较好的解决这个问题。
2、拖影效果的拖影,必须透明度慢慢降低,直到和背景融合,所以我们采用fill函数结合一个for循环变量来控制其透明度,令其能够逐渐改变透明度,达到我们的设计目的。

//拖影扫描线的绘制
  for(int col=1;col<20;col++)
  {
    fill(0,180,0,10*col);   //逐渐改变扫描拖影的透明度
    arc(width/2,height/2,2*r,2*r,
    a+0.01*(col-1),
    a+0.01*col);   
  }

完成上述部分后,就只要在processing中增加一个串口的实例,读取arduino通过串口发过来的距离值(由超声波传感器完成)和角度值(由舵机提供),即可完成processing显示实际的扫描结果了。

这里要注意,arduino端通过串口传送过来的数据的格式,否则会出现processing端获取到的数据无法转化为实际的距离值和角度制。请参看我的博文《关于arduino通过串口发送到processing的数据混乱(错误\显示不正确)的问题解答》

当然,如果我们想把屏幕画面装饰好看些,可以增加一些文字描述,比如适时角度制,扫描帧率等,这个没有什么技术含量,不在这里赘述,伙伴们可按照喜好自行添加。

下图是连接硬件后的实际运行效果的一个场景:
一步一步用arduino与Processing实现雷达扫描(3)_第1张图片

硬件部分包括舵机的使用以及超声波传感器模块的使用,这两部的内容请参考我的博客《Arduino中舵机精准度测试实验》《Arduino中使用超声波测距实验》,这两篇博客文章中,对舵机和超声波传感器模块有详细的介绍。
所以,我们这里不单独拿出来讲解。

你可能感兴趣的:(Arduino,Processing,程序绘图,Arduino探索,processing摸索学习)