Меню на LCD или как упростить?
- Войдите на сайт для отправки комментариев
Подскажите,есть вот такой код, при нажатии кнопки 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();
//}
}
з.ы.вставка кода что то не работает
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(); //} }Поищите на просторах сети готовое решение для таймлапс контроллера и не парьтесь - с недостаточным опытом и знаниями в программировании такую задачу решить , к сожелению , не получится.
Тему можно удалять. Довел до ума,заработало:)