Доброго времени суток уважаемые форумчане! Зациклился на некорректной работе оператора switch. Сначала все выполнялось, в ходе усложнения скетча что-то пошло не так. Откат назад не помог. Новое написание упрощенного варианта тоже не помогло. уже видно глаз замылился день потратил. готов впасть в отчаяние. Смысл скетча такой. При нажатии кнопки set(1) переходим к выполнению функции setmode. опрашиваем кнопки право влево итд. И так пока не нажмем кнопку set (1),тогда выходим из функции. Однако при переходе в функцию, независимо от нажатия кнопки set(1) срабатывает оператор while и выводит из функции setmode хотя не должен. Где я упустил чего? Благодарю заранее. С уважением Роман. Код (C++): #include <LiquidCrystal.h> LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //const int stepsPerRevolution = 2000; //Stepper myStepper(200, 13, 12); boolean valset=false; void setup() { lcd.begin(16, 2); analogWrite(10,140); // set the speed at 60 rpm: myStepper.setSpeed(200); // initialize the serial port: Serial.begin(9600); } byte key(){//1-719,2-480,3-130,4-306, 5-0 int val=analogRead(0); if (val<50) return 5; else if (val<150) return 3; else if (val<350) return 4; else if (val<500) return 2; else if (val<800) return 1; else if (val<1023) return 0; } void loop() { lcd.clear(); lcd.setCursor(0, 0); lcd.print("analogRead "); lcd.print(analogRead(0)); lcd.setCursor(0,1); switch (key()) { case 1: //lcd.print("set"); setmode(true);//переход в фуекцию "setmode" break; case 2: lcd.print("left"); break; case 3: lcd.print("up"); break; case 4: lcd.print("down"); delay(500); break; case 5: lcd.print("right"); break; } delay (250); } void setmode(boolean valset)//собственно сама функция { do // пока переменная валсет истинна, печатаем z-axe и опрашиваем кнопки { lcd.setCursor(0,1); lcd.print("set Z-axe"); switch(key())// опрос кнопок { case 1:// если нажата кнопка "set", меняем переменную valset на false lcd.setCursor(10,1); lcd.print("knob 1"); delay(1000); valset=false; break; case 2:// если нажата 2, печатаем на экране кнопка 2 lcd.setCursor(10,1); lcd.print("knob 2"); delay(1000); break; }//скобка свитча }while(valset==true); lcd.print("close"); delay(1000); }