ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
24 апреля
1083227
IBAH (04.03.2021 20:09, просмотров: 9278) Cкpипaч
Ошибка - "действия, выполняемые при попадании в состояние (один раз)", эти действия надо делать в предыдущем состоянии. Когда пишу КА, представляю что пишу на Бейсике, только вместо номера строки состояние автомата. Вот пример светофора: 
static Timer_t t1;
static int Sost;

void Svetofor(void)
  {
  if(Sost==0)
    {//ожидаем нажатия кнопки
    Red=!0;//горит красный
    if(Knop)//проверяем кнопку
      {
      StartTimer(&t1,5000);
      Yellow=!0;//зажигаем желтый
      Sost=10;
      }
    }
  if(Sost==10)
    {//Горит красный и желтый
    if(Timer(&t1))
      {
      Red=0;
      Yellow=0;
      Green=!0;
      StartTimer(&t1,5000);
      Sost=20;
      }
    }
  if(Sost==20)
    {//Горит зеленый
    if(Timer(&t1))
      {
      Red=0;
      Yellow=!0;
      Green=0;
      StartTimer(&t1,5000);
      Sost=30;
      }
    }
  if(Sost==30)
    {//Горит желтый
    if(Timer(&t1))
      {
      Red=!0;
      Yellow=0;
      Green=0;
      StartTimer(&t1,5000);
      Sost=0;
      }
    }
  }