Arduino 是否可以为某些函数创建循环,但在外部信息进入时停止它们?

Arduino 是否可以为某些函数创建循环,但在外部信息进入时停止它们?,arduino,bluetooth,rgb,arduino-ide,arduino-nano,Arduino,Bluetooth,Rgb,Arduino Ide,Arduino Nano,我对这个平台和Arduino都是新手。我尝试使用arduino nano为RGB LED创建蓝牙控制器。我的代码工作得很好,但我想让它“完美”(如果你明白我的意思) 因此,我在麻省理工学院AppInventor上设计了一个Android应用程序,它允许我点击一个按钮并选择我想要的rgb效果(静态颜色、彩虹效果等)。 问题是,当我有“循环”效果、彩虹和混合色时,它们会在某一点停止,颜色会在Led条上冻结。 我试图创建另一个变量,该变量根据所选效果的类型而变化,intvar=1第48行。但是这样做,

我对这个平台和Arduino都是新手。我尝试使用arduino nano为RGB LED创建蓝牙控制器。我的代码工作得很好,但我想让它“完美”(如果你明白我的意思)

因此,我在麻省理工学院AppInventor上设计了一个Android应用程序,它允许我点击一个按钮并选择我想要的rgb效果(静态颜色、彩虹效果等)。
问题是,当我有“循环”效果、彩虹和混合色时,它们会在某一点停止,颜色会在Led条上冻结。
我试图创建另一个变量,该变量根据所选效果的类型而变化,
intvar=1第48行。但是这样做,我再也无法摆脱循环。

有什么想法吗?

PS:我使用的是WS2812b 3米长的Led条、Arduino Nano和HC-05蓝牙模块

以下是完整的代码:

#包括
#包括
#ifdef__AVR__
#包括
#恩迪夫
软件串行BT(10,11);//蓝牙模块的发送和接收
#定义像素_引脚5//Led条的数据引脚
#定义像素计数160//条带中的LED数量
#定义亮度125//使用96表示中等亮度
#定义速度5//每个颜色转换的速度(毫秒)
#定义彩虹速度27//彩虹过渡速度
Adafruit_NeoPixel条=Adafruit_NeoPixel(像素计数、像素引脚、NEO_GRB+NEO_KHZ800);
bool offfold=低;
布尔-怀特奥尔德=低;
bool-RedOld=低;
布尔-格林诺德=低;
布尔-布鲁奥尔德=低;
布尔黄老=低;
布尔橙色=低;
bool-pinkOld=低;
布尔-紫红色=低;
bool-cyanOld=低;
布尔彩虹奥尔德=低;
bool rgbOld=低;
布尔值=低;
int showType=0;
无效设置(){
BT.begin(9600);
BT.println(“与Arduino相关”);
条带.直线度(亮度);
strip.begin();
strip.show();
}
int-var=1;
字符a;
void循环(){
bool off=低;
布尔白=低;
布尔蓝=低;
布尔红=低;
布尔绿=低;
布尔黄=低;
布尔橙色=低;
粉红色=低;
紫色=低;
布尔青色=低;
布尔彩虹=低;
布尔rgb=低;
布尔随机=低;
布尔恩德;
如果(BT.available())
{
a=(char)BT.read();
如果(a='f')
{
关闭=高;
var=1;
BT.println(“LED关闭”);
}否则{
关=低;
}
// ===========================================================================================
如果(a=='w')
{
白色=高;
var=1;
BT.println(“LED变白”);
}否则{
白色=低;
}
// ===========================================================================================
如果(a=='b')
{
蓝色=高;
var=1;
BT.println(“LED变蓝”);
}否则{
蓝色=低;
}
// ===========================================================================================
如果(a=='r')
{
红色=高;
var=1;
BT.println(“LED变红”);
}否则{
红色=低;
}
// ===========================================================================================
如果(a=='g')
{
绿色=高;
var=1;
BT.println(“LED变绿”);
}否则{
绿色=低;
}
// ===========================================================================================
如果(a=='y')
{
黄色=高;
var=1;
BT.println(“LED变黄”);
}否则{
黄色=低;
}
// ===========================================================================================
如果(a='o')
{
橙色=高;
var=1;
BT.println(“LED变成橙色”);
}否则{
橙色=低;
}
// ===========================================================================================
如果(a=='p')
{
粉红色=高;
var=1;
BT.println(“LED变粉红色”);
}否则{
粉红色=低;
}
// ===========================================================================================
如果(a='v')
{
紫色=高;
var=1;
BT.println(“LED变紫”);
}否则{
紫色=低;
}
// ===========================================================================================
如果(a=='c')
{
青色=高;
var=1;
BT.println(“LED变青”);
}否则{
青色=低;
}
// ===========================================================================================
如果(a=='a')
{
彩虹=高;
var=0;
BT.println(“LED制造彩虹”);
}否则{
彩虹=低;
}
// ===========================================================================================
如果(a=='m')
{
rgb=高;
var=0;
BT.println(“混合色LED”);
}否则{
rgb=低;
}
// ===========================================================================================
如果(a=='e')
{
随机=高;
var=0;
BT.println(“变为随机颜色的LED”);
}否则{
随机=低;
}
}
如果(关闭==低和关闭关闭==高){
延迟(20);
如果(关闭==低){
做{
showType=0;//关闭动画类型0
startShow(showType);
}而(a=0);
}
}
// ===========================================================================================
如果(白色==低和白色旧==高){
延迟(20);
如果(白色==低){
做{
showType=1;//白色动画类型1
startShow(showType);
}而(a=0);
}
}
// ===========================================================================================  
如果(红色==低