



char str7[20]={0};
char str8[20]={0};
char str9[20]={0};
char ss[32];
enum SIGNAL
{
encoder_push,
encoder_push_int,
encoder_poll,
encoder_inc,
encoder_dec,
start_alarm,
timeout_alarm,
no_active_to_sleep,
sensor_to_active,
nosignal
};
enum SIGNAL signal=nosignal;
enum STATE
{
AnalogCurrentTime,
SetTimeHours,
SetTimeHoursInc,
SetTimeHoursDec,
SetTimeMinutes,
SetTimeMinutesInc,
SetTimeMinutesDec,
SetAlarmHours,
SetAlarmHoursInc,
SetAlarmHoursDec,
SetAlarmMinutes,
SetAlarmMinutesInc,
SetAlarmMinutesDec,
Sleep,
IMU,
Alarm,
Wake,
NoState
};
volatile enum STATE state=NoState; 
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
enum STATE state_old;
signal= getsignal();
state_old = state;
state= change_state(&signal, state);
DO_work(state, state_old);
}
/* USER CODE END 3 */
} 
enum SIGNAL getsignal(void)
{
if(btn_try_push==1 || btn_try_push_int==1)
{
btn_try_push=0;
btn_try_push_int=0;
signal = encoder_push;
return signal;
}
if(try_sensor_to_active==1)
{
try_sensor_to_active=0;
signal = sensor_to_active;
return signal;
}
if(enc_try_inc==1)
{
enc_try_inc=0;
signal = encoder_inc;
return signal;
}
if(enc_try_dec==1)
{
enc_try_dec=0;
signal = encoder_dec;
return signal;
}
if(signal_timeout_sleep==1)
{
signal_timeout_sleep=0; //priority
return signal=no_active_to_sleep;
}
if(signal_alarm==1)
{
signal_alarm=0; //priority
return signal=start_alarm;
}
if(signal_stop_alarm==1)
{
signal_stop_alarm=0; //priority
return signal=timeout_alarm;
}
return signal;
} 
enum STATE change_state(enum SIGNAL *signal, enum STATE state)
{
switch(state)
{//by state
case AnalogCurrentTime:
state=change_state_from_AnalogCurrenTime(signal, state);
break;
case SetTimeHours:
state=change_state_from_SetTimeHours(signal, state);
break;
case SetTimeMinutes:
state=change_state_from_SetTimeMinutes(signal, state);
break;
case SetAlarmHours:
state=change_state_from_SetAlarmHours(signal, state);
break;
case SetAlarmMinutes:
state=change_state_from_SetAlarmMinutes(signal, state);
break;
case IMU:
state=change_state_from_IMU(signal, state);
break;
case Alarm:
state=change_state_from_Alarm(signal, state);
break;
case Sleep:
state=change_state_from_Sleep(signal, state);
break;
case SetTimeHoursInc:
state=change_state_from_SetTimeHoursInc(signal, state);
break;
case SetTimeHoursDec:
state=change_state_from_SetTimeHoursDec(signal, state);
break;
case SetTimeMinutesInc:
state=change_state_from_SetTimeMinutesInc(signal, state);
break;
case SetTimeMinutesDec:
state=change_state_from_SetTimeMinutesDec(signal, state);
break;
case SetAlarmHoursInc:
state=change_state_from_SetAlarmHoursInc(signal, state);
break;
case SetAlarmHoursDec:
state=change_state_from_SetAlarmHoursDec(signal, state);
break;
case SetAlarmMinutesInc:
state=change_state_from_SetAlarmMinutesInc(signal, state);
break;
case SetAlarmMinutesDec:
state=change_state_from_SetAlarmMinutesDec(signal, state);
break;
case NoState:
state=change_state_from_NoState(signal, state);
break;
case Wake:
state=change_state_from_Wake(signal, state);
break;
default:
state=change_state_from_NoState(signal, state);
break;
}
return state;
} 
void DO_work(enum STATE state, enum STATE state_old)
{
switch(state)
{//by state
case AnalogCurrentTime:
draw_analog_watch(state, state_old);
break;
case SetTimeHours:
draw_settime_hours(state, state_old);
break;
case SetTimeMinutes:
draw_settime_minutes(state, state_old);
break;
case SetAlarmHours:
draw_setalarm_hours(state, state_old);
break;
case SetAlarmMinutes:
draw_setalarm_minutes(state, state_old);
break;
case IMU:
draw_IMU(state, state_old);
break;
case Alarm:
draw_alarm(state, state_old);
break;
case Sleep:
to_sleep(state, state_old);
break;
case Wake:
to_wake(state, state_old);
break;
case SetTimeHoursInc:
inc_draw_settime_hours(state, state_old);
break;
case SetTimeHoursDec:
dec_draw_settime_hours(state, state_old);
break;
case SetTimeMinutesInc:
inc_draw_settime_minutes(state, state_old);
break;
case SetTimeMinutesDec:
dec_draw_settime_minutes(state, state_old);
break;
case SetAlarmHoursInc:
inc_draw_setalarm_hours(state, state_old);
break;
case SetAlarmHoursDec:
dec_draw_setalarm_hours(state, state_old);
break;
case SetAlarmMinutesInc:
inc_draw_setalarm_minutes(state, state_old);
break;
case SetAlarmMinutesDec:
dec_draw_setalarm_minutes(state, state_old);
break;
default:
break;
}
} | Стартуем! |
| Дальше |
| Проверить |
| Узнать результат |
| Дальше |
| Проверить |
| Узнать результат |
| Дальше |
| Проверить |
| Узнать результат |
| Пройти еще раз |
| Пройти еще раз |
| Пройти еще раз |