Я не был в стеке, поэтому я не согласен с этим, сообщество всегда помогало мне и действительно хотело поблагодарить всех за это в первую очередь.Arduino не выполняет команду из последовательных и медленных команд.
У меня возникла проблема с проектом arduino. Я пытаюсь сделать arduino make rgb light включенным в разные цвета при вводе пользователя. Это звучит просто, но, к сожалению, ардуино не делает этого в некоторых ситуациях или очень медленно получает входные данные от пользователя.
Я не могу понять, есть ли проблема с кодом или ардуином.
Вот немного кода, я думаю, что это проблема, и при попытке этого меню команды выполняются один раз, но затем не отбрасывают цикл и бросают меня обратно в главное меню.
Помните, что код действительно очень длинный, так что это всего лишь немного, так как полный код выглядит ниже.
(FIY ARDUINO UNO R3 ATMEGA 328)
//Party
if(mode == "Party" || mode == "party" || mode == "Party mode" || mode == "party mode" || mode == "Party Mode" || mode == "party Mode" || mode == "c"){
Serial.println("Party mode");
Serial.println("For selecting another mode and go back please type back");
int y;
int w;
Serial.println("How many times? note: 1 time = 20 seconds");
while(Serial.available()==0){
direct = Serial.readString();
if(direct == "Back" || direct == "back"){
break;
}
y = 0;
w = Serial.parseInt();
if(y <= w){
for(int i = 0; i < w; i = i+1){
Serial.println("Initializing");
Serial.println(w);
for(int fadeValue = 0; fadeValue <= 250; fadeValue +=50){
analogWrite(ledRR1, fadeValue);
analogWrite(ledBR1, fadeValue);
delay(500);
analogWrite(ledGR1, fadeValue);
analogWrite(ledGL1,fadeValue);
analogWrite(ledBL1, 0);
analogWrite(ledRR1,0);
analogWrite(ledGL2,0);
analogWrite(ledRL2,0);
analogWrite(ledBL2,0);
analogWrite(ledGR2,0);
analogWrite(ledRR2,0);
analogWrite(ledBR2,0);
delay(500);
}
analogWrite(ledRR1, 250);
analogWrite(ledGR2, 250);
analogWrite(ledBR1, 0);
analogWrite(ledGR1, 0);
analogWrite(ledBL1, 0);
analogWrite(ledRL1,0);
analogWrite(ledGL2,0);
analogWrite(ledRL2,0);
analogWrite(ledBL2,0);
analogWrite(ledGR2,0);
analogWrite(ledRR2,0);
analogWrite(ledBR2,0);
delay(1000);
analogWrite(ledBR1, 250);
analogWrite(ledRL1, 250);
delay(500);
analogWrite(ledGR1, 250);
analogWrite(ledRR1, 250);
analogWrite(ledBL1, 250);
analogWrite(ledGL1, 150);
analogWrite(ledRL1, 50);
delay(1000);
analogWrite(ledGR1, 0);
analogWrite(ledRR1, 0);
analogWrite(ledBL1, 0);
analogWrite(ledGL1, 0);
analogWrite(ledRL1, 0);
delay(500);
analogWrite(ledGR1, 250);
analogWrite(ledRR1, 250);
analogWrite(ledBL1, 250);
analogWrite(ledGL1, 150);
analogWrite(ledRL1, 50);
delay(500);
analogWrite(ledGR1, 0);
analogWrite(ledRR1, 0);
analogWrite(ledBL1, 0);
analogWrite(ledGL1, 0);
analogWrite(ledRL1, 0);
delay(1000);
analogWrite(ledGR1, 250);
analogWrite(ledRR1, 250);
analogWrite(ledBL1, 250);
analogWrite(ledGL1, 150);
analogWrite(ledRL1, 50);
delay(2000);
analogWrite(ledGL1,250);
analogWrite(ledGR1, 250);
delay(1000);
analogWrite(ledGL1,0);
analogWrite(ledGR1, 0);
delay(500);
analogWrite(ledRR1,250);
analogWrite(ledRL1, 250);
delay(1000);
analogWrite(ledRR1,0);
analogWrite(ledRL1, 0);
delay(500);
analogWrite(ledGL1,250);
analogWrite(ledGR1, 250);
analogWrite(ledBR1,250);
analogWrite(ledBL1,250);
delay(2000);
analogWrite(ledGL1,0);
analogWrite(ledGR1, 0);
delay(1000);
analogWrite(ledRR1, 0);
analogWrite(ledBR1, 0);
analogWrite(ledGR1, 0);
analogWrite(ledGL1,0);
analogWrite(ledBL1, 0);
analogWrite(ledRL1,0);
analogWrite(ledGL2,0);
analogWrite(ledRL2,0);
analogWrite(ledBL2,0);
analogWrite(ledGR2,0);
analogWrite(ledRR2,0);
analogWrite(ledBR2,0);
y = y +1;
}
}
else if(y >= w){
Serial.println("Please type main to go back to main menu or select another value");
break;
}
}
}
Как уже упоминалось код действительно очень долго, так что здесь весь код:
//List of pins and corresponding colors
//RIGHT SIDE
//Red1 5
//Green1 3
//Blue1 6
//Red4 A4
//Green4 A3
//Blue4 A5
////////////////////////////////////////////
//Left Side
//Red2 9
//Green2 11
//Blue2 10
//Red3 A1
//Green3 A0
//Blue3 A2
//Right Side
int ledRR1 = 5;
int ledGR1 = 3;
int ledBR1 = 6;
int ledRR2 = A4;
int ledGR2 = A3;
int ledBR2 = A5;
///////////////////
//Left Side
int ledRL1 = 9;
int ledGL1 = 11;
int ledBL1 = 10;
int ledRL2 = A1;
int ledGL2 = A0;
int ledBL2 = A2;
//////////////////
//Strings
String mode;
String node;
String moving;
String direct;
int x;
void setup(){
Serial.begin(9600);
//PinMode
pinMode(ledRR1, OUTPUT);
pinMode(ledGR1, OUTPUT);
pinMode(ledBR1, OUTPUT);
pinMode(ledRR2, OUTPUT);
pinMode(ledGR2, OUTPUT);
pinMode(ledBR2, OUTPUT);
pinMode(ledRL1, OUTPUT);
pinMode(ledGL1, OUTPUT);
pinMode(ledBL1, OUTPUT);
pinMode(ledRL2, OUTPUT);
pinMode(ledGL2, OUTPUT);
pinMode(ledBL2, OUTPUT);
//START IN THIS STATE:
//Right
analogWrite(ledRR1, 0);
analogWrite(ledGR1, 0);
analogWrite(ledBR1, 0);
analogWrite(ledRR2, 0);
analogWrite(ledGR2, 0);
analogWrite(ledBR2, 0);
//Left
analogWrite(ledRL1, 0);
analogWrite(ledGL1, 0);
analogWrite(ledBL1, 0);
analogWrite(ledRL2, 0);
analogWrite(ledGL2, 0);
analogWrite(ledBL2, 0);
x = 0;
}
void loop(){
Serial.println("Main menu");
while(Serial.available()==0){
mode = Serial.readString();
node = Serial.readString();
moving = Serial.readString();
Serial.setTimeout(50);
while(x <= 0){
Serial.println("Welcome to Andy Mood'O Matic light machine");
Serial.println("");
Serial.println("Please select the mode according to your mood");
Serial.println("");
Serial.println("");
Serial.println("Commands and available modes");
Serial.println("Commands: Main Menu or just main");
Serial.println("");
Serial.println("Please type modes to see the available modes");
Serial.println("");
Serial.println("SOMETIMES THE ARDUINO IS SLOW AND YOU HAVE TO INPUT THE COMMAND TWICE!");
x = x+1;
}
if(node == "modes" || node == "Modes"){
Serial.println("Available modes, NOTE: YOU CAN USE SIMPLE COMMANDS!");
Serial.println("");
Serial.println("Relax /SIMPLE COMMAND: a");
Serial.println(" Automated Relax mode");
Serial.println("");
Serial.println("Intimate /SIMPLE COMMAND: b");
Serial.println(" Automated intimate mode");
Serial.println("");
Serial.println("Party mode or Party /SIMPLE COMMAND: c");
Serial.println(" This is user controlled, set the amount of time you want the lights to go for");
Serial.println(" Please check description in party mode to see available options");
Serial.println("");
Serial.println("Night /SIMPLE COMMAND: d");
Serial.println(" Automated night mode");
Serial.println(" User controlled night mode, set how dim the lights should be and time");
Serial.println("");
Serial.println("Off /SIMPLE COMMAND o");
Serial.println(" Turns everything off");
}
if(moving == "Main Menu" || moving == "main menu" || moving == "Main menu" || moving == "main Menu" || moving == "main menu" || moving == "main" || moving == "Main"){
//This is to go back to main main, for each stop loop you have to add this to repeat the println
x = x-1;
}
//Relax
if(mode == "Relax" || mode == "relax" || mode == "a"){
Serial.println("This is automatic relax mode");
for(int fadeValue = 0; fadeValue <= 250; fadeValue +=10){
analogWrite(ledGR1,fadeValue);
analogWrite(ledGL1, fadeValue);
analogWrite(ledBL1, 250);
analogWrite(ledBR1, 250);
analogWrite(ledGR2, fadeValue);
analogWrite(ledGL2,fadeValue);
analogWrite(ledBR2,fadeValue);
analogWrite(ledBL2,fadeValue);
delay(60000);
}
for (int fadeValue = 250; fadeValue >= 0; fadeValue -= 10){
// sets the value (range from 0 to 255):
analogWrite(ledBL1, 250);
analogWrite(ledBR1, 250);
analogWrite(ledGR2,fadeValue);
analogWrite(ledGL2, fadeValue);
analogWrite(ledGR1, fadeValue);
analogWrite(ledGL1,fadeValue);
analogWrite(ledBL2,fadeValue);
analogWrite(ledBR2,fadeValue);
// wait for 30 milliseconds to see the dimming effect
delay(60000);
}
for(int fadeValue = 0; fadeValue <= 250; fadeValue +=10){
analogWrite(ledGR2,fadeValue);
analogWrite(ledGL2, 0);
analogWrite(ledBL1, 250);
analogWrite(ledBR1, 250);
analogWrite(ledGR1, fadeValue);
analogWrite(ledGL1, 0);
analogWrite(ledBR2,fadeValue);
analogWrite(ledBL2,fadeValue);
delay(60000);
}
for (int fadeValue = 250; fadeValue >= 0; fadeValue -= 10){
// sets the value (range from 0 to 255):
analogWrite(ledBR1, 250);
analogWrite(ledBL1, 250);
analogWrite(ledGR2,fadeValue);
analogWrite(ledGR1, 0);
analogWrite(ledGR2, fadeValue);
analogWrite(ledGL2, 0);
analogWrite(ledBL2,fadeValue);
analogWrite(ledBR2,fadeValue);
// wait for 30 milliseconds to see the dimming effect
delay(60000);
}
analogWrite(ledGL1, 0);
analogWrite(ledGR1,0);
analogWrite(ledGR2,0);
analogWrite(ledGL2,0);
analogWrite(ledBL1, 250);
analogWrite(ledBR1, 250);
analogWrite(ledBL2,0);
analogWrite(ledBR2,0);
}
//Off
if(mode == "Off" || mode == "o" || mode == "off"){
Serial.println("Everything off");
analogWrite(ledRR1, 0);
analogWrite(ledGR1, 0);
analogWrite(ledBR1, 0);
analogWrite(ledRR2, 0);
analogWrite(ledGR2, 0);
analogWrite(ledBR2, 0);
analogWrite(ledRL1, 0);
analogWrite(ledGL1, 0);
analogWrite(ledBL1, 0);
analogWrite(ledRL2, 0);
analogWrite(ledGL2, 0);
analogWrite(ledBL2, 0);
}
//Intimate
if(mode == "intimate" || mode == "Intimate" || mode == "b"){
Serial.println("Automatic Intimate mode");
for(int fadeValue = 0; fadeValue <= 150; fadeValue +=50){
analogWrite(ledRR1,250);
analogWrite(ledRL1, 250);
analogWrite(ledBR1, fadeValue);
analogWrite(ledBL1, fadeValue);
analogWrite(ledRL2, fadeValue);
analogWrite(ledGR1,fadeValue);
analogWrite(ledBL2,fadeValue);
analogWrite(ledRR2,fadeValue);
analogWrite(ledBR2,fadeValue);
delay(60000);
}
for (int fadeValue = 250; fadeValue >= 0; fadeValue -= 50){
// sets the value (range from 0 to 255):
analogWrite(ledRR1,250);
analogWrite(ledRL1, 250);
analogWrite(ledBL1, fadeValue);
analogWrite(ledBR1, 250);
analogWrite(ledRL2, fadeValue);
analogWrite(ledGR1,fadeValue);
analogWrite(ledBL2, 250);
analogWrite(ledRR2,fadeValue);
analogWrite(ledBR2,150);
// wait for 30 milliseconds to see the dimming effect
delay(60000);
}
for (int fadeValue = 250; fadeValue >= 150; fadeValue -= 50){
// sets the value (range from 0 to 255):
analogWrite(ledRR1, 250);
analogWrite(ledRL1, 250);
analogWrite(ledBL1, 0);
analogWrite(ledBR1, 0);
analogWrite(ledRL2, 0);
analogWrite(ledGR1,0);
analogWrite(ledBL2,fadeValue);
analogWrite(ledRR2,0);
analogWrite(ledBR2, 150);
delay(60000);
}
for (int fadeValue = 150; fadeValue >= 0; fadeValue -= 50){
// sets the value (range from 0 to 255):
analogWrite(ledRR1,250);
analogWrite(ledRL1, 250);
analogWrite(ledBL1, 0);
analogWrite(ledBR1, 0);
analogWrite(ledRL2, 0);
analogWrite(ledGR1,0);
analogWrite(ledBL2,fadeValue);
analogWrite(ledRR2,0);
analogWrite(ledBR2,fadeValue);
delay(60000);
}
for (int fadeValue = 250; fadeValue >= 0; fadeValue -= 50){
// sets the value (range from 0 to 255):
analogWrite(ledRR1,fadeValue);
analogWrite(ledRL1, fadeValue);
analogWrite(ledBL1, 0);
analogWrite(ledBR1, 0);
analogWrite(ledRL2, 0);
analogWrite(ledGR1,0);
analogWrite(ledBL2,0);
analogWrite(ledRR2,0);
analogWrite(ledBR2,0);
// wait for 30 milliseconds to see the dimming effect
delay(60000);
}
for(int fadeValue = 0; fadeValue <= 150; fadeValue +=50){
analogWrite(ledRR1,fadeValue);
analogWrite(ledRL1, fadeValue);
analogWrite(ledBL1, fadeValue);
analogWrite(ledBR1, fadeValue);
analogWrite(ledRL2, fadeValue);
analogWrite(ledGR1, 0);
analogWrite(ledBL2,fadeValue);
analogWrite(ledRR2,fadeValue);
analogWrite(ledBR2,fadeValue);
delay(60000);
}
for(int fadeValue = 0; fadeValue <= 250; fadeValue +=50){
analogWrite(ledRR1, fadeValue);
analogWrite(ledRL1, fadeValue);
analogWrite(ledBL1, 150);
analogWrite(ledBR1, 150);
analogWrite(ledRL2, fadeValue);
analogWrite(ledGR1, 0);
analogWrite(ledBL2, 150);
analogWrite(ledRR2, fadeValue);
analogWrite(ledBR2, 150);
delay(60000);
}
analogWrite(ledRR1, 0);
analogWrite(ledRL1, 0);
analogWrite(ledBL1, 150);
analogWrite(ledBR1, 150);
analogWrite(ledRL2, 0);
analogWrite(ledGR1, 0);
analogWrite(ledBL2, 150);
analogWrite(ledRR2, 0);
analogWrite(ledBR2, 150);
}
//Party
if(mode == "Party" || mode == "party" || mode == "Party mode" || mode == "party mode" || mode == "Party Mode" || mode == "party Mode" || mode == "c"){
Serial.println("Party mode");
Serial.println("For selecting another mode and go back please type back");
int y;
int w;
Serial.println("How many times? note: 1 time = 20 seconds");
while(Serial.available()==0){
direct = Serial.readString();
if(direct == "Back" || direct == "back"){
break;
}
y = 0;
w = Serial.parseInt();
if(y <= w){
for(int i = 0; i < w; i = i+1){
Serial.println("Initializing");
Serial.println(w);
for(int fadeValue = 0; fadeValue <= 250; fadeValue +=50){
analogWrite(ledRR1, fadeValue);
analogWrite(ledBR1, fadeValue);
delay(500);
analogWrite(ledGR1, fadeValue);
analogWrite(ledGL1,fadeValue);
analogWrite(ledBL1, 0);
analogWrite(ledRR1,0);
analogWrite(ledGL2,0);
analogWrite(ledRL2,0);
analogWrite(ledBL2,0);
analogWrite(ledGR2,0);
analogWrite(ledRR2,0);
analogWrite(ledBR2,0);
delay(500);
}
analogWrite(ledRR1, 250);
analogWrite(ledGR2, 250);
analogWrite(ledBR1, 0);
analogWrite(ledGR1, 0);
analogWrite(ledBL1, 0);
analogWrite(ledRL1,0);
analogWrite(ledGL2,0);
analogWrite(ledRL2,0);
analogWrite(ledBL2,0);
analogWrite(ledGR2,0);
analogWrite(ledRR2,0);
analogWrite(ledBR2,0);
delay(1000);
analogWrite(ledBR1, 250);
analogWrite(ledRL1, 250);
delay(500);
analogWrite(ledGR1, 250);
analogWrite(ledRR1, 250);
analogWrite(ledBL1, 250);
analogWrite(ledGL1, 150);
analogWrite(ledRL1, 50);
delay(1000);
analogWrite(ledGR1, 0);
analogWrite(ledRR1, 0);
analogWrite(ledBL1, 0);
analogWrite(ledGL1, 0);
analogWrite(ledRL1, 0);
delay(500);
analogWrite(ledGR1, 250);
analogWrite(ledRR1, 250);
analogWrite(ledBL1, 250);
analogWrite(ledGL1, 150);
analogWrite(ledRL1, 50);
delay(500);
analogWrite(ledGR1, 0);
analogWrite(ledRR1, 0);
analogWrite(ledBL1, 0);
analogWrite(ledGL1, 0);
analogWrite(ledRL1, 0);
delay(1000);
analogWrite(ledGR1, 250);
analogWrite(ledRR1, 250);
analogWrite(ledBL1, 250);
analogWrite(ledGL1, 150);
analogWrite(ledRL1, 50);
delay(2000);
analogWrite(ledGL1,250);
analogWrite(ledGR1, 250);
delay(1000);
analogWrite(ledGL1,0);
analogWrite(ledGR1, 0);
delay(500);
analogWrite(ledRR1,250);
analogWrite(ledRL1, 250);
delay(1000);
analogWrite(ledRR1,0);
analogWrite(ledRL1, 0);
delay(500);
analogWrite(ledGL1,250);
analogWrite(ledGR1, 250);
analogWrite(ledBR1,250);
analogWrite(ledBL1,250);
delay(2000);
analogWrite(ledGL1,0);
analogWrite(ledGR1, 0);
delay(1000);
analogWrite(ledRR1, 0);
analogWrite(ledBR1, 0);
analogWrite(ledGR1, 0);
analogWrite(ledGL1,0);
analogWrite(ledBL1, 0);
analogWrite(ledRL1,0);
analogWrite(ledGL2,0);
analogWrite(ledRL2,0);
analogWrite(ledBL2,0);
analogWrite(ledGR2,0);
analogWrite(ledRR2,0);
analogWrite(ledBR2,0);
y = y +1;
}
}
else if(y >= w){
Serial.println("Please type main to go back to main menu or select another value");
break;
}
}
}
//Night
if(mode == "Night" || mode == "night" || mode == "d"){
Serial.println("Automatic night mode");
analogWrite(ledRR1, 250);
analogWrite(ledGR1, 250);
analogWrite(ledBR1, 250);
analogWrite(ledRR2, 250);
analogWrite(ledGR2, 250);
analogWrite(ledBR2, 250);
analogWrite(ledRL1, 250);
analogWrite(ledGL1, 250);
analogWrite(ledBL1, 250);
analogWrite(ledRL2, 250);
analogWrite(ledGL2, 250);
analogWrite(ledBL2, 250);
delay(3600000);
for(int fadeValue = 250; fadeValue >= 0; fadeValue -=50){
analogWrite(ledRR1, fadeValue);
analogWrite(ledGR1, fadeValue);
analogWrite(ledBR1, fadeValue);
analogWrite(ledRR2, fadeValue);
analogWrite(ledGR2, fadeValue);
analogWrite(ledBR2, fadeValue);
analogWrite(ledRL1, fadeValue);
analogWrite(ledGL1, fadeValue);
analogWrite(ledBL1, fadeValue);
analogWrite(ledRL2, fadeValue);
analogWrite(ledGL2, fadeValue);
analogWrite(ledBL2, fadeValue);
delay(120000);
Serial.println("Good Night");
}
analogWrite(ledRR1, 0);
analogWrite(ledGR1, 0);
analogWrite(ledBR1, 0);
analogWrite(ledRR2, 0);
analogWrite(ledGR2, 0);
analogWrite(ledBR2, 0);
analogWrite(ledRL1, 0);
analogWrite(ledGL1, 0);
analogWrite(ledBL1, 0);
analogWrite(ledRL2, 0);
analogWrite(ledGL2, 0);
analogWrite(ledBL2, 0);
break;
}
}
}
Спасибо!
Давай серьезно под голосовать меня? По какой причине? –