第5部分:PC图形用户界面演示
在前一节中,我们获得了一些有用的输出,并确认我们的XYZ Pad基本上按预期工作。
但是,盯着一个文本流,很难对XYZ Pad如何响应开发出任何详细的感觉,也很难确定可以改进的性能方面。要了解更多细节,这里有一个图形演示应用程序,我们在处理过程中放在一起,如果您想运行演示,您需要下载它。
这是一张截图>>
为了让示例Arduino草图与图形应用程序对话,您需要在xyzdefines.h中进行一次编辑。
查找以下行:
//#定义终端输出1结论
我们将把一些实验和观察留给读者/建设者。这是一个相对基本的例子,所以在你自己的力觉设计中有很大的改进空间。
例如,这里有一个你可能已经注意到的问题:如果在X/Y+角中施加力并移动到X/Y角(保持相同的力),则会观察到Z轴灵敏度的逐渐变化。
如果你考虑一下我们在哪里驾驶和测量XYZ Pad,你可能会明白为什么会发生这种情况(也许会想出一些补偿的办法)。电阻式触摸屏显示出类似的特性-触摸屏/触摸板控制器集成电路中使用的几何算法值得阅读
#定义处理输出1
交换评论,就像这样:
#定义终端输出1
//#定义处理输出1
好极了!处理代码和可下载的project.zip发布在下面。有关热键列表和优化性能的一些提示,请检查包含的文本文件。
下载代码:xyzpadttutorialvisualizer.zip
代码:
/**********************************************************************************************************
*项目:XYZPadTutorialVisualizer.pde
*签署人:Chris Wittmier@Sensitronics LLC
*上次修订日期:2015年3月29日
*说明:通用4线XYZ焊盘测试仪/可视化仪
**********************************************************************************************************/
导入处理。序列号。*;
/**********************************************************************************************************
*可调参数
**********************************************************************************************************/
//物理尺寸
float PAD_WIDTH_INCHES=6.0;//焊盘的物理尺寸。如果不需要1:1映射,则可以指定大于/小于实际值。
浮垫高度=6.0英寸;
/显示参数
int PIXELS_PER_INCH=100;//adjust for monitor,typical pitch is~100PPI
在最大力下输入一个直径为100的圆。
boolean SHOW_GRIDLINES=true;//如果为true,则将覆盖微弱的1x1英寸网格线
//通信设置
int串行波特率=115200;
boolean AUTO_CONNECT_HIGHEST_PORT=true;//如果为true,则在启动时打开最高编号的串行端口。保持正确,还没有手动连接。
/**********************************************************************************************************
*常数
**********************************************************************************************************/
int串行缓冲区大小=8;
最终int模式_NONE=0;
最终int MODE_X_EDIT=1;
最终int MODE_uy_EDIT=2;
最终输入模式双编辑=3;
最终int MODE_Z_EDIT=4;
最终内控制台位置=10;
最终内控制台位置=20;
最终int控制台文本大小=14;
/**********************************************************************************************************
*全球性的
**********************************************************************************************************/
连环运动;
int[]serial_buffer=new int[serial_buffer_SIZE];
int[]current_message=new int[串行缓冲区大小-2];
布尔消息_ready_flag=false;
int canvas_width_像素;
int canvas_height_像素;
浮点数;
浮动y_比例因子;
浮力标度系数;
int operation_mode=模式_NONE;
浮点x_pre_offset=0;
浮动y_pre_offset=0;
浮动x_pre_scale=1;
浮动y_pre_scale=1;
浮力_pre_scale=1;
int force_pre_thresh=3;
/**********************************************************************************************************
*设置()
**********************************************************************************************************/
无效设置()
{
画布宽像素=(int)(PAD宽英寸*像素每英寸);
画布高像素=(int)(PAD高英寸*像素每英寸);
x_scale_factor=(浮点)画布宽度像素/1023.0;
y_scale_factor=(浮点)画布高度像素/1023.0;
力标度因子=((浮点)最大点直径像素)/1023.0)/2.0;
尺寸(画布宽度像素,画布高度像素);
牵引座();
if(自动连接最高端口)
{
sPort=new Serial(this,Serial.list()[(Serial.list().length)-1],串行波特率);
}
}
/**********************************************************************************************************
*绘制()
**********************************************************************************************************/
无效绘制()
{
if((消息_ready_flag)| |(操作_模式)!=模式(无)
{
牵引座();
}
if(消息准备就绪标志)
{
parseReport(当前_消息);
message_ready_flag=false;
}
如果(操作模式!=模式(无)
{
drawConsole();