arduino中带蓝牙的led闪烁问题



我正试图在蓝牙的帮助下制作一个打开、关闭和闪烁led的程序On和of很容易复制,但我无法眨眼就开始工作。有两个选项,要么闪烁一次,要么如果我广告一段时间,它永远不会停止循环。我尝试了if和case。有人能帮我吗?我正在用esp32。带有if的代码:

#include "BluetoothSerial.h"
#include <Arduino.h>
#include <analogWrite.h>

#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif

BluetoothSerial SerialBT;
int received;// received value will be stored in this variable
char receivedChar;// received value will be stored as CHAR in this variable

const char turnON ='a';
const char turnOFF ='b';
const char turnBLINK= 'c';
//const char turnFADE='d';
const int LEDpin = 12;
//int brightStep = 1;
//int brightness = 0;


void setup() {
Serial.begin(115200);
SerialBT.begin("Mono"); //Bluetooth device name
Serial.println("The device started, now you can pair it with bluetooth!");
Serial.println("To turn ON send: a");//print on serial monitor  
Serial.println("To turn OFF send: b"); //print on serial monitor 
pinMode(LEDpin, OUTPUT);
// analogWriteResolution(LEDpin, 12);

}

void loop() {
receivedChar =(char)SerialBT.read();

if (Serial.available()) {
SerialBT.write(Serial.read());

}
if (SerialBT.available()) {
// while(SerialBT.available()){
//  receivedChar =(char)SerialBT.read();
//  }

SerialBT.print("Received:");// write on BT app
SerialBT.println(receivedChar);// write on BT app      
Serial.print ("Received:");//print on serial monitor
Serial.println(receivedChar);//print on serial monitor    
//SerialBT.println(receivedChar);//print on the app    
//SerialBT.write(receivedChar); //print on serial monitor
if(receivedChar == turnON)
{
SerialBT.println("LED ON:");// write on BT app
Serial.println("LED ON:");//write on serial monitor
digitalWrite(LEDpin, HIGH);// turn the LED ON

}
if(receivedChar == turnOFF)
{
SerialBT.println("LED OFF:");// write on BT app
Serial.println("LED OFF:");//write on serial monitor
digitalWrite(LEDpin, LOW);// turn the LED off 
}    
if(receivedChar == turnBLINK)
{
SerialBT.println("LED blink:");// write on BT app
Serial.println("LED blink:");//write on serial monitor
while (receivedChar == turnBLINK){
//receivedChar =(char)SerialBT.read();
//if(receivedChar != turnBLINK){
// break;
// } else {
digitalWrite(LEDpin, HIGH);// turn the LED off 
delay(1000);
digitalWrite(LEDpin,LOW);
delay(1000);
if(receivedChar != turnBLINK){
break;    }  

}
}
}
delay(20);
}

和案例:

#include "BluetoothSerial.h"
#include <Arduino.h>
#include <analogWrite.h>

#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif

BluetoothSerial SerialBT;

int received;// received value will be stored in this variable
char receivedChar;// received value will be stored as CHAR in this variable
char data;
int option;
int blink=0;
const int LEDpin = 12;

void setup() {
Serial.begin(115200);
SerialBT.begin("Mono"); //Bluetooth device name
Serial.println("The device started, now you can pair it with bluetooth!");
Serial.println("To turn ON send: 1");//print on serial monitor  
Serial.println("To turn OFF send: 0"); //print on serial monitor 
pinMode(12, OUTPUT);
}


void loop(){
receivedChar =(char)SerialBT.read();

// if (Serial.available()) {
//  SerialBT.write(Serial.read());

//  }
if (SerialBT.available()) {
// while(SerialBT.available()){
//  receivedChar =(char)SerialBT.read();
//  }

SerialBT.print("Received:");// write on BT app
SerialBT.println(receivedChar);// write on BT app      
Serial.print ("Received:");//print on serial monitor
Serial.println(receivedChar);//print on serial monitor    
//SerialBT.println(receivedChar);//print on the app    
//SerialBT.write(receivedChar); //print on serial monitor

data=receivedChar;
if(data == '0')
{
option = 0;
blink=0;
}else if(data == '1')
{
option = 1;
blink=0;
}else if(data == '2')
{
option = 2;
blink=1;
}
switch (option)
{
case 0: // LED OFF
digitalWrite(LEDpin, LOW);
break;
case 1: //LED ON
digitalWrite(LEDpin, HIGH);
break;
case 2:
while(blink=1){// LED BLINK
digitalWrite(LEDpin , HIGH);
delay(200);
digitalWrite(LEDpin, LOW);
delay(200);
}
break;

}

}
}

首先,您应该将代码清理为最小的可重复示例。删除所有不必要的注释和不代表您所面临的主要问题的代码。

在快速浏览了您的代码后,我立即注意到:

while(blink=1){// LED BLINK
digitalWrite(LEDpin , HIGH);
delay(200);
digitalWrite(LEDpin, LOW);
delay(200);
}

其中它应该是while(blink==1){ }->非常常见的错误。这应该是一个比较,而不是一个任务。

现在,你提到它从未停止运行。即使在纠正了我刚才指出的错误之后,while循环中的哪个部分也会打破blink等于1的逻辑?否则,while循环将永远不会停止

最后,不要读取主loop()内部的串行数据。请使用SerialEvent。

同样,遵循代码流是相当棘手的。我建议您将代码划分为多个函数,以便使其更具可读性。

最新更新