Меню на LCD или как упростить?

dittohead
Offline
Зарегистрирован: 09.03.2013

Подскажите,есть вот такой код, при нажатии кнопки key1 сразу выбрасывает в settings_stops(),смотрю ком порт-переходит по тексту программы
или как можно оптимизировать это меню без моего говнокода?
кнопки подключены в А0-А2

​void setup(){
Serial.begin(9600);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Stepper Slider");
lcd.setCursor(0, 1);
lcd.print("set start");
pinMode(shutter, INPUT);
digitalWrite(shutter,LOW);
}

void keystate(){
keyState1 = analogRead(key1);
keyState2 = analogRead(key2);
keyState3 = analogRead(key3);
}

void settings_stops(){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("stops number");
lcd.setCursor(0, 1);
lcd.print(stops);
keystate();
if ((keyState1>=900) && (keyState1<=1023)){
Serial.println("key 1 pressed");
stops=stops+10;
steps=stepsTotal/stops;
lcd.setCursor(0, 1);
lcd.print(stops);
delay(300);
}
if ((keyState2>=900) && (keyState2<=1023)){
Serial.println("key 2 pressed");
stops=stops-10;
steps=stepsTotal/stops;
lcd.setCursor(0, 1);
lcd.print(stops);
delay(300);
}
if ((keyState3>=900) && (keyState3<=1023)){
Serial.println("key 3 pressed");
setup();
}
}
void settings_explosureTime(int i=1){
Serial.println("settings expl time");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Expl. Time");
lcd.setCursor(0, 1);
lcd.print(explosureTime/1000 );
keystate();
if ((keyState1>=900) && (keyState1<=1023)){
i--;
explosureTime=explosureTimeArray[i];
lcd.setCursor(0, 1);
lcd.print(explosureTime/1000);
}

if ((keyState2>=900) && (keyState2<=1023)){
i++;
explosureTime=explosureTimeArray[i];
lcd.setCursor(0, 1);
lcd.print(explosureTime/1000);
}

if ((keyState3>=900) && (keyState3<=1023));
settings_stops();
}

void settings_pauseTime(int i=1){
Serial.println("settings pause time");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Pause Time");
lcd.setCursor(0, 1);
lcd.print(pauseTime/1000 );
keystate();
do{
if ((keyState1>=900) && (keyState1<=1023)){
i--;
pauseTime=pauseTimeArray[i];
lcd.setCursor(0, 1);
lcd.print(pauseTime/1000);
}

if ((keyState2>=900) && (keyState2<=1023)){
i++;
pauseTime=pauseTimeArray[i];
lcd.setCursor(0, 1);
lcd.print(pauseTime/1000);
}} while ((keyState3>=900) && (keyState3<=1023));
settings_explosureTime();
}

void doStep(){
Serial.println("stepper job");
delay(pauseTime/2);
motor1.setSpeed(speed);
motor1.step(steps);
delay(pauseTime/2);
}
void shutterRelase(){
Serial.println("shutter job");
digitalWrite(shutter,HIGH);
delay(100);
digitalWrite(shutter,LOW);
delay(explosureTime);
}

void loop(){
keystate();
if ((keyState1>=900) && (keyState1<=1023)){
settings_pauseTime();
}
// if ((keyState3>=900) && (keyState3<=1023)){
// lcd.clear();
// lcd.setCursor(0, 0);
//lcd.print("Still work...");
//for (int i=0; i <= stops; i){
// lcd.setCursor(0, 1);
//lcd.print(i);
//lcd.setCursor(5,1);
//lcd.print ("of");
//lcd.setCursor(8,1);
//lcd.print (stops);
//shutterRelase();
//doStep();

//}

}

з.ы.вставка кода что то не работает

dittohead
Offline
Зарегистрирован: 09.03.2013
​void setup(){
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  lcd.print("Stepper Slider");
  lcd.setCursor(0, 1);
  lcd.print("set        start");
  pinMode(shutter, INPUT);
  digitalWrite(shutter,LOW);
}

void keystate(){
  keyState1 = analogRead(key1);
  keyState2 = analogRead(key2);
  keyState3 = analogRead(key3);
}

void settings_stops(){
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("stops number");
  lcd.setCursor(0, 1);
  lcd.print(stops);
  keystate();
  if ((keyState1>=900) && (keyState1<=1023)){
    Serial.println("key 1 pressed");
    stops=stops+10;
    steps=stepsTotal/stops;
    lcd.setCursor(0, 1);
    lcd.print(stops);
    delay(300);
  }
  if ((keyState2>=900) && (keyState2<=1023)){
     Serial.println("key 2 pressed");
    stops=stops-10;
    steps=stepsTotal/stops;
    lcd.setCursor(0, 1);
    lcd.print(stops);
    delay(300);
  }
  if ((keyState3>=900) && (keyState3<=1023)){
     Serial.println("key 3 pressed");
    setup();
  }  
}
void settings_explosureTime(int i=1){
   Serial.println("settings expl time");
   lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("   Expl. Time");
  lcd.setCursor(0, 1);
  lcd.print(explosureTime/1000 );
  keystate();
    if ((keyState1>=900) && (keyState1<=1023)){
      i--;
      explosureTime=explosureTimeArray[i];
      lcd.setCursor(0, 1);
      lcd.print(explosureTime/1000);
    }

    if ((keyState2>=900) && (keyState2<=1023)){
      i++;
      explosureTime=explosureTimeArray[i];
      lcd.setCursor(0, 1);
      lcd.print(explosureTime/1000); 
    }

  if ((keyState3>=900) && (keyState3<=1023));
  settings_stops();
}

void settings_pauseTime(int i=1){
   Serial.println("settings pause time");
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("   Pause Time");
  lcd.setCursor(0, 1);
  lcd.print(pauseTime/1000 );
  keystate();
  do{
    if ((keyState1>=900) && (keyState1<=1023)){
      i--;
      pauseTime=pauseTimeArray[i];
      lcd.setCursor(0, 1);
      lcd.print(pauseTime/1000);
    }

    if ((keyState2>=900) && (keyState2<=1023)){
      i++;
      pauseTime=pauseTimeArray[i];
      lcd.setCursor(0, 1);
      lcd.print(pauseTime/1000); 
    }} while ((keyState3>=900) && (keyState3<=1023));
  settings_explosureTime();
}

void doStep(){
  Serial.println("stepper job");
  delay(pauseTime/2);
  motor1.setSpeed(speed);
  motor1.step(steps);
  delay(pauseTime/2);
}
void shutterRelase(){
  Serial.println("shutter job");
  digitalWrite(shutter,HIGH);
  delay(100);
  digitalWrite(shutter,LOW);
  delay(explosureTime);
}

void loop(){
  keystate();
  if ((keyState1>=900) && (keyState1<=1023)){
    settings_pauseTime();
  }
//  if ((keyState3>=900) && (keyState3<=1023)){
 //   lcd.clear();
   // lcd.setCursor(0, 0);
    //lcd.print("Still work...");
    //for (int i=0; i <= stops; i){
     // lcd.setCursor(0, 1);
      //lcd.print(i);
      //lcd.setCursor(5,1);
      //lcd.print ("of");
      //lcd.setCursor(8,1);
      //lcd.print (stops);  
      //shutterRelase();
      //doStep();

    //}

  }

 

vvadim
Offline
Зарегистрирован: 23.05.2012

Поищите на просторах сети готовое решение для таймлапс контроллера и не парьтесь - с недостаточным опытом и знаниями в программировании такую задачу решить , к сожелению , не получится.

dittohead
Offline
Зарегистрирован: 09.03.2013

Тему можно удалять. Довел до ума,заработало:)