我正在使用JavaScript应用程序通过蓝牙向Flora板发送数字,具体取决于数字的范围,LED显示某种颜色。该应用程序能够连接到电路板,但它无法点亮LED。该号码保存在上一页的会话存储中。
初始变量是:
var app = {}; // Object holding the functions and variables
var BluefruitUART = null; // Object holding the BLE device
var BLEDevice = {}; // Object holding Bluefruit BLE device information
BLEDevice.name = 'Adafruit Bluefruit LE'; // Bluefruit name
BLEDevice.services = ['6e400001-b5a3-f393-e0a9-e50e24dcca9e']; // Bluefruit services UUID
BLEDevice.writeCharacteristicUUID = '6e400002-b5a3-f393-e0a9-e50e24dcca9e'; // Bluefruit writeCharacteristic UUID
然后将消息发送到Arduino的函数是:
app.sendMessage = function(message, int index) // Send a message to Bluefruit device
{
var data = evothings.ble.toUtf8(message);
BluefruitUART.writeCharacteristic(
BLEDevice.writeCharacteristicUUID,
data,
function() {
console.log('Sent: ' + message);
},
function(errorString) {
console.log('BLE writeCharacteristic error: ' + errorString);
}
)
};
将消息发送到Arduino的按钮是:
<button class="green wide big" onclick="app.sendMessage('on', sessionStorage.AQI)">ON</button>
Arduino IDE上的代码是:
void setup() {
pinMode(LEDpin, OUTPUT);
Serial.begin(9600);
setupBluefruit();
}
void loop() {
String message = "";
while (ble.available()) {
int c = ble.read();
Serial.print((char)c);
message.concat((char)c);
if (message == "on, int") {
message = "";
Serial.println("\nTurning LED ON");
digitalWrite(LEDpin, HIGH);
}
else if (message == "off") {
message = "";
Serial.println("\nTurning LED OFF");
digitalWrite(LEDpin, LOW);
}
else if (message.length() > 3) {
message = "";
}
}
}
答案 0 :(得分:0)
这一行:
if (message == "on, int") {
将消息字符串与文字"on, int"
进行比较。但是,在实际消息中,您将发送一些实际数字,而不是字符串"int"
。要检查message
是否以"on"
开头,您可以使用startsWith功能,如下所示:
if (message.startsWith("on")) {
运气好的话,这会让LED开启。
接下来就是实际传递一些数字。在sendMessage
函数中,您实际上从未使用index
参数,因此您需要对其进行更改。然后在Arduino代码中,您可以解析字符串中的数字,如下所示:
if (message.startsWith("on")) {
int index = message.substring(3).toInt();
将切断字符串的前3个字符("on "
)并将余数转换为int。然后您可以使用它来设置LED颜色。有关Arduino字符串处理函数的更多信息,请参阅here。