Ну, я знаю, это звучит довольно странно, но я сделал код в Arduino, который работает, когда я просто использую оператор if для каждого параметра. Но это то, для чего нужны переключатели, поэтому я попробовал это, и по какой-то странной причине он входит и выполняет код для standbyStatus==0
и для standbyStatus==1
, но для standbyStatus==2
или default
ничего не выполняется вообще. Обратите внимание, что переменная standbyStatus
установлена на 2
с помощью кода для статуса 1
. Я могу проверить это на последовательном мониторе, но тест Serial.print("case 2.1");
в коде 2
не появляется. Только END of standbymanager
. Опять же, когда я использую if, все работает как надо. Сначала код с if, а затем тот же код, что и в случае переключения:
Кроме того, этот метод вызывается снова и снова. Это мой цикл.
void loop()
{
t= millis();
newAudio();
calcAudioScale();
if(standbyStatus==0){changeLEDs();}
standbymanager();
}
Этот метод в основном проверяет, есть ли какой-то звук для 40 мс или sth, и если нет, он изменится на standbyStatus One, который плавно уменьшаетсяиз светодиодов, которые будут прерваны, если есть звук, но если нет, он изменится на standbyStatus Two, который является просто постоянным светом и проверяет каждую секунду, есть ли звук. Если это так, он изменится на ноль stabdbyStatus.
Код # 1 «ЕСЛИ»:
void standbymanager()
{
if(standbyStatus==0)
{
Serial.print(" ");
Serial.print("case0");
if(audio[standbyTrigger]<0)
{
idleCounter++;
}
if(idleCounter>40)
{
standbyStatus = 1;
}
}
if(standbyStatus==1)
{
Serial.print(" ");
Serial.print("case1");
idleCounter = 0;
float power = 0;
for(int i=0; i<100; i++)
{
if(audio[standbyTrigger]>0)
{
standbyStatus = 0;
return;
}
power = i/100;
analogWrite(red, 255 - r*power);
analogWrite(green, 255 - g*power);
analogWrite(blue, 255 - b*power);
delay(20);
}
standbyStatus = 2;
return;
}
if(standbyStatus==2)
{
Serial.print(" ");
Serial.print("case 2.1");
if(audio[standbyTrigger]>10)
{
standbyStatus = 0;
return;
}
analogWrite(red, 255 - r);
analogWrite(green, 255 - g);
analogWrite(blue, 255 - b);
Serial.print(" ");
Serial.print("case2.2");
delay(1000);
return;
}
Serial.print(" ");
Serial.print("END of StandbyManager");
}
Код # 2 «Случай переключения»
void standbymanager()
{
switch(standbyStatus)
{
case 0:
Serial.print(" ");
Serial.print("case0");
if(audio[standbyTrigger]<0)
{
idleCounter++;
}
if(idleCounter>40)
{
standbyStatus = 1;
}
break;
case 1:
Serial.print(" ");
Serial.print("case1");
idleCounter = 0;
float power = 0;
for(int i=0; i<100; i++)
{
if(audio[standbyTrigger]>0)
{
standbyStatus = 0;
break;
}
power = i/100;
analogWrite(red, 255 - r*power);
analogWrite(green, 255 - g*power);
analogWrite(blue, 255 - b*power);
delay(20);
}
standbyStatus = 2;
break;
case 2:
Serial.print(" ");
Serial.print("case 2.1");
if(audio[standbyTrigger]>0)
{
standbyStatus = 0;
break;
}
analogWrite(red, 255 - r);
analogWrite(green, 255 - g);
analogWrite(blue, 255 - b);
Serial.print(" ");
Serial.print("case2.2");
delay(1000);
break;
default:
standbyStatus=0;
Serial.print(" ");
Serial.print("default");
delay(1000);
break;
}
Serial.print(" ");
Serial.print("END of StandbyManager");
}