有很多方法可以做到这一点,但重要的是蓝牙链路的两端都理解正在发送的数据结构。
通常使用蓝牙,如果您有多个值,您可以将数据打包到一个列表中,以便您可以有效地发送它们。然后,您将在链接的另一端解压缩它们。
我创建了一个小应用程序,其中包含我想要发送的四个值。整数值由滑块创建。

我已将所有应用程序块放在这里以供参考,但关键块是SendBytes. 据我所知,我的滑块值介于 0 和 255 之间(适合一个字节),我可以发送四个字节列表中的所有四个值。

在链接的 Arduino 端,readBytes我知道我的值在列表中的位置,因此我可以解压列表并将每个值从一个字节转换为一个整数。
#include <SoftwareSerial.h>
SoftwareSerial hc06(3,2);
const int BUFFER_SIZE = 4;
byte dataBytes[BUFFER_SIZE];
void setup(){
//Initialize Serial Monitor
Serial.begin(9600);
//Initialize Bluetooth Serial Port
hc06.begin(9600);
Serial.println("setup done...");
}
void loop(){
//Write data from HC06 to Serial Monitor
if (hc06.available()){
int data_len = hc06.readBytes(dataBytes, BUFFER_SIZE);
int a = (int) dataBytes[0];
int b = (int) dataBytes[1];
int c = (int) dataBytes[2];
int d = (int) dataBytes[3];
Serial.print("A = ");
Serial.println(a);
Serial.print("B = ");
Serial.println(b);
Serial.print("C = ");
Serial.println(c);
Serial.print("D = ");
Serial.println(d);
}
}
当我发送一些随机数据时,它在串行监视器中给了我以下输出:
setup done...
A = 221
B = 147
C = 58
D = 3
如果 255 不是一个足够大的数字,那么您可以使用两个字节 (UInt16) 达到 65,535。查看 App Inventor 似乎没有现成的方法可以将大整数转换为 UInt8 值数组。但是,进行转换并不是很多。举个例子:

Arduino 上的转换如下所示:
int a = 0;
int b = 0;
lowByte(a) = dataBytes[0];
highByte(a) = dataBytes[1];
lowByte(b) = dataBytes[2];
highByte(b) = dataBytes[3];
为了检查文本框是否为空并将其替换为默认值,我会执行以下操作:
