const int red = 4;//Пин выхода кр светодиода
const int green = 5;//Пин выхода зеленого светодиода
const int yellow = 6;//Пин выхода желтого светодиода
const int buttonPinGreen = 2;//Пин входа зеленой кнопки
const int buttonPinRed = 3;//Пин входа красной кнопки
unsigned long worktime = 30; //120000;      базовое время работы
unsigned long resttime = 15; //30000;       базовое время отдыха
int GreenbuttonState=0;//Состояние зеленой кнопки
int RedbuttonState=0;//Состояние красной кнопки
int GreenShine=0;//Состояние зеленой лампы 0-не работает, 1-работает
int RedShine=0;//Состояние красной лампы 0-не работает, 1-работает
int YellowShine=0;//Состояние желтой лампы 0-не работает, 1-работает
int CycleExit=0;//переменная-флаг выхода из цикла
const int workchange=5;//30000   изменение времени работы
const int restchange = 1;//1500  изменение времени отдыха
const int timer=4;//Частота больших перерывов
const unsigned long Bigresttime=90000;//Большой перерыв после 4-х итераций
int i=0;//Счетчик итераций




void setup() {
  // put your setup code here, to run once:
  pinMode(green, OUTPUT);
 // pinMode(red, OUTPUT);
  pinMode(yellow, OUTPUT);

  // инициализируем пин, подключенный к кнопке, как вход
  pinMode(buttonPinGreen, INPUT);
  pinMode(buttonPinRed, INPUT);
   // определяем пин как вход вход с резистором
}

void loop() {
/* //***********************Зеленая лампочка**************
if (GreenShine==0&&digitalRead(green)==LOW)//НАчало загорается зеленая лампочка
 {
  GreenbuttonState = digitalRead(buttonPinGreen);
  delay(500);
  if ( GreenbuttonState==HIGH)
  {
    GreenShine++;
    delay(500);
   digitalWrite(green,HIGH);
  delay(100);
  delay(500);
  GreenShine=0;
  }
  delay(500);
  digitalWrite(green,LOW);
  delay(500);
 }//Конец загорается зеленая лампочка

//*********************Красная лампочка**********************
if (RedShine==0&&digitalRead(red)==LOW)//НАчало загорается красная лампочка
 {
  RedbuttonState = digitalRead(buttonPinRed);
  delay(500);
  if ( RedbuttonState==HIGH)
  {
    RedShine++;
    delay(500);
   digitalWrite(red,HIGH);
  delay(100);
  delay(500);
  RedShine=0;
  }
  delay(500);
  digitalWrite(red,LOW);
  delay(500);
 }//Конец загорается красная лампочка
*/
//************************Ожидание начала программы
  while (CycleExit==0) //Ожидание начала выполнения
  {
        digitalWrite(yellow, HIGH);

    digitalWrite(yellow, LOW);

     if (CycleExit==0)
    {
    GreenbuttonState = digitalRead(buttonPinGreen);
    if(GreenbuttonState==HIGH)
    {
      CycleExit++;
    }
    }//Конец проверки флага цикла
  }//выход из цикла
  CycleExit=0;//конец ожидания начала выполнения
//**************************************Время работы 
  delay(worktime); //Задержка на время работы
//**************************************Ожидание оценки работы и оценка работы
   while (CycleExit==0) //Ожидание оценки работы
  {
    digitalWrite(yellow, HIGH);
    digitalWrite(yellow, LOW);
     if (CycleExit==0)
    {
    //***********************Зеленая лампочка**************Удовлетворительная работа
if (GreenShine==0&&digitalRead(green)==LOW)//НАчало загорается зеленая лампочка
 {
  GreenbuttonState = digitalRead(buttonPinGreen);
  delay(500);
  if ( GreenbuttonState==HIGH)
  {
    GreenShine++;
    delay(500);
   digitalWrite(green,HIGH);
  delay(100);
  delay(500);
  GreenShine=0;
  }
  delay(500);
  digitalWrite(green,LOW);
  CycleExit++;
  worktime=worktime+workchange;
  delay(500);
 }//Конец загорается зеленая лампочка
    //Завершение положительной оценки работы
//*********************Красная лампочка**********************//неудовлетворительная работа
if (RedShine==0&&digitalRead(red)==LOW)//НАчало загорается красная лампочка
 {
  RedbuttonState = digitalRead(buttonPinRed);
  delay(500);
  if ( RedbuttonState==HIGH)
  {
    RedShine++;
    delay(500);
   digitalWrite(red,HIGH);
  delay(100);
  delay(500);
  RedShine=0;
  }
  delay(500);
  digitalWrite(red,LOW);
  CycleExit++;
  worktime=worktime-workchange;
  if(worktime<=0)
  {
    digitalWrite(red,HIGH);
    digitalWrite(yellow,HIGH);
    digitalWrite(green,HIGH);
  }
  delay(500);
 }//Конец загорается красная лампочка
  }//Конец проверки на выход из цикла
  }//выход из цикла
  //*******************************Конец оценки работы
  CycleExit=0;
delay(resttime);
i++;
if (i!=4)//ЕСли пора большой перерыв
{
  digitalWrite(red,HIGH);
  digitalWrite(green,HIGH);
    delay(Bigresttime);
  digitalWrite(red,LOW);
  digitalWrite(green,LOW);
  delay(500);
}//Конец большого перерыва
else{
  delay(resttime);
  //**************************************Ожидание оценки отдыха и оценка отдыха
   while (CycleExit==0) //Ожидание оценки отдыха
  {
    digitalWrite(yellow, HIGH);
    digitalWrite(yellow, LOW);
     if (CycleExit==0)
    {
    //***********************Зеленая лампочка**************Удовлетворительный отдых
if (GreenShine==0&&digitalRead(green)==LOW)//НАчало загорается зеленая лампочка
 {
  GreenbuttonState = digitalRead(buttonPinGreen);
  delay(500);
  if ( GreenbuttonState==HIGH)
  {
    GreenShine++;
    delay(500);
   digitalWrite(green,HIGH);
  delay(100);
  delay(500);
  GreenShine=0;
  }
  delay(500);
  digitalWrite(green,LOW);
  CycleExit++;
  resttime=resttime-restchange;
  if (resttime<0)
  {
   resttime=0; 
  }
  delay(500);
 }//Конец загорается зеленая лампочка
    //Завершение положительной оценки работы
//*********************Красная лампочка**********************//неудовлетворительный отдых
if (RedShine==0&&digitalRead(red)==LOW)//НАчало загорается красная лампочка
 {
  RedbuttonState = digitalRead(buttonPinRed);
  delay(500);
  if ( RedbuttonState==HIGH)
  {
    RedShine++;
    delay(500);
   digitalWrite(red,HIGH);
  delay(100);
  delay(500);
  RedShine=0;
  }
  delay(500);
  digitalWrite(red,LOW);
  CycleExit++;
  resttime=resttime+restchange;
  if(resttime>=worktime)
  {
    digitalWrite(red,HIGH);
    digitalWrite(yellow,HIGH);
    digitalWrite(green,HIGH);
  }
  delay(500);
 }//Конец загорается красная лампочка
  }//Конец проверки флага выхода
  }//Выход из цикла
  //*******************************Конец оценки отдыха
}
}