Переход в другой цикл по нажатию кнопки

Grin52
Offline
Зарегистрирован: 15.07.2015

Добрый день, помогите с таким вопросом: есть несколько циклов, часть идет по истечению времени атоматически, а часть должна переходить на следующий цикл по нажатию кнопки.

......
case 11:                       // нагрев
     if (T<T6) {port1_stat=1;}
     else {
       port1_stat=0;
       process++;
       procStTime=timer;
     }
     break;      
     
     case 12:                         // временя выдерки
     if (procStTime+P6*60 < timer) {process++;}
      else {
       port1_stat=0;
       if (T<T6) {port1_stat=1;}
     }
     break;      
     
     case 13:                  // варка
     if (T<T7) {port1_stat=1;}
     else {
       port1_stat=0;         
       process++;
       procStTime=timer; 
     }
     break;      
     
  case 14://пауза варки. тут нужно перейти к следующей варки по нажатию кнопки

     if (procStTime+P7*60 < timer) {process++;}      
      else {     
       port1_stat=0;
       if (T<T7) {port1_stat=1;}      
      }                
     break; 

case 15:       
                        // варка
     if (T<T8) {port1_stat=1;}
     else {
     port1_stat=0;      
       process++;
       procStTime=timer; 
     }    
     break;  
.....

изначальный нагрев и старт по нажатию реализавал вот так 

case 1:                          //  нагрев до заданной температуры
     if (T<T1) {port1_stat=1;}
     else     
       port1_stat=0;                    
      if (butPush == 3) 
        process++;         
        procStTime=timer; 

и вывод сообщения

....
case 1: {
        lcd.print("^"); 
        lcd.print(T1);
        lcd.setCursor(6,0);
        if (port1_stat){ lcd.print("ждите, нагрев");}         
        else {lcd.setCursor(0,0);
        tone(buzzer, 500); 
        delay(500);       
        noTone(buzzer);
        lcd.print(" нажмите "ок" ");                
        }
        break;
          }

 

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

Вы не знаете как и почему работает Ваш скетч? Или Вы что-то сделали и оно работает не так?

Grin52
Offline
Зарегистрирован: 15.07.2015

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

 

 

Гриша
Offline
Зарегистрирован: 27.04.2014

читайте кнопку не в case , делайте инкремент переменной при нажатии и переходите по значению переменной (если по кругу). можно крутится в case  и менять переменную, но она должна быть глобальной (while)

Grin52
Offline
Зарегистрирован: 15.07.2015

те. нагрелся теплоноситель до 80 градусов и прошло заданное время. и продолжение цикла (нагрев и следующая пауза) произойдет только после нажатия на кнопку. 

Гриша
Offline
Зарегистрирован: 27.04.2014

Grin52 пишет:

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

бррр, не понял и/или запутался :)... сколько экранов (вы же где-то смотрите эти значения)? проще переключаться между экранами и менять значение соответствующих переменных (глобальных) т.е. можно выполнять одно, а смотреть другое и менять другую переменную. 

beve
Offline
Зарегистрирован: 15.07.2015

Вы не указали, с каким интервалом у вас обрабатываются здесь приведенные Case-s. Если эти интервалы короткие, то можете просто так:

case 14://пауза варки. тут нужно перейти к следующей варки по нажатию кнопки
	if (procStTime+P7*60 < timer && butPush == 0) {process++;}     
else {    
	port1_stat=0;
	if (T<T7) {port1_stat=1;}     
}               
break; 

То есть если еще действует таймер и не нажата кнопка некоторая... то идет отсчет таймера до конца, иначе обрабатываем else.

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

Гриша пишет:

читайте кнопку не в case , делайте инкремент переменной при нажатии и переходите по значению переменной (если по кругу). можно крутится в case  и менять переменную, но она должна быть глобальной (while)

Может виной всему простуда, но где Вы увидели чтение кнопки к кейсе? зачем инкремент и причем тут while?!?!

Гриша
Offline
Зарегистрирован: 27.04.2014

Grin52 пишет:

те. нагрелся теплоноситель до 80 градусов и прошло заданное время. и продолжение цикла (нагрев и следующая пауза) произойдет только после нажатия на кнопку. 

while не нажали на кнопку, ничего не происходит :))))

Гриша
Offline
Зарегистрирован: 27.04.2014

JollyBiber пишет:

Гриша пишет:

читайте кнопку не в case , делайте инкремент переменной при нажатии и переходите по значению переменной (если по кругу). можно крутится в case  и менять переменную, но она должна быть глобальной (while)

Может виной всему простуда, но где Вы увидели чтение кнопки к кейсе? зачем инкремент и причем тут while?!?!

криво прочитал :) 

зы. я точно простыл... кашель адский :(

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

Гриша пишет:

криво прочитал :) 

зы. я точно простыл... кашель адский :(

Я про свою простуду писал )))))

Гриша
Offline
Зарегистрирован: 27.04.2014

JollyBiber пишет:

Гриша пишет:

криво прочитал :) 

зы. я точно простыл... кашель адский :(

Я про свою простуду писал )))))

Вы в какой палате? может в гости зайду )))))

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

В шестой. С Наполеоном и Бонопартом.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

JollyBiber пишет:

В шестой. С Наполеоном и Бонопартом.

ты это хорош, гостей то зазывать. самим мало.

Grin52
Offline
Зарегистрирован: 15.07.2015

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

...
else 
     port1_stat=0; 
if (butPush == 3)      
       process++;