App inventor 实战教程(五)蓝牙与单片机进行多数据交互,通信蓝牙控制APP的研发与设计。 以及相关问题的思考。

时间:2024-03-21 08:50:42

一、App的简单介绍


首先APP的功能描述如下,他可以发送6个数据并接收4个数据。并且数据全部以浮点型数据出现。并保留有判断框,内置要进行数据之间的比较,让判断框的内容发生改变。基本uI界面如下。

App inventor 实战教程(五)蓝牙与单片机进行多数据交互,通信蓝牙控制APP的研发与设计。 以及相关问题的思考。

其中气压和温度值就是我们手机要接收的数据。后面的未知两个字在数据传输过来之后,在确认按钮按下之后,会对数据进行比较,判断温度和气压有没有超出我们所限定的值。而下方的6个文本输入框就是输入我们想要输入的数据来限定和判断接收到的气压和温度是否正常。
好,我们开始内部逻辑的编程。

二、蓝牙逻辑连接的实现

首先是简单的蓝牙连接模块。这个模块在第1期的时候就说过了,这里不再多说。其核心组件就是一个列表选择框。当我们点入列表选择框的时候,需要让APP呈现出我们所要连接的蓝牙名字即可。所以有选中项。屏幕初始化。以及蓝牙连接地址这些基本组件方可构成上述应用的设定。

App inventor 实战教程(五)蓝牙与单片机进行多数据交互,通信蓝牙控制APP的研发与设计。 以及相关问题的思考。

其次是实现数据之间的比较。首先我们将未知的类型全部设置为标签。当接收数据和我们给出的数据之间相对比较时是标签发生正确或超限的变化。这个时候我们需要用一个判断语句进行执行。这里我用的是控制结构里面的与。只有当显示内容与我们输入的上限和下限,全部符合时我们让标签位置显示正常。当显示内容与我们输入的上限和下限不在一个范围之内,我们让标签显示为超限。这就需要进行数据之间的比较了。

 

三、数据比较逻辑结构的实现

然而一个问题出现了。如何进行两个数据之间的比较呢?按照我们刚才的设定两个数据之间的类型是不一样的。一个是数字而另一个是文本。所以我们需要将数据之间的类型统一化。

App inventor 实战教程(五)蓝牙与单片机进行多数据交互,通信蓝牙控制APP的研发与设计。 以及相关问题的思考。

那么如何实现两个数据之间类型的统一化呢?我们可以将文本输入框中的内容设定为只允许输入数字。并且设置一个变量,让这个变量为文本变量。也就是在控制栏文本那一个框框中选择一个空文本。我们称其为变量初始化,相当于c语言中,int a=0;将变量a定义为是整形数据而非字符。在这个编程模式里也是同样的道理。当然我们也需要注意变量之间赋值关系的位置,因为关系反了效果就会适得其反。经过我多次尝试和逻辑思考之后,整理出了如下正确的表达方式。

App inventor 实战教程(五)蓝牙与单片机进行多数据交互,通信蓝牙控制APP的研发与设计。 以及相关问题的思考。

 

四、数据显示遇到的问题和思考

第2个难点就是接收4个数据,并且让其成为浮点型。首先浮点型数据本身就拥有着小数点,且数据复杂在所提供的蓝牙,设置框中并没有接收浮点型数据的控件,所以对于解决这个问题,我尝试了以下几种思路和实际的操作方法。

App inventor 实战教程(五)蓝牙与单片机进行多数据交互,通信蓝牙控制APP的研发与设计。 以及相关问题的思考。

先说一个理论上较为可行,但我实际操作还有些问题的方法。我们可以将浮点型数据拆成两个部分进行接收。将整数部分作为一个数据接收小数部分作为一个数据接收。小腹部分如何接收呢?我们的设置方式是发送的时候发送整数,然后通过相应的函数算法将其化简为零点几的小数,然后两个数据进行相加即可得出我们想要的数据。然而这种操作方法,存在着数据接收混乱以及一些未知的问题,暂且我并没有找到合适的解决方法。

五、解决方法和尝试

第2个方法就是不让蓝牙接收数据,而是让蓝牙接收字符串。我们将所需要的数据全部组合在一起,并在数据前面加上标志符abcd,这样我们就可以将所有的数据信息储存在一个字符串当中了。我们在接收数据的时候,可以通过文本选择模块对abc进行侦查,从而选出我们所要的数据,并使其体现在我们4个数据的标签中。然而这个方法虽然理论上行得通,但是实际操作起来也有些问题。App inventor 实战教程(五)蓝牙与单片机进行多数据交互,通信蓝牙控制APP的研发与设计。 以及相关问题的思考。

经过我多次尝试和改良,最终达成了这样的效果。可以在4个数据框中显示出数据的位数,但是并不能正确的显示出数据的样子,而且数字在一直的变化,这更让我百思不得其解。。对此我进行了总结,可能是以下几个问题造成的。
首先可能是我使用的硬件设施,串口的通信并不是特别的优良,存在一定的误差。如果是逻辑上的错误数据不可能时变时不变,变化多端,不可琢磨。当我不再向手机发送数字的时候,蓝牙APP仍然显示着多组数字的重重叠叠交替闪烁,变化不定的现象。这说明可能是硬件上存在一些问题。另外我在测试的时候,当不进行蓝牙通信的时候,直接将全局变量设置为我所需要的数据组织。也就是以abcd为开头的各种数据集合的时候。

 

六、问题分析与寻求帮助

数据是可以正常显示的,这说明我的文本选择程序并没有错误。问题就出现在蓝牙接收字符串的过程中了。所以解决这个问题还需要在硬件设施完全支持调试的情况下,对编码程序和蓝牙的传输形式进行深入的探究和研究,才能得到好的解决方法。
第2点可能是数据以字符串的形式,传输过程中存在一定的编码问题。我并没有找到良好的解决编码问题的控件和方法。当我尝试以16进制数据发送和接收的时候,仍然不能显示出正确的结果,这让我更是百思不得其解。

以上问题的情况,如果有哪位同学明白或者是说可以解决的话,可以私信我,感激不尽。对于这种数据接收问题,我提出了以下几种解决的方法。并在不断尝试中,目前尚未取得一定的效果。蓝牙接收控件有限,功能不全,我们可以选择另一个蓝牙控件,也就是低功耗蓝牙控件。这个蓝牙控件可以接收浮点型数据,做一些更加精密的事情。所以有待进一步研发和讨论。

或者是说,认真学习蓝牙的交通方式以及编码问题来解决字符串无法正常在手机APP上显示的问题。总之要解决这个问题,一种方法是学习新的蓝牙控件,第2种方法就是弄清楚蓝牙在传输字符串中的编码问题,从而进行有针对性的解决。

七、总结

今天主要给大家分享的不是解决问题的方法,而是发现问题并解决问题的一种思路和尝试。相信通过我后期的探索与研究,一定会解决这个数据显示的问题的。如果大家谁能解决这个问题,欢迎私信我。