Помогите разобраться

Нет ответов
djdsoul
Offline
Зарегистрирован: 27.10.2016

Привет, помогите разобраться с проектом, собственно код ПДА Сталкера. Не могу понять с зонами покрытия wifi, ssid влияет на функционал зоны или что-то еще. И прием сообщений тоже не очень понятен.

Функционал:

Отображение здоровья игрока (слева в углу). Здоровье могу восстанавливать специальные зоны (покрытые WiFi), артефакты (описание ниже). При потере здоровья до 0, на дисплее высвечивается соответствующее сообщение и продолжительный писк, которые обозначают, что игрок «мертв» и должен двигаться на «мертвяк», где здоровье за определенное время восстановится.
Правее расположена иконка звука, чтобы игрок видел, включен или отключен звук.
Правее иконка сообщений и рядом количество непрочитанных сообщений. По ходу игры, игроки могут получать СМС сообщения посредством WiFi.
Правее иконка заряда батареи.
Фон – это значение условного радиационного фона. Фон формируется при помощи суммирования WiFi зон, раздающих «радиацию». В зависимости от уровня фона, ПДА издает щелчки (как счетчик «Гейгера»). Чем сильнее «радиация», тем чаще щелчки.
Яд – по ходу игры, попав в WiFi зону раздачи «болезней» (с определенной вероятностью) игрок может заразиться болезнью. У игрока на дисплее высветится определенное сообщение, подкрепленное сигналом. 
Благо – это уровень «Лечилки» игрока.
Защ. Рад. и Иммунитет – это уровень защиты игрока от «Яда» и «Радиации». Эти бонусы, можно получить подключив «Артефакты».
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <EEPROM.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3);
Adafruit_PCD8544 display = Adafruit_PCD8544(5, 6, 7, 8, 9);
//Id
byte Device_id=1, Group_id=1; //ID устройства, ID группировки 
//Мертв/жив
bool Death=false, DeathSignal=false; //Мертв ли сталкер, Повторение сигнала смерти пока не подтвердишь
byte DeathCause=0; //Причина смерти
long Health=100000;
long MaxHealth=100000,PrHealth=101000, PrHealthWrite=100000;; //Максимальное значение жизни
long TreatKoef=100; //Коэффициент лечения в процентах
//Батарея
bool LowVolt=false; //низкий заряд батареи
byte Volt, BatICO=123; //Заряд батареи в процентах и адрес иконки батареи в зависимости от заряда
//Радиация и лечение
byte RadiationKoef=100, MinRadiationKoef=100; //Коэффициент воздействия радиации на игрока
long RadiationLevel=0, TreatLevel=0; //общий уровень радиации и лечилки
long BonusTreat=0; //Для реализации бонуса "Зализывая раны"
long TreatArtefact=0;
bool TreatBar=false; // бонус "Завсегдатай"
bool TreatBaza=false; //бонус "Член банды"
//Устройства, кнопки, пины
int OutDevice[13] = {70, 120, 198, 276, 361, 454, 532, 605, 676, 756, 859, 943, 953}; //АЦП артефактов и админ устройств
int KeysACP[5] = {890, 697, 512, 341, 776}; // АЦП кнопок
byte DeviceID=0, ArtefaktID[2]={0,0}; //Номер подключенного устройства
bool Device[2]={false,false}, Artefakt[2]={false, false}, Key=false; //Логика устройств внешних и нажатия кнопок меню
byte VbatPin=0, AdminDevPin[2]={6,3},ArtefaktPin[2]={7,2}, KeysPin=1, SpeakerPin=10, LedPin=9; //Пины контроллера
//Дисплей
byte KoefPois[3]={0,0,0};
byte KoefRad[3]={0,0,0};
byte PoisonLev[3]={0,0,0};
byte Fon[4]={0,0,0,0};
byte TreatLev[4]={0,0,0,0};
int DisplayLedTime=30000; // Время подсветки дисплея
byte DisplayBright=200, DisplayPage=31; // Якрость подсветки дисплея и номер отображаемой страницы дисплея
bool DisplayChange=false; // Переключение дисплея при воздействии заразы
bool LCD_Sleep=false; //Спит ли дисплей
bool ArtInfo=false; //Показать инфо об артефакте
byte ArtPgNum=0; //Номер Артефакта, который отображает на дисплее
int ArtInfoTime=5000;
//СМС
byte Messages=0; //Кол-во непрочитанных сообщений
char M[70]={0}; //Для вывода сообщений на экран
//Болезнь
bool Zaraza=false;//Гадость
int Poison=0, PoisonAffect=0; // Уровень яда
byte PoisonKoef=100, MinPoisonKoef=100; //Коэффициент воздействия яда на игрока
//Динамик
int SpeakerTime=0,SpeakerWaitTime=0,SpeakerRepeat=0; //Время сигнала, между сигнлами, повторение сигналов
bool SpeakerWait=false, SpeakerReady=true, Mute=false; //запрет одновременного использования пищалки и время между сигналами, глушилка звука
//Отслеживать быстродействие
//bool Pin13=false;
//Статистика
unsigned int DeathCount=0;
//WiFI
unsigned int NewTreat=0, NewRadiation=0;
bool WiFiRefresh=false;
byte SignalLevel=0;
char buf[14];
//Счетчики
unsigned long PrMillisRad=0, PrMillisBat=0, PrMillisTreat=0, MillisSpeaker=0, PrDisplayLedTime=0, PrMillisChangeDisplayPg=0,PrMillisPoison=0,
PrMillisDisplayRefresh=0, PrArtInfoTime=0,PrMillisAdminDevice[2]={0,0},PrMillisArtefaktDevice[2]={0,0}, PrMillisPushKey=0, PrMillisWifiRefresh=0; //Для отсчета времени

void setup() {
if (EEPROM.read(82)!=23) {EEPROM_CLEAR();Signal(5);EEPROM.write(82,23);}
EEPROM_READ();
NoReadMessages();
//  pinMode(LedPin, OUTPUT);
//  analogWrite(LedPin, DisplayBright);
  pinMode(SpeakerPin, OUTPUT);
  pinMode(13, OUTPUT);
  display.begin();
  display.setContrast(60);
  delay(2000);
  PrintUserInfo();
  delay(5000);
  LCD(1);
//    Serial.begin(9600);  // Debugging only
 //   Serial.println("setup"); 
    mySerial.begin(9600);
    Volt=GetVoltage(VbatPin, 6.5, 8.0, 2.0);
    digitalWrite(SpeakerPin, LOW);
    randomSeed(analogRead(4));
TreatLevel=BonusTreat;
mySerial.println("AT+CWMODE=1");
delay(250);
}

void EEPROMWriteInt(int p_address, int p_value)
        {
        byte lowByte = ((p_value >> 0) & 0xFF);
        byte highByte = ((p_value >> 8) & 0xFF);

        EEPROM.write(p_address, lowByte);
        EEPROM.write(p_address + 1, highByte);
        }


unsigned int EEPROMReadInt(int p_address)
        {
        byte lowByte = EEPROM.read(p_address);
        byte highByte = EEPROM.read(p_address + 1);

        return ((lowByte << 0) & 0xFF) + ((highByte << 8) & 0xFF00);
        }

void EEPROMWritelong(int address,unsigned long value) {
      byte four = (value & 0xFF);
      byte three = ((value >> 8) & 0xFF);
      byte two = ((value >> 16) & 0xFF);
      byte one = ((value >> 24) & 0xFF);
      EEPROM.write(address, four);
      EEPROM.write(address + 1, three);
      EEPROM.write(address + 2, two);
      EEPROM.write(address + 3, one);
      }
long EEPROMReadlong(unsigned long address) {
      unsigned long four = EEPROM.read(address);
      unsigned long three = EEPROM.read(address + 1);
      unsigned long two = EEPROM.read(address + 2);
      unsigned long one = EEPROM.read(address + 3);
      return ((four << 0) & 0xFF) + ((three << 8) & 0xFFFF) + ((two << 16) & 0xFFFFFF) + ((one << 24) & 0xFFFFFFFF);
      }



void PrintUserInfo() {
display.clearDisplay();
display.setCursor(0, 0);
M[0]='(';M[1]='с';M[2]=')';M[3]='x';M[4]='u';M[5]='p';M[6]='y';M[7]='p';M[8]='r';M[9]=' ';M[10]='2';M[11]='0';M[12]='1';M[13]='6';M[14]='v';M[15]='e';M[16]='r';M[17]='.';M[18]=' ';M[19]='1';M[20]='.';M[21]='0';M[22]=' ';M[23]=' ';M[24]=' ';M[25]=' ';M[26]=' ';M[27]=' ';M[28]='В';M[29]='л';M[30]='а';M[31]='д';M[32]='е';M[33]='л';M[34]='е';M[35]='ц';M[36]=' ';M[37]='П';M[38]='Д';M[39]='А';M[40]=':';M[41]=' ';
M[42]='С';M[43]='т';M[44]='а';M[45]='л';M[46]='к';M[47]='е';M[48]='р';M[49]=':';M[50]=' ';M[51]=' ';M[52]=' ';M[53]=' ';M[54]=' ';M[55]=' ';
M[56]='П';M[57]='р';M[58]='и';M[59]='з';M[60]='p';M[61]='а';M[62]='к';M[63]=' ';M[64]=' ';M[65]=' ';M[66]=' ';M[67]=' ';M[68]=' ';M[69]=' ';M[70]=0;
for (byte i=0;M[i]!=0;i++) display.write(M[i]);
display.display();
}
void EEPROM_CLEAR() {
  for (byte i=0;i<80;i++) EEPROM.write(i,0);
  for (byte i=83;i<101;i++) EEPROM.write(i,0);
  EEPROMWritelong(101,MaxHealth);
  EEPROM.write(81,0);
}
void EEPROM_READ() {
DeathCount=EEPROMReadInt(84);
DeathCause=EEPROM.read(83);
Health=EEPROMReadlong(101);
Death=EEPROM.read(81);
PrHealthWrite=Health;
for (byte i=0;i<10;i++) if (EEPROM.read(i+30)==1) {Zaraza=true;Affect(i);break;};
}


void GetWifi() {

if (!WiFiRefresh) {mySerial.println("AT+CWLAP");PrMillisWifiRefresh=millis();WiFiRefresh=true;}

if (millis()-PrMillisWifiRefresh>5000 && WiFiRefresh) {
  NewRadiation=0;
  NewTreat=0;
  while (mySerial.available()) {
    for (int i=0;i<13;i++) {buf[i]=buf[i+1];}
    buf[13]=mySerial.read();
    //Serial.write(buf[13]);
    if (buf[0]=='T' && buf[1]=='r' && buf[2]=='e' && buf[3]=='A') {
    NewTreat+=(buf[5]-48)*1000+(buf[6]-48)*100+(buf[7]-48)*10+buf[8]-48;
    }
      if (!Death) {
        if (buf[0]=='D' && buf[1]=='e' && buf[2]=='a' && buf[3]=='t' && buf[4]=='H') {DeathCause=3;Death_Stalker();} //Бомба
          if (buf[0]=='M' && buf[1]=='e' && buf[2]=='s' && buf[3]=='s' && buf[4]=='A') { //Сообщение
          NewSMS(buf[5], buf[6], buf[7], buf[8], buf[9], buf[10]);
          }
             if (buf[0]=='R' && buf[1]=='a' && buf[2]=='d' && buf[3]=='i' && buf[4]=='A') { //Радиация
             SignalLevel=100-((buf[12]-48)*10+buf[13]-48);
             SignalLevel/=10;SignalLevel++;
             if (SignalLevel>5) SignalLevel=5;
             NewRadiation+=((buf[5]-48)*1000+(buf[6]-48)*100+(buf[7]-48)*10+buf[8]-48)* SignalLevel / 5;
             }
      }
  }
  RadiationLevel=NewRadiation;
  TreatLevel=NewTreat+BonusTreat+TreatArtefact;
  WiFiRefresh=false;
}
}


void ReadNewSMS(byte MesNum) {
  /*
  if (MesNum<5) {
  if (EEPROM.read(MesNum+65)==0) {
  for (int i=0;i<5;i++) {if (i!=MesNum) {if (EEPROM.read(i+25)==1) EEPROM.write(i+25,0);if (EEPROM.read(i+65)==1) EEPROM.write(i+65,0);}
  else {EEPROM.write(i+25,1);EEPROM.write(i+65,1);}}
  byte cnt=0;
  for (byte i=11;buf[i]!=0;i++) {MA[cnt]=buf[i];cnt++;}
  MA[cnt]=0;
  Signal(6);
  NoReadMessages();
  }}
  */
  if (MesNum>4 && MesNum<30) {
   if (EEPROM.read(MesNum+35)==0) {
    EEPROM.write(MesNum-5,1);
    EEPROM.write(MesNum+35,1);
    Signal(6);
    NoReadMessages();
   }
  }
    if (MesNum>29 && MesNum<40) {
      if (EEPROM.read(MesNum+40)==0 && !Zaraza) {
        Zaraza=true;
        EEPROM.write(MesNum,1);
        EEPROM.write(MesNum+40,1);
        Affect(MesNum-30);
        Signal(9);
      }
    }
}
void NewSMS(byte MesNum, byte Rate, byte Id_group, byte Id_dev, byte Id_groupExclude, byte ID_deviceExclude) {
if (Device_id!=ID_deviceExclude || ID_deviceExclude==0) 
if (Group_id!=Id_groupExclude || Id_groupExclude==0)  
if (Id_dev==Device_id || Id_dev==0)
if (Id_group==Group_id || Id_group==0){
  byte rnd_rate=random(100);
  rnd_rate++;
  if (rnd_rate<=Rate) ReadNewSMS(MesNum);
  }
}


void Radiation_zone () { //Радиация
    if (!Death)
    if ((millis()-PrMillisRad)>=100) {
      PrMillisRad=millis();
      Health-=RadiationLevel*RadiationKoef/1000;
      DeathCause=0;
    }
}
void Treat_zone () { //Лечилка
    if ((millis()-PrMillisTreat)>=100) {
    PrMillisTreat=millis();
    Health+=TreatLevel*TreatKoef/1000;
    }
if (DeathSignal && TreatLevel>0) {DeathSignal=false;LCD(1);}
}

void Life() { // Проверка жизни сталкера
if (Health>MaxHealth) Health=MaxHealth;
if (Health<=0 && !Death) Death_Stalker();
if (Health>=MaxHealth && Death) Restore_Stalker();
if (abs(Health-PrHealthWrite)>=20000) {EEPROMWritelong(101, Health);PrHealthWrite=Health;}
}

void Death_Stalker() { // Сталкер умер
  DeathCount++;
  TreatArtefact=0;
  Artefakt[0]=false;Artefakt[1]=false;
  ArtefaktID[0]=0;ArtefaktID[1]=0;
  RadiationKoef=MinRadiationKoef;
  PoisonKoef=MinPoisonKoef;
  Poison=0;
  Death=true;
  DeathSignal=true;
  Messages=0;
  Zaraza=false;
  for (byte k=0;k<10;k++) if (EEPROM.read(k+30)==1) EEPROM.write(k+30,0);
  Health=0;
  EEPROMWritelong(101, 0);
  EEPROM.write(81,1);
  EEPROMWriteInt(84, DeathCount);
  EEPROM.write(83, DeathCause);
  PrHealthWrite=0;
  LCD(1);
  Signal(1);
}

void Restore_Stalker() { //Сталкер ожил
  Death=false;
  DeathSignal=false;
  LCD(1);
  Signal(2);
  EEPROMWritelong(101, MaxHealth);
  PrHealthWrite=MaxHealth;
  EEPROM.write(81,0);
  NoReadMessages();
}

void SignalRadiation() { //Подача сигнала радиации (счетчик гейгера)
  if (SpeakerReady && !Mute) {
  int SignMn=0;
  if (RadiationLevel<1000) SignMn=RadiationLevel*2 + random(250);
  if (RadiationLevel>=1000 && RadiationLevel<=3000) SignMn=2000 + RadiationLevel*65/1000 + random(100);
  if (RadiationLevel>3000) SignMn=2200+random(100);
  if (millis()-MillisSpeaker > (2300 - SignMn)) {
    MillisSpeaker=millis();
    digitalWrite(SpeakerPin, HIGH);                         
    delay(3);          
    digitalWrite(SpeakerPin, LOW); 
  }
  }
}

void Signal(byte Val) { //Подача сигналов пищалкой
switch (Val) {
  case 0:
  if ((millis()-MillisSpeaker>=SpeakerTime) && !SpeakerReady && !SpeakerWait) {
    if (SpeakerRepeat>=1) SpeakerRepeat--;
    if (SpeakerRepeat==0) {SpeakerReady=true;SpeakerWait=false;} else SpeakerWait=true;
    MillisSpeaker=millis();
    digitalWrite(SpeakerPin, LOW); 
  }
  if ((millis()-MillisSpeaker>=SpeakerWaitTime) && !SpeakerReady && SpeakerWait) {
    SpeakerWait=false;
    MillisSpeaker=millis();
    digitalWrite(SpeakerPin, HIGH);
  }
  break;
  case 1:
  //умер
  digitalWrite(SpeakerPin, HIGH);                                                
  SpeakerTime=10000;
  SpeakerRepeat=1;
  SpeakerReady=false;MillisSpeaker=millis();
  break;
  case 2:
  //восстановился
  digitalWrite(SpeakerPin, HIGH);                         
  SpeakerTime=5000; 
  SpeakerRepeat=1;      
  SpeakerReady=false;MillisSpeaker=millis();
  break;
  case 5:
  //Села батарея
  digitalWrite(SpeakerPin, HIGH);
  SpeakerRepeat=5;
  SpeakerWaitTime=30;
  SpeakerTime=30; 
  SpeakerReady=false;MillisSpeaker=millis();
  break;
  case 8:
  //Писк кнопки
  digitalWrite(SpeakerPin, HIGH);                          
  SpeakerTime=50;
  SpeakerRepeat=1;
  SpeakerReady=false;MillisSpeaker=millis();
  break;
  case 9:
  //Подцепил заразу
  digitalWrite(SpeakerPin, HIGH);                         
  SpeakerRepeat=8;
  SpeakerTime=100; 
  SpeakerWaitTime=50;
  SpeakerReady=false;MillisSpeaker=millis();
  break;
}
  if (!Mute)  switch (Val) {
  case 3:
  //админ устройство Артефакт подключены
  digitalWrite(SpeakerPin, HIGH);                         
  SpeakerRepeat=2;
  SpeakerWaitTime=50;
  SpeakerTime=100; 
  SpeakerReady=false;MillisSpeaker=millis();
  break;
  case 4:
  //админ устройство Артефакт отключены
  digitalWrite(SpeakerPin, HIGH);                         
  SpeakerRepeat=2;
  SpeakerWaitTime=50;
  SpeakerTime=50; 
  SpeakerReady=false;MillisSpeaker=millis();
  break;
  case 6:
  //SMS
  digitalWrite(SpeakerPin, HIGH);                         
  SpeakerRepeat=3;
  SpeakerWaitTime=50;
  SpeakerTime=150; 
  SpeakerReady=false;MillisSpeaker=millis();
  break;
  case 7:
  //Дурной эффект
  digitalWrite(SpeakerPin, HIGH);                         
  SpeakerRepeat=1;
  SpeakerTime=300; 
  SpeakerReady=false;MillisSpeaker=millis();
  break; 
  }
}

void LCD_Refresh(){
  if (!LCD_Sleep) LCD(2);
}

int GetVoltage(int PinBat, float MinVolt, float MaxVolt, float KF) { //Проверка заряда батареи
  float Min=(MinVolt*204.8)/KF;
  float Max=(MaxVolt*204.8)/KF;
  int Volt1 = analogRead(PinBat);
  int VoltPerc=0;
  float Ind1 = (Max-Min) / 100;
  if (Volt1 < Min) {VoltPerc=0;}
  else {
  VoltPerc = (Volt1 - Min) / Ind1;
  if (VoltPerc>100) VoltPerc=100;}
  if ((VoltPerc<10) && !LowVolt) {LowVolt=true; DisplayLedTime=5000; DisplayBright=50;}
  if ((VoltPerc>10) && LowVolt) {LowVolt=false; DisplayLedTime=30000; DisplayBright=200;}
  if (VoltPerc/20 >= 5) BatICO=127;
  else BatICO=123+VoltPerc/20;
  if (LowVolt) Signal(5);
  return VoltPerc;
}

void PrintSMS() {
display.setCursor(0,8);
switch(DisplayPage) {
  case 0:
M[0]='Д';M[1]='о';M[2]='б';M[3]='р';M[4]='о';M[5]=' ';M[6]='п';M[7]='о';M[8]='ж';M[9]='а';M[10]='л';M[11]='о';M[12]='в';M[13]='а';M[14]='т';M[15]='ь';M[16]=' ';M[17]='в';M[18]=' ';M[19]='З';M[20]='о';M[21]='н';M[22]='у';M[23]='!';M[24]='!';M[25]='!';M[26]=0;
  break;
  case 1:
M[0]='К';M[1]='у';M[2]='п';M[3]='л';M[4]='ю';M[5]=' ';M[6]='х';M[7]='о';M[8]='б';M[9]='о';M[10]='т';M[11]='ы';M[12]=' ';M[13]='к';M[14]='р';M[15]='о';M[16]='в';M[17]='о';M[18]='с';M[19]='о';M[20]='с';M[21]='о';M[22]='в';M[23]='!';M[24]=' ';M[25]='Д';M[26]='о';
M[27]='р';M[28]='о';M[29]='г';M[30]='о';M[31]='!';M[32]=' ';M[33]='6';M[34]='8';M[35]='-';M[36]='7';M[37]='7';M[38]='-';M[39]='8';M[40]='9';M[41]=0;
  break;
  case 2:
M[0]='В';M[1]='с';M[2]='т';M[3]='у';M[4]='п';M[5]='а';M[6]='й';M[7]=' ';M[8]='в';M[9]=' ';M[10]='р';M[11]='я';M[12]='д';M[13]='ы';M[14]=' ';M[15]='с';M[16]='в';M[17]='о';M[18]='б';M[19]='о';M[20]='д';M[21]='ы';M[22]=' ';M[23]='с';M[24]='ы';M[25]='н';M[26]='о';
M[27]='к';M[28]='!';M[29]='!';M[30]='!';M[31]=0;
  break;
  case 3:
M[0]='П';M[1]='о';M[2]='г';M[3]='о';M[4]='в';M[5]='а';M[6]='р';M[7]='и';M[8]='в';M[9]='а';M[10]='ю';M[11]='т';M[12]=' ';M[13]='х';M[14]='о';M[15]='д';M[16]='о';M[17]='к';M[18]='и';M[19]=' ';M[20]='т';M[21]='а';M[22]='щ';M[23]='а';M[24]='т';M[25]=' ';M[26]='б';
M[27]='о';M[28]='м';M[29]='б';M[30]='у';M[31]=' ';M[32]='в';M[33]=' ';M[34]='з';M[35]='о';M[36]='н';M[37]='у';M[38]='!';M[39]=' ';M[40]='К';M[41]='а';M[42]='к';M[43]=' ';M[44]='б';M[45]='ы';M[46]=' ';M[47]='д';M[48]='е';M[49]='л';M[50]='о';M[51]='в';M[52]=' ';
M[53]='н';M[54]='е';M[55]=' ';M[56]='н';M[57]='а';M[58]='в';M[59]='о';M[60]='р';M[61]='о';M[62]='т';M[63]='и';M[64]='л';M[65]='и';M[66]='!';M[67]=0;
  break;
  case 4:
M[0]='П';M[1]='р';M[2]='и';M[3]='р';M[4]='у';M[5]='ч';M[6]='у';M[7]=' ';M[8]='к';M[9]='р';M[10]='о';M[11]='в';M[12]='о';M[13]='с';M[14]='о';M[15]='с';M[16]='а';M[17]='!';M[18]=' ';M[19]='Н';M[20]='е';M[21]=' ';M[22]='д';M[23]='о';M[24]='р';M[25]='о';M[26]='г';
M[27]='о';M[28]='!';M[29]=' ';M[30]='т';M[31]='е';M[32]='л';M[33]='.';M[34]=' ';M[35]='7';M[36]='7';M[37]='-';M[38]='6';M[39]='7';M[40]='-';M[41]='7';M[42]='7';M[43]=0;
  break;
  case 5:
M[0]='У';M[1]='д';M[2]='а';M[3]='ч';M[4]='н';M[5]='о';M[6]='й';M[7]=' ';M[8]='д';M[9]='о';M[10]='р';M[11]='о';M[12]='г';M[13]='и';M[14]=' ';M[15]='т';M[16]='е';M[17]='б';M[18]='е';M[19]=' ';M[20]='с';M[21]='т';M[22]='а';M[23]='л';M[24]='к';M[25]='е';M[26]='р';
M[27]=' ';M[28]='м';M[29]='и';M[30]='м';M[31]='о';M[32]=' ';M[33]='а';M[34]='н';M[35]='о';M[36]='м';M[37]='а';M[38]='л';M[39]='и';M[40]='й';M[41]=' ';M[42]='ч';M[43]='е';M[44]='р';M[45]='е';M[46]='з';M[47]=' ';M[48]='а';M[49]='р';M[50]='т';M[51]='е';M[52]='ф';
M[53]='а';M[54]='к';M[55]='т';M[56]='ы';M[57]='!';M[58]=0;
  break;
  case 6:

  break;
  case 7:

  break;
  case 8:

  break;
  case 9:

  break;
  case 10:

  break;
  case 11:

  break;
  case 12:

  break;
  case 13:

  break;
  case 14:

  break;
  case 15:

  break;
  case 16:

  break;
  case 17:

  break;
  case 18:

  break;
  case 19:

  break;
  case 20:

  break;
  case 21:

  break;
  case 22:

  break;
  case 23:

  break;
  case 24:

  break;
}
if (DisplayPage<25)  for (int i=0;M[i]!=0;i++) display.write(M[i]);
//else for (int i=0;MA[i]!=0;i++) display.write(MA[i]);
}

void PrintArtefaktInfo(byte Num) {
M[0]='А';M[1]='р';M[2]='т';M[3]='е';M[4]='ф';M[5]='а';M[6]='к';M[7]='т';M[8]=' ';M[10]=':';M[11]=0;
if (Num==0) M[9]='1'; else M[9]='2';
display.setCursor(0,8);
for (int i=0;M[i]!=0;i++) display.write(M[i]);
display.setCursor(0,16);
if (Artefakt[Num]) {
ArtInfoTime=5000;
 switch (ArtefaktID[Num]) {
 case 1:
  break;
  case 2:
  break;
  case 3:
  break;
  case 4:
  break;
  case 5:
  break;
  case 6:
  M[0]='К';M[1]='о';M[2]='л';M[3]='ю';M[4]='ч';M[5]='к';M[6]='а';M[7]=':';M[8]=' ';M[9]=' ';M[10]=' ';M[11]=' ';M[12]=' ';M[13]=' ';M[14]='+';M[15]='1';M[16]=' ';M[17]='з';M[18]='д';M[19]='/';M[20]='м';M[21]='и';M[22]='н';M[23]=' ';M[24]=' ';M[25]=' ';
  M[26]=' ';M[27]=' ';M[28]='-';M[29]='1';M[30]='5';M[31]='%';M[32]=' ';M[33]=' ';M[34]='р';M[35]='а';M[36]='д';M[37]='и';M[38]='а';M[39]='ц';M[40]='и';M[41]='и';M[42]='+';M[43]='2';M[44]='0';M[45]='%';M[46]=' ';M[47]='и';M[48]='м';M[49]='м';M[50]='у';
  M[51]='н';M[52]='и';M[53]='т';M[54]='е';M[55]='т';M[56]=0;
  break;
  case 7:
  break;
  case 8:
  break;
  case 9:
  break;
  case 10:
  break;
  case 11:
  break;
 }
} else {
  ArtInfoTime=1500;
  M[0]='Н';M[1]='е';M[2]='т';M[3]=' ';M[4]='а';M[5]='р';M[6]='т';M[7]='е';M[8]='ф';M[9]='а';M[10]='к';M[11]='т';M[12]='а';M[13]='!';M[14]=0;
}
for (int i=0;M[i]!=0;i++) display.write(M[i]);
}
void PrintZarazaMessage() {
byte Zar=0;
display.setCursor(0,8);
for (int i=0;i<10;i++) if (EEPROM.read(i+30)==1) Zar=i;
switch (Zar) {
  case 0:
M[0]='П';M[1]='о';M[2]='я';M[3]='в';M[4]='и';M[5]='л';M[6]='а';M[7]='с';M[8]='ь';M[9]=' ';M[10]='с';M[11]='т';M[12]='р';M[13]='а';M[14]='н';M[15]='н';M[16]='а';M[17]='я';M[18]=' ';M[19]='с';M[20]='ы';M[21]='п';M[22]='ь';M[23]='!';M[24]=' ';M[25]='Н';
M[26]='а';M[27]='д';M[28]='о';M[29]=' ';M[30]='б';M[31]='ы';M[32]=' ';M[33]='о';M[34]='б';M[35]='р';M[36]='а';M[37]='т';M[38]='и';M[39]='т';M[40]='ь';M[41]='с';M[42]='я';M[43]=' ';M[44]='к';M[45]=' ';M[46]='у';M[47]='ч';M[48]='е';M[49]='н';M[50]='ы';
M[51]='м';M[52]=',';M[53]=' ';M[54]='п';M[55]='о';M[56]='к';M[57]='а';M[58]=' ';M[59]='н';M[60]='е';M[61]=' ';M[62]='п';M[63]='о';M[64]='м';M[65]='е';M[66]='р';M[67]='!';M[68]=0;
  break;
  case 1:
M[0]='Х';M[1]='е';M[2]='р';M[3]='о';M[4]='в';M[5]='о';M[6]=' ';M[7]='с';M[8]='е';M[9]='б';M[10]='я';M[11]=' ';M[12]='ч';M[13]='у';M[14]='с';M[15]='т';M[16]='в';M[17]='у';M[18]='ю';M[19]='!';M[20]=' ';M[21]='П';M[22]='о';M[23]='х';M[24]='о';M[25]='ж';
M[26]='е';M[27]=' ';M[28]='н';M[29]='а';M[30]=' ';M[31]='в';M[32]='и';M[33]='р';M[34]='у';M[35]='с';M[36]=' ';M[37]='к';M[38]='р';M[39]='о';M[40]='в';M[41]='о';M[42]='с';M[43]='в';M[44]='и';M[45]='н';M[46]='к';M[47]='и';M[48]='!';M[49]=' ';M[50]='а';
M[51]='н';M[52]='т';M[53]='и';M[54]='д';M[55]='о';M[56]='т';M[57]=' ';M[58]='у';M[59]=' ';M[60]='б';M[61]='а';M[62]='р';M[63]='м';M[64]='е';M[65]='н';M[66]='а';M[67]='!';M[68]=0;
  break;
  case 2:
M[0]='К';M[1]='а';M[2]='к';M[3]='а';M[4]='я';M[5]='-';M[6]='т';M[7]='о';M[8]=' ';M[9]='х';M[10]='е';M[11]='р';M[12]='ь';M[13]=' ';M[14]='у';M[15]='к';M[16]='у';M[17]='с';M[18]='и';M[19]='л';M[20]='а';M[21]=' ';M[22]='в';M[23]=' ';M[24]='п';M[25]='р';
M[26]='а';M[27]='в';M[28]='у';M[29]='ю';M[30]=' ';M[31]='р';M[32]='у';M[33]='к';M[34]='у';M[35]='!';M[36]=' ';M[37]='Р';M[38]='у';M[39]='к';M[40]='а';M[41]=' ';M[42]='п';M[43]='а';M[44]='р';M[45]='а';M[46]='л';M[47]='и';M[48]='з';M[49]='о';M[50]='в';
M[51]='а';M[52]='н';M[53]='а';M[54]=' ';M[55]='д';M[56]='о';M[57]=' ';M[58]='п';M[59]='л';M[60]='е';M[61]='ч';M[62]='а';M[63]='!';M[64]=0;
  break;
  case 3:
M[0]='Я';M[1]=' ';M[2]='п';M[3]='о';M[4]='т';M[5]='е';M[6]='р';M[7]='я';M[8]='л';M[9]=' ';M[10]='з';M[11]='р';M[12]='е';M[13]='н';M[14]='и';M[15]='е';M[16]='!';M[17]=' ';M[18]='Н';M[19]='и';M[20]='ч';M[21]='е';M[22]='г';M[23]='о';M[24]=' ';M[25]='в';
M[26]='о';M[27]='о';M[28]='б';M[29]='щ';M[30]='е';M[31]=' ';M[32]='н';M[33]='е';M[34]=' ';M[35]='в';M[36]='и';M[37]='ж';M[38]='у';M[39]='!';M[40]=' ';M[41]='Г';M[42]='о';M[43]='в';M[44]='о';M[45]='р';M[46]='и';M[47]='л';M[48]='и';M[49]=' ';M[50]='ж';
M[51]='е';M[52]=' ';M[53]='З';M[54]='о';M[55]='н';M[56]='а';M[57]=' ';M[58]='т';M[59]='е';M[60]='б';M[61]='я';M[62]=' ';M[63]='п';M[64]='о';M[65]='г';M[66]='у';M[67]='б';M[68]='и';M[69]='т';M[70]=0;
  break;
  case 4: 

  break;
  case 5:

  break;
  case 6:

  break;
  case 7:

  break;
  case 8:

  break;
  case 9:

  break;
}
for (int i=0;M[i]!=0;i++) display.write(M[i]);

}
void PrintMessage() {
int k=0;

KoefPois[0]=(100-PoisonKoef)/100+48;KoefPois[1]=((100-PoisonKoef)%100)/10+48;KoefPois[2]=(100-PoisonKoef)%10+48;
KoefRad[0]=(100-RadiationKoef)/100+48;KoefRad[1]=((100-RadiationKoef)%100)/10+48;KoefRad[2]=(100-RadiationKoef)%10+48;
PoisonLev[0]=Poison/100+48;PoisonLev[1]=(Poison%100)/10+48;PoisonLev[2]=Poison%10+48;
Fon[0]=RadiationLevel/1000+48;Fon[1]=(RadiationLevel%1000)/100+48;Fon[2]=(RadiationLevel%100)/10+48;Fon[3]=RadiationLevel%10+48;
TreatLev[0]=TreatLevel/1000+48;TreatLev[1]=(TreatLevel%1000)/100+48;TreatLev[2]=(TreatLevel%100)/10+48;TreatLev[3]=TreatLevel%10+48;

if (!Death)
        if (DisplayPage==31) {
          if (!ArtInfo) {
            if (Zaraza && DisplayChange) {
            PrintZarazaMessage();
            } else {
            display.setCursor(0, 8);
            display.write('Ф');display.write('о');display.write('н');display.write(':');display.write(Fon[0]);display.write(',');display.write(Fon[1]);display.write(Fon[2]);display.write(Fon[3]);
            display.write('м');display.write('к');display.write('З');display.write(47);display.write('ч');
            display.setCursor(0, 16);
            display.write('Я');display.write('д');display.write(':');display.write('-');display.write(PoisonLev[0]);display.write(PoisonLev[1]);display.write(PoisonLev[2]);display.write('ж');display.write('/');display.write('м');
            display.setCursor(0, 24);
            display.write('Б');display.write('л');display.write('а');display.write('г');display.write('о');display.write(':');display.write(TreatLev[0]);display.write(',');
            display.write(TreatLev[1]);display.write(TreatLev[2]);display.write(TreatLev[3]);display.write('ж');display.write('/');display.write('с');
            display.setCursor(0, 32);
            display.write('З');display.write('а');display.write('щ');display.write('.');display.write(' ');display.write('Р');display.write('а');display.write('д');display.write('.');display.write(':');
            display.write(KoefRad[0]);display.write(KoefRad[1]);display.write(KoefRad[2]);display.write('%');
            display.setCursor(0, 40);
            display.write('И');display.write('м');display.write('м');display.write('у');display.write('н');display.write('и');display.write('т');display.write('е');display.write('т');display.write(':');
            display.write(KoefPois[0]);display.write(KoefPois[1]);display.write(KoefPois[2]);display.write('%');
            } 
          } else PrintArtefaktInfo(ArtPgNum);
        } else {
            PrintSMS();
            }
if (Death) {
  if (TreatLevel>0) {
  display.setCursor(22,20);
  M[0]='Л';M[1]='е';M[2]='ч';M[3]='е';M[4]='н';M[5]='и';M[6]='е';M[7]=0;
 }
  else{
  display.setCursor(0,16);
  switch (DeathCause) {
    case 0:
    M[0]='Т';M[1]='ы';M[2]=' ';M[3]='у';M[4]='м';M[5]='е';M[6]='р';M[7]=' ';M[8]='о';M[9]='т';M[10]=' ';M[11]='р';M[12]='а';M[13]='д';M[14]='и';M[15]='а';M[16]='ц';M[17]='и';M[18]='и';M[19]='!';M[20]=' ';M[21]='И';M[22]='д';M[23]='и';M[24]=' ';
    M[25]='н';M[26]='а';M[27]=' ';M[28]='м';M[29]='е';M[30]='р';M[31]='т';M[32]='в';M[33]='я';M[34]='к';M[35]='!';M[36]=0;
    break;
    case 1:
    M[0]='Т';M[1]='ы';M[2]=' ';M[3]='у';M[4]='м';M[5]='е';M[6]='р';M[7]=' ';M[8]='о';M[9]='т';M[10]=' ';M[11]='с';M[12]='т';M[13]='р';M[14]='а';M[15]='н';M[16]='н';M[17]='о';M[18]='й';M[19]=' ';M[20]='б';M[21]='о';M[22]='л';M[23]='е';M[24]='з';
    M[25]='н';M[26]='и';M[27]='!';M[28]=' ';M[29]='И';M[30]='д';M[31]='и';M[32]=' ';M[33]='н';M[34]='а';M[35]=' ';M[36]='м';M[37]='е';M[38]='р';M[39]='т';M[40]='в';M[41]='я';M[42]='к';M[43]='!';M[44]=0;
    break;
    case 2:
    M[0]='Т';M[1]='ы';M[2]=' ';M[3]='у';M[4]='м';M[5]='е';M[6]='р';M[7]=' ';M[8]='о';M[9]='т';M[10]=' ';M[11]='с';M[12]='у';M[13]='и';M[14]='ц';M[15]='и';M[16]='д';M[17]='а';M[18]='!';M[19]=' ';M[20]='И';M[21]='д';M[22]='и';M[23]=' ';M[24]='н';
    M[25]='а';M[26]=' ';M[27]='м';M[28]='е';M[29]='р';M[30]='т';M[31]='в';M[32]='я';M[33]='к';M[34]='!';M[35]=0;
    break;
    case 3:
    M[0]='Т';M[1]='ы';M[2]=' ';M[3]='у';M[4]='м';M[5]='е';M[6]='р';M[7]=' ';M[8]='о';M[9]='т';M[10]=' ';M[11]='в';M[12]='з';M[13]='р';M[14]='ы';M[15]='в';M[16]='а';M[17]=' ';M[18]='б';M[19]='о';M[20]='м';M[21]='б';M[22]='ы';M[23]='!';M[24]=' ';
    M[25]='И';M[26]='д';M[27]='и';M[28]=' ';M[29]='н';M[30]='а';M[31]=' ';M[32]='м';M[33]='е';M[34]='р';M[35]='т';M[36]='в';M[37]='я';M[38]='к';M[39]='!';M[40]=0;
    break;
    case 4:
    break;
    case 5:
    break;
    case 6:
    break;
  }}
  for (byte i=0;M[i]!=0;i++) display.write(M[i]);
  }
}
void LCD(byte Val) { //Вывод инфы на дисплей
  if (Val==1) PrDisplayLedTime=millis();
  if (Val!=0) {
  char Heal[3]={0,0,0}, Mes[2]={0,0};
  //analogWrite(LedPin, DisplayBright);
  sprintf(Heal, "%d", byte(Health/1000));
  sprintf(Mes, "%d", Messages);
  LCD_Sleep=false;
  display.clearDisplay();
  display.setCursor(0, 0);
  //Хэлсы
  if (!Death) {
  display.write(95);display.setCursor(5, 0);display.write(96);}
  else display.write(92);
  display.write(Heal[0]);display.write(Heal[1]);display.write(Heal[2]);
  //Звук
  display.setCursor(36, 0);
  if (Mute) display.write(62); else display.write(60);
  //Сообщения
  display.setCursor(48, 0);display.write(93);display.setCursor(53, 0);display.write(94);display.setCursor(62, 0);display.write(Mes[0]);display.write(Mes[1]);
  //батарея
  display.setCursor(78, 0);display.write(BatICO);
  // Основной дисплей
  
PrintMessage();
  display.display(); 
  }   
  if (Val==0) {
//    analogWrite(LedPin, 0);
    display.clearDisplay();
    display.display();
    LCD_Sleep=true;
  }
}
void Affect (int Ind) { 
  switch (Ind) {
    case 0:
    Poison+=6000;
    PoisonAffect=6000;
    break;
    case 1:
    Poison+=6000;
    PoisonAffect=6000;
    break;
    case 2:
    Poison+=10000;
    PoisonAffect=10000;
    break;
    case 3:
    Poison+=10000;
    PoisonAffect=10000;
    break;
    case 4:
    Poison+=5000;
    PoisonAffect=5000;
    break;
    case 5:
    Poison+=5000;
    PoisonAffect=5000;
    break;
    case 6:
    Poison+=5;
    PoisonAffect=5;
    break;
    case 7:
    Poison+=5000;
    PoisonAffect=5000;
    break;
    case 8:
    Poison+=5000;
    PoisonAffect=5000;
    break;
    case 9:
    Poison+=5000;
    PoisonAffect=5000;
    break;
  }
}
void AdminDevice(byte PortNum){ //определение подключенного админ устройства
if (millis()-PrMillisAdminDevice[PortNum]>1000) {
int k;
int tmp3=analogRead(AdminDevPin[PortNum]);
if (tmp3>80) {
Signal(3);
Device[PortNum]=true;
for (k=0; k<13; k++) if (OutDevice[k] > tmp3) break;
  switch (k) {
    case 1:
    break;
    case 2:
    break;
    case 3:
    break;
    case 4:
    break;
    case 5:
    break;
    case 6:
    Health=MaxHealth;
    break;
    case 7:
    break;
    case 8:
    break;
    case 9:
    Death_Stalker();
    EEPROM_CLEAR();
    Restore_Stalker();
    break;
    case 10:
    Health=MaxHealth;
    break;
    case 11:
    Zaraza=false;
    Poison-=PoisonAffect;
    PoisonAffect=0;
    for (byte k=30;k<40;k++) if (EEPROM.read(k)==1) EEPROM.write(k,0);
    break;
  }
LCD(1);}
}
}
void ArtefaktDevice(byte PortNum){ //Определение подключенного артефакта
if (millis()-PrMillisArtefaktDevice[PortNum]>1000) {
int tmp3=analogRead(ArtefaktPin[PortNum]);
if (tmp3>80) {
ArtefaktID[PortNum]=0;
Signal(3); 
Artefakt[PortNum]=true;
for (ArtefaktID[PortNum]; ArtefaktID[PortNum]<13; ArtefaktID[PortNum]++) if (OutDevice[ArtefaktID[PortNum]] > tmp3) break;
  switch (ArtefaktID[PortNum]) {
    case 1:
    //1 артефакт
    break;
    case 2:
    //2 артефакт
    break;
    case 3:
    //3 артефакт
    break;
    case 4:
    //4 артефакт
    break;
    case 5:
    //5 артефакт
    break;
    case 6:
    //6 артефакт
    TreatArtefact+=17;
    RadiationKoef-=15;
    PoisonKoef-=20;
    break;
    case 7:
    //7 артефакт
    break;
    case 8:
    //8 артефакт

    break;
    case 9:
    //9 артефакт
    break;
    case 10:
    //10 артефакт

    break;
    case 11:
    //11 артефакт

    break;
     
  }
  ArtPgNum=PortNum;ArtInfo=true;PrArtInfoTime=millis();
LCD(1);}  
}
}
void ArtefaktEject(byte PortNum) { //Убираем воздействие артефакта при его изьятии
  Signal(4);
  switch (ArtefaktID[PortNum]) {
    case 1:
    //1 артефакт
    break;
    case 2:
    //2 артефакт
    break;
    case 3:
    //3 артефакт
    break;
    case 4:
    //4 артефакт
    break;
    case 5:
    //5 артефакт
    break;
    case 6:
    //6 артефакт
    TreatArtefact-=17;
    RadiationKoef+=15;
    PoisonKoef+=20;
    break;
    case 7:
    //7 артефакт
    break;
    case 8:
    //8 артефакт
    break;
    case 9:
    //9 артефакт
    break;
    case 10:
    //10 артефакт
    break;
    case 11:
    //11 артефакт
    break;   
  }
  ArtefaktID[PortNum]=0;
  Artefakt[PortNum]=false;
  LCD(1);
}
int ReadMessage() {
  int l;
  for (l=0;l<30;l++) {if (EEPROM.read(l)==1) break;}
  if (l==29 && EEPROM.read(29)==0) l=31; else {EEPROM.write(l,0);NoReadMessages();}
return l;
}
void NoReadMessages() {
Messages=0;
for (byte k=0;k<30;k++) if (EEPROM.read(k)==1) Messages++; 
}
void Push_Key() {
if (millis()-PrMillisPushKey>100) {
int tmp4=analogRead(KeysPin);
if (tmp4>100) {
DeathSignal=false;
  if (abs(KeysACP[0]-tmp4)<15) {
    if (!LCD_Sleep && DisplayPage!=31 && ArtPgNum==1) {DisplayPage=31;ArtPgNum=2;}
    else if (ArtInfo && ArtPgNum==1) {ArtInfo=false;ArtPgNum=2;}
    else if (ArtInfo && ArtPgNum==0) {PrArtInfoTime=millis();ArtPgNum=1;}
    else {ArtInfo=true;PrArtInfoTime=millis();ArtPgNum=0;}
    LCD(1);
    Key=true;
  } 
  if (abs(KeysACP[1]-tmp4)<15) {
    if (!LCD_Sleep) { 
      if (DisplayPage==31) LCD(0);
      if (Messages>0) {
        if (DisplayPage!=31) {
          if (Messages==0) DisplayPage=31;
          else DisplayPage=ReadMessage();
          LCD(1);
        }
        else {DisplayPage=ReadMessage();LCD(1);}
      } else {DisplayPage=31;}
    
    }
    else LCD(1);
    Key=true;} 
  if (abs(KeysACP[2]-tmp4)<15) {if (Mute) {Mute=false;Signal(8);} else Mute=true;LCD(1);Key=true;} 
  if (abs(KeysACP[3]-tmp4)<15) {if (DisplayBright>=230) DisplayBright=0; else DisplayBright+=50;LCD(1);Key=true;} 
  if (abs(KeysACP[4]-tmp4)<15 && millis()-PrMillisPushKey>2000) {if (!Death) {DeathCause=2;Death_Stalker();};Key=true;} 
}
}
}
void loop() { //прога
Signal(0);

if (ArtInfo && millis() - PrArtInfoTime >= ArtInfoTime) ArtInfo=false;

if (millis() - PrMillisDisplayRefresh > 1000) {
  PrMillisDisplayRefresh=millis();LCD_Refresh();
}
  
 if (millis()-PrMillisChangeDisplayPg >= 3500) {
  PrMillisChangeDisplayPg=millis(); 
  if (DisplayChange) DisplayChange=false; else DisplayChange=true;
 }
 
  // Проверка батарейки
  if (millis()-PrMillisBat > 30000) {
    PrMillisBat=millis();
    Volt=GetVoltage(VbatPin, 6.5, 8.0, 2.0);
  }
  
  if (millis() - PrDisplayLedTime > DisplayLedTime && !LCD_Sleep) {
    LCD(0);
  }

if (!Death) {  
// Если есть радиация - воздействовать на игрока 
    if (RadiationLevel > 0) {Radiation_zone();SignalRadiation();}
}

    if (TreatLevel>0 && Health<MaxHealth) Treat_zone(); 
// Если есть лечилка - воздействовать на игрока 
      

// Отслеживание вредных воздействий
    if (Poison>0 && millis()-PrMillisPoison>=1000) {
      Health-=Poison/60;
      PrMillisPoison=millis();
      DeathCause=1;
    }

// Если изменилось значение жизни - отобразить на дисплее и проверить не умер ли или воскрес  
  if (byte(PrHealth/1000) > byte(Health/1000)) {Life();LCD_Refresh();PrHealth=Health;}
  if (byte(PrHealth/1000) < byte(Health/1000)) {Life();PrHealth=Health;LCD_Refresh();}
  
// Отслеживание кнопок
 if (analogRead(KeysPin) > 100) {
   if (!Key) Push_Key();
 }
 else {Key=false;PrMillisPushKey=millis();}
// Отслеживание админских модулей 1
  if (analogRead(AdminDevPin[0]) > 80) {
    if (!Device[0]) AdminDevice(0);
  }
  else {Device[0]=false;PrMillisAdminDevice[0]=millis();}
// Отслеживание админских модулей 2
  if (analogRead(AdminDevPin[1]) > 80) {
    if (!Device[1]) {AdminDevice(1);PrMillisAdminDevice[1]=millis();}
  }
  else Device[1]=false;

  
 // Отслеживание Артефактов 1 разьема
  if (analogRead(ArtefaktPin[0]) > 80 && !Death) {
    if (!Artefakt[0]) ArtefaktDevice(0);
  }
  else {
  Artefakt[0]=false; 
  PrMillisArtefaktDevice[0]=millis();
  if (ArtefaktID[0]!=0) ArtefaktEject(0);
  }
  // Отслеживание Артефактов 2 разьема
  if (analogRead(ArtefaktPin[1]) > 80 && !Death) {
    if (!Artefakt[1]) ArtefaktDevice(1);
  }
  else {
  PrMillisArtefaktDevice[1]=millis();
  Artefakt[1]=false;
  if (ArtefaktID[1]!=0) ArtefaktEject(1);
  }
GetWifi();
//Pin13=!Pin13;
//digitalWrite(13, Pin13);
}