Последние сообщения

Страницы: 1 2 [3] 4 5 ... 10
21
Я не волшебник, я только учусь... / Re: Исходники, алгоритмы.
« Последний ответ от slav0n 07 Январь 2020, 20:55:53 »
вижу в ардуине
а нажатие
Код: [Выделить]
if (IR.data == codKey15)
и
Код: [Выделить]
if (IR.data == codKey16)
За эти скобки не могу вывести иначе, как я отловлю какую клавишу нажали. Ну это уже решил топорно, но работает.
а это и не надо было за скобки.

наверно через milis?
можно и через нее, уже готовый счетчик.
22
Я не волшебник, я только учусь... / Re: Исходники, алгоритмы.
« Последний ответ от lameralik 07 Январь 2020, 20:30:02 »
Засунул в setup кусок формирования градусника и пусть пока так, хоть и костыль, но работает.
23
Я не волшебник, я только учусь... / Re: Исходники, алгоритмы.
« Последний ответ от lameralik 07 Январь 2020, 20:23:17 »
Условия нажатой клавиши не разрешают обработать код градусника, а VolOld вообще не нужен. Вот как правильно записать в EEPROM, что бы не писать туда постоянно, наверно через milis?
24
Я не волшебник, я только учусь... / Re: Исходники, алгоритмы.
« Последний ответ от slav0n 07 Январь 2020, 20:17:42 »
ну, вот. В функции setup() просто забыл написать вместо OldVol = EEPROM.read(0); такое OldVol = -10;
25
Я не волшебник, я только учусь... / Re: Исходники, алгоритмы.
« Последний ответ от lameralik 07 Январь 2020, 20:02:05 »
#include <iarduino_IR_RX.h>                          // Подключаем библиотеку для работы с ИК-приёмником
#include "SPI.h"
#include <UTFT.h>
#include <EEPROM.h>
#include "PGA2310.h"  //Подключение библиотеки для работы с PGA2310
#include <Adafruit_GFX.h>
#include <SmartDelay.h>
UTFT myGLCD(ST7796S, 38, 39, 40, 41);
//x=(a*5-955)/10

//*********************************************************************************************************//
//Шрифты
extern uint8_t SmallFont[];
// extern uint8_t SmallFont[];
//extern uint8_t BigFont[];
extern uint8_t SixteenSegment128x192Num[];
extern uint8_t DotMatrix_M_Slash[];
extern uint8_t SmallRusFont[];
extern uint8_t BigFontRus[];

extern uint8_t DotMatrix_M[];


//EEPROM//

//Подключение библиотеки для работы с EEPROM


int address = 0;                          // Переменная для хранения адреса
byte value;                               // Переменная для хранения значения
int  Vol = 0;
int  OldVol = -10;

//int  Vol = 0;
//int  OldVol = 0;
bool f = true;

//**********************************************************************************************************//



//#include "Arduino.h"


#define PIN_PGA_ZCEN  2
#define PIN_PGA_CS    3
#define PIN_PGA_SCLK  21
#define PIN_PGA_SDATA 20
#define PIN_PGA_MUTE  6

#define Reset() asm("JMP 0");


#define IR_port 14  // Объявляем объект IR, с указанием вывода к которому подключён ИК-приёмник

#define Filter35  7
#define Filter45  8
#define Filter55  9
#define Filter65  10
#define Filter75  11
#define Filter85  12
#define PHase     13

iarduino_IR_RX IR(IR_port);

PGA2310 pga = PGA2310(PIN_PGA_CS,
                      PIN_PGA_SDATA,
                      PIN_PGA_SCLK,
                      PIN_PGA_ZCEN,
                      PIN_PGA_MUTE);



bool flgKey1 = false; uint32_t codKey1 = 0x807F20DF;   // StandBy
bool flgKey2 = false; uint32_t codKey2 = 0x807F906F;   // Off LowPass Filters
bool flgKey3 = false; uint32_t codKey3 = 0x807FB04F;   // 35
bool flgKey4 = false; uint32_t codKey4 = 0x807F9867;    //45
bool flgKey5 = false; uint32_t codKey5 = 0x807FD827;    //55
bool flgKey6 = false; uint32_t codKey6 = 0x807F8877;   //65
bool flgKey7 = false; uint32_t codKey7 = 0x807FA857;    //75
bool flgKey8 = false; uint32_t codKey8 = 0x807FE817;   //85
bool flgKey9 = false; uint32_t codKey9 = 0x807F807F;   //Memory 1
bool flgKey10 = false; uint32_t codKey10 = 0x807F40BF;  //Phase 180
bool flgKey11 = false; uint32_t codKey11 = 0x807F00FF;  //Phase 0
bool flgKey12 = false; uint32_t codKey12 = 0x807F30CF;  //Memory 2
bool flgKey13 = false; uint32_t codKey13 = 0x807F18E7;  //Memory 3
bool flgKey14 = false; uint32_t codKey14 = 0x807FE01F;  //Memory 4
//bool flgKey15 = false;
uint32_t codKey15 = 0x807F58A7;  //Vol +
//bool flgKey16 = false;
uint32_t codKey16 = 0x807F708F;  // Vol -


bool flgKey  = false; uint32_t tmrKey  = 0;      // Определяем флаг разрещающий вывод данных в монитор и время последнего нажатия кнопки.

void setup() {

  // Setup the LCD
  myGLCD.InitLCD();
  myGLCD.setFont(SmallFont);
  myGLCD.clrScr();




  Serial.begin(9600);                                // Инициируем передачу данных в монитор последовательного порта, на скорости 9600 бит/сек
  IR.begin();                                        // Инициируем работу с ИК-приёмником


  Vol = EEPROM.read(0);                 // Считать значение ячейки с адресом 0
  OldVol = EEPROM.read(0);

  digitalWrite(Filter35, EEPROM.read(2));
  digitalWrite(Filter45, EEPROM.read(3));
  digitalWrite(Filter55, EEPROM.read(4));
  digitalWrite(Filter65, EEPROM.read(5));
  digitalWrite(Filter75, EEPROM.read(6));
  digitalWrite(Filter85, EEPROM.read(7));
  digitalWrite(PHase, EEPROM.read(8));


  //  Serial.println(Vol, DEC);             // Вывести полученное значение





  myGLCD.setColor(VGA_GREEN);
  myGLCD.setFont(DotMatrix_M);
  myGLCD.print("FASE ", 350, 60);


  if (EEPROM.read(8) == 1)
  {
    myGLCD.setColor(VGA_YELLOW);
    myGLCD.print("180", RIGHT, 60);
  }
  else
  {
    myGLCD.setColor(VGA_BLUE);
    myGLCD.print("0", RIGHT, 60);
  }






  myGLCD.setColor(VGA_GREEN);
  // myGLCD.setFont(SmallFont);


  myGLCD.setFont(SixteenSegment128x192Num);
  myGLCD.printNumI(Vol, RIGHT, 100);




  myGLCD.setColor(VGA_GREEN);
  myGLCD.setFont(DotMatrix_M_Slash);
  myGLCD.print("FILTER ", LEFT, 60);



  myGLCD.setColor(VGA_BLUE);
  myGLCD.setFont(DotMatrix_M_Slash);

  if (EEPROM.read(9) == 0)
  {

    myGLCD.print("OFF", 100, 60);


  }

  if (EEPROM.read(9) == 1)
  {
    myGLCD.setColor(VGA_RED);
    myGLCD.print(" 35", 100, 60);


  }


  if (EEPROM.read(9) == 2)
  {
    myGLCD.setColor(VGA_RED);
    myGLCD.print(" 45", 100, 60);


  }

  if (EEPROM.read(9) == 3)
  {
    myGLCD.setColor(VGA_RED);
    myGLCD.print(" 55", 100, 60);


  }

  if (EEPROM.read(9) == 4)
  {
    myGLCD.setColor(VGA_RED);
    myGLCD.print(" 65", 100, 60);


  }

  if (EEPROM.read(9) == 5)
  {
    myGLCD.setColor(VGA_RED);
    myGLCD.print(" 75", 100, 60);


  }


  if (EEPROM.read(9) == 6)
  {
    myGLCD.setColor(VGA_RED);
    myGLCD.print(" 85", 100, 60);


  }

  if (EEPROM.read(10) == 1)

  {
    myGLCD.setFont(BigFontRus);
    myGLCD.setColor(VGA_YELLOW);
    myGLCD.textRus("Внимание очень громко !", 50, 30);


  }


  {
    pga.begin();    //Инициализация библиотеки для PGA2310
  }


}

void loop()

{
  if (IR.check(true))

  { // Если в буфере имеются данные, принятые с пульта (удерживается кнопка), то ...
    if (millis() - 200 > tmrKey)



    { // Если с последней поступившей команды прошло более 200 мс, то
      flgKey1 = false;                               // Считаем что кнопка 1 не удерживается
      flgKey2 = false;                               // Считаем что кнопка 2 не удерживается
      flgKey3 = false;                               // Считаем что кнопка 3 не удерживается
      flgKey4 = false;            // Считаем что кнопка 4 не удерживается
      flgKey5 = false;                               // Считаем что кнопка 5 не удерживается
      flgKey6 = false;                               // Считаем что кнопка 6 не удерживается
      flgKey7 = false;                               // Считаем что кнопка 7 не удерживается
      flgKey8 = false;            // Считаем что кнопка 8 не удерживается
      flgKey9 = false;                               // Считаем что кнопка 9 не удерживается
      flgKey10 = false;                               // Считаем что кнопка 10 не удерживается
      flgKey11 = false;                               // Считаем что кнопка 11 не удерживается
      flgKey12 = false;            // Считаем что кнопка 12 не удерживается
      flgKey13 = false;                               // Считаем что кнопка 13 не удерживается
      flgKey14 = false;                               // Считаем что кнопка 14 не удерживается


    }

    tmrKey = millis();


    flgKey = true; // Сохраняем время последней реакции на пульт и разрешаем вывод данных
    if (IR.data == codKey1) {
      if (flgKey1) {
        flgKey = false; // Запрещаем вывод данных кнопки 1 при её удержании
      } flgKey1 = true;
    } else {
      flgKey1 = false;
    }
    if (IR.data == codKey2) {
      if (flgKey2) {
        flgKey = false; // Запрещаем вывод данных кнопки 2 при её удержании
      } flgKey2 = true;
    } else {
      flgKey2 = false;
    }
    if (IR.data == codKey3) {
      if (flgKey3) {
        flgKey = false; // Запрещаем вывод данных кнопки 3 при её удержании
      } flgKey3 = true;
    } else {
      flgKey3 = false;
    }
    if (IR.data == codKey4) {
      if (flgKey4) {
        flgKey = false; // Запрещаем вывод данных кнопки 4 при её удержании
      } flgKey4 = true;
    } else {
      flgKey4 = false;
    }
    if (IR.data == codKey5) {
      if (flgKey5) {
        flgKey = false; // Запрещаем вывод данных кнопки 5 при её удержании
      } flgKey5 = true;
    } else {
      flgKey5 = false;
    }
    if (IR.data == codKey6) {
      if (flgKey6) {
        flgKey = false; // Запрещаем вывод данных кнопки 6 при её удержании
      } flgKey6 = true;
    } else {
      flgKey6 = false;
    }
    if (IR.data == codKey7) {
      if (flgKey7) {
        flgKey = false; // Запрещаем вывод данных кнопки 7 при её удержании
      } flgKey7 = true;
    } else {
      flgKey7 = false;
    }
    if (IR.data == codKey8) {
      if (flgKey8) {
        flgKey = false; // Запрещаем вывод данных кнопки 8 при её удержании
      } flgKey8 = true;
    } else {
      flgKey8 = false;
    }
    if (IR.data == codKey9) {
      if (flgKey9) {
        flgKey = false; // Запрещаем вывод данных кнопки 9 при её удержании
      } flgKey9 = true;
    } else {
      flgKey9 = false;
    }
    if (IR.data == codKey10) {
      if (flgKey10) {
        flgKey = false; // Запрещаем вывод данных кнопки 10 при её удержании
      } flgKey10 = true;
    } else {
      flgKey10 = false;
    }
    if (IR.data == codKey11) {
      if (flgKey11) {
        flgKey = false; // Запрещаем вывод данных кнопки 11 при её удержании
      } flgKey11 = true;
    } else {
      flgKey11 = false;
    }
    if (IR.data == codKey12) {
      if (flgKey12) {
        flgKey = false; // Запрещаем вывод данных кнопки 12 при её удержании
      } flgKey12 = true;
    } else {
      flgKey12 = false;
    }
    if (IR.data == codKey13) {
      if (flgKey13) {
        flgKey = false; // Запрещаем вывод данных кнопки 13 при её удержании
      } flgKey13 = true;
    } else {
      flgKey13 = false;
    }
    if (IR.data == codKey14) {
      if (flgKey14) {
        flgKey = false; // Запрещаем вывод данных кнопки 14 при её удержании
      } flgKey14 = true;
    } else {
      flgKey14 = false;
    }






    if (IR.data == codKey15) {
      if (++Vol > 100) Vol = 100;
    }

    else

      if (IR.data == codKey16) {


        if (--Vol < 0) Vol = 0;
      }


    if (OldVol != Vol) {
      OldVol = Vol;


      if (Vol < 100)

      {
        myGLCD.setColor(VGA_BLACK);

        myGLCD.setFont(SixteenSegment128x192Num);
        myGLCD.printNumI(1, 100, 100);

      }
      if (Vol < 10)

      {
        myGLCD.setColor(VGA_BLACK);

        myGLCD.setFont(SixteenSegment128x192Num);
        myGLCD.printNumI(1, 210, 100);

      }

      myGLCD.setColor(VGA_GREEN);
      myGLCD.setFont(SixteenSegment128x192Num);
      myGLCD.printNumI(Vol, RIGHT, 100);

      if (Vol > 70)

      {
        myGLCD.setFont(BigFontRus);

        myGLCD.setColor(VGA_YELLOW);

        myGLCD.textRus("Внимание очень громко !", 50, 30);
        EEPROM.update(10, 1);

      }
      else
      {

        myGLCD.setFont(BigFontRus);

        myGLCD.setColor(VGA_BLACK);

        myGLCD.textRus("Внимание очень громко !", 50, 30);
        EEPROM.update(10, 0);


      }



      int seg_width = 6; //ширина сегмента
      int seg_gap = 2; //ширина зазора между сегментами
      int x = 40; //координата начала "градусника"
      uint16_t seg_color;

      for (uint8_t i = 0; i < 100 / 2; i++) {
        if (i < Vol / 2) {
          if (i <= 50 / 2) seg_color = VGA_GREEN;
          else if (i >= 90 / 2) seg_color = VGA_RED;
          else seg_color = VGA_YELLOW;

        }
        else seg_color = VGA_BLACK; //цвет фона


        myGLCD.setColor(seg_color);
        myGLCD.fillRoundRect(x, 10, x + seg_width - 1, 25);
        x += (seg_width + seg_gap);


      }

      EEPROM.update(0, Vol);  // Пишем изменения громкости в EEPROM
    }

















    if (flgKey) {                                    // Если вывод данных разрешен, то ...


      Serial.println(IR.data, HEX);                  // Выводим код нажатой кнопки
      Serial.println(IR.length   );                  // Выводим количество бит в коде



    }

    /*

      uint8_t seg_width=6;//ширина сегмента
      uint16_t fill_color;//цвет


      if (Vol<=20) fill_color=VGA_GREEN;
      else
      if (Vol>=25) fill_color=VGA_RED;
      else fill_color=VGA_YELLOW;
      for(uint8_t x=0;x<100;){
      myGLCD.setColor((x >= Vol) ? VGA_BLACK : fill_color);
      myGLCD.fillRoundRect(x,10,x+seg_width-1,25);//тут отнял единицу от второй координаты
      x+=seg_width+3;


      }
    */


    /*



      if (IR.data==codKey15)
      {
      Vol++;

      if (Vol>100) Vol=100;


      myGLCD.setColor(VGA_GREEN);
      myGLCD.setFont(SixteenSegment128x192Num);
      myGLCD.printNumI(Vol, RIGHT, 100);

      }


      if (IR.data==codKey16)
      {

      Vol--;
      if (Vol<0) Vol=0;



      if (Vol<100)

      {
       myGLCD.setColor(VGA_BLACK);

       myGLCD.setFont(SixteenSegment128x192Num);
      myGLCD.printNumI(1, 100, 100);


      if (Vol<10)

      {
       myGLCD.setColor(VGA_BLACK);

      myGLCD.setFont(SixteenSegment128x192Num);
      myGLCD.printNumI(1, 210, 100);

      }


      }






      myGLCD.setColor(VGA_GREEN);


      myGLCD.setFont(SixteenSegment128x192Num);
      myGLCD.printNumI(Vol, RIGHT, 100);



      }


      if (Vol>70)

      {
       myGLCD.setFont(BigFontRus);

      myGLCD.setColor(VGA_YELLOW);

      myGLCD.textRus("Внимание очень громко !", 50, 30);
      EEPROM.update(10,1);

      }
      else
      {

        myGLCD.setFont(BigFontRus);

      myGLCD.setColor(VGA_BLACK);

      myGLCD.textRus("Внимание очень громко !", 50, 30);
      EEPROM.update(10,0);




    */



    switch (IR.data) {

      case 0x807F906F:
        digitalWrite(Filter35, LOW);
        digitalWrite(Filter45, LOW);
        digitalWrite(Filter55, LOW);
        digitalWrite(Filter65, LOW);
        digitalWrite(Filter75, LOW);
        digitalWrite(Filter85, LOW);

        myGLCD.setColor(VGA_BLUE);
        myGLCD.setFont(DotMatrix_M_Slash);
        myGLCD.print("OFF", 100, 60);

        EEPROM.update(2, LOW);
        EEPROM.update(3, LOW);
        EEPROM.update(4, LOW);
        EEPROM.update(5, LOW);
        EEPROM.update(6, LOW);
        EEPROM.update(7, LOW);
        EEPROM.update(9, 0);

        break;

      case 0x807FB04F:
        // код для выполнения
        digitalWrite(Filter35, HIGH);
        digitalWrite(Filter45, LOW);
        digitalWrite(Filter55, LOW);
        digitalWrite(Filter65, LOW);
        digitalWrite(Filter75, LOW);
        digitalWrite(Filter85, LOW);



        myGLCD.setColor(VGA_RED);
        myGLCD.setFont(DotMatrix_M_Slash);
        myGLCD.print(" 35", 100, 60);



        EEPROM.update(2, HIGH);
        EEPROM.update(3, LOW);
        EEPROM.update(4, LOW);
        EEPROM.update(5, LOW);
        EEPROM.update(6, LOW);
        EEPROM.update(7, LOW);
        EEPROM.update(9, 1);
        break;

      case 0x807F9867:


        digitalWrite(Filter35, LOW);
        digitalWrite(Filter45, HIGH);
        digitalWrite(Filter55, LOW);
        digitalWrite(Filter65, LOW);
        digitalWrite(Filter75, LOW);
        digitalWrite(Filter85, LOW);

        myGLCD.setColor(VGA_RED);
        myGLCD.setFont(DotMatrix_M_Slash);
        myGLCD.print(" 45", 100, 60);


        EEPROM.update(2, LOW);
        EEPROM.update(3, HIGH);
        EEPROM.update(4, LOW);
        EEPROM.update(5, LOW);
        EEPROM.update(6, LOW);
        EEPROM.update(7, LOW);
        EEPROM.update(9, 2);
        break;



      case 0x807FD827:


        digitalWrite(Filter35, LOW);
        digitalWrite(Filter45, LOW);
        digitalWrite(Filter55, HIGH);
        digitalWrite(Filter65, LOW);
        digitalWrite(Filter75, LOW);
        digitalWrite(Filter85, LOW);


        myGLCD.setColor(VGA_RED);
        myGLCD.setFont(DotMatrix_M_Slash);
        myGLCD.print(" 55", 100, 60);


        EEPROM.update(2, LOW);
        EEPROM.update(3, LOW);
        EEPROM.update(4, HIGH);
        EEPROM.update(5, LOW);
        EEPROM.update(6, LOW);
        EEPROM.update(7, LOW);
        EEPROM.update(9, 3);
        break;

      case 0x807F8877:


        digitalWrite(Filter35, LOW);
        digitalWrite(Filter45, LOW);
        digitalWrite(Filter55, LOW);
        digitalWrite(Filter65, HIGH);
        digitalWrite(Filter75, LOW);
        digitalWrite(Filter85, LOW);

        myGLCD.setColor(VGA_RED);
        myGLCD.setFont(DotMatrix_M_Slash);
        myGLCD.print(" 65", 100, 60);


        EEPROM.update(2, LOW);
        EEPROM.update(3, LOW);
        EEPROM.update(4, LOW);
        EEPROM.update(5, HIGH);
        EEPROM.update(6, LOW);
        EEPROM.update(7, LOW);
        EEPROM.update(9, 4);
        break;

      case 0x807FA857:


        digitalWrite(Filter35, LOW);
        digitalWrite(Filter45, LOW);
        digitalWrite(Filter55, LOW);
        digitalWrite(Filter65, LOW);
        digitalWrite(Filter75, HIGH);
        digitalWrite(Filter85, LOW);


        myGLCD.setColor(VGA_RED);
        myGLCD.setFont(DotMatrix_M_Slash);
        myGLCD.print(" 75", 100, 60);


        EEPROM.update(2, LOW);
        EEPROM.update(3, LOW);
        EEPROM.update(4, LOW);
        EEPROM.update(5, LOW);
        EEPROM.update(6, HIGH);
        EEPROM.update(7, LOW);
        EEPROM.update(9, 5);
        break;

      case 0x807FE817:


        digitalWrite(Filter35, LOW);
        digitalWrite(Filter45, LOW);
        digitalWrite(Filter55, LOW);
        digitalWrite(Filter65, LOW);
        digitalWrite(Filter75, LOW);
        digitalWrite(Filter85, HIGH);

        myGLCD.setColor(VGA_RED);
        myGLCD.setFont(DotMatrix_M_Slash);
        myGLCD.print(" 85", 100, 60);

        EEPROM.update(2, LOW);
        EEPROM.update(3, LOW);
        EEPROM.update(4, LOW);
        EEPROM.update(5, LOW);
        EEPROM.update(6, LOW);
        EEPROM.update(7, HIGH);
        EEPROM.update(9, 6);
        break;

      case 0x807F40BF:
        digitalWrite(PHase, HIGH);
        myGLCD.setFont(DotMatrix_M);
        myGLCD.setColor(VGA_BLACK);
        myGLCD.print("0", RIGHT, 60);
        myGLCD.setColor(VGA_YELLOW);
        myGLCD.print("180", RIGHT, 60);
        EEPROM.update(8, HIGH);

        break;
      case 0x807F00FF:
        digitalWrite(PHase, LOW);
        myGLCD.setFont(DotMatrix_M);
        myGLCD.setColor(VGA_BLACK);
        myGLCD.print("180", RIGHT, 60);

        myGLCD.setColor(VGA_BLUE);
        myGLCD.print("0", RIGHT, 60);


        EEPROM.update(8, LOW);


        break;

      case 0x807F20DF:
        Reset();

        break;













      case 0x807F58A7:

        pga.setVolume(Vol, Vol);

        break;

      case 0x807F708F:

        pga.setVolume(Vol, Vol);

        break;






        //default:
        // код для выполнения
    }



  }




  {
    /* Sweeps through Volumes Under MAX_GAIN */
    if (pga.getVolume() <= MAX_GAIN)
    {
      pga.incVolume();
    }
    else
    {
      pga.setVolume(Vol * 2, Vol * 2);
    }
    // delay(250);
  }




}
//}



//}
26
Я не волшебник, я только учусь... / Re: Исходники, алгоритмы.
« Последний ответ от slav0n 07 Январь 2020, 20:01:10 »
ну, все.
осталось взглянуть на теперешний полный исходник...
27
Я не волшебник, я только учусь... / Re: Исходники, алгоритмы.
« Последний ответ от lameralik 07 Январь 2020, 19:12:17 »
Результат тот же, нет градусника если условие нажатия не выполняется, весь последующий код игнорируется
28
Я не волшебник, я только учусь... / Re: Исходники, алгоритмы.
« Последний ответ от slav0n 07 Январь 2020, 18:45:51 »
посмотрел полный код с предыдущей страницы, нашел фигню.
вместо:
Vol = EEPROM.read(0); // Считать значение ячейки с адресом 0
OldVol = EEPROM.read(0);

надо написать:
Vol = EEPROM.read(0); // Считать значение ячейки с адресом 0
OldVol = -10;

Суть в том, что при включении, Vol и OldVol должны быть не равны.
29
Я не волшебник, я только учусь... / Re: Исходники, алгоритмы.
« Последний ответ от lameralik 07 Январь 2020, 17:43:20 »
Последний поправил штатными средствами IDE. Так нормально? Спасибо.
30
Я не волшебник, я только учусь... / Re: Исходники, алгоритмы.
« Последний ответ от slav0n 07 Январь 2020, 17:36:51 »
если код плохо читается, то и суть плохо улавливается.
Вот, например, есть такой онлайн "улучшайзер" - https://beautifier.io/
Страницы: 1 2 [3] 4 5 ... 10