#include <Adafruit_GFX.h>
#include <Adafruit_GC9A01A.h>
#include <SPI.h>
#include "ris_1.h"//файл хранения массивов фотокартинок

#define TFT_DC 17
#define TFT_CS 16
/*
  SCL   --> 18 (SCK)
  SDA   --> 23 (MOSI)
  RST   --> EN
*/

Adafruit_GC9A01A tft(TFT_CS, TFT_DC);

// Константы координат смещения центра
const int CENTER_X = 120;
const int CENTER_Y = 120;
const float Z = 400.0; //от 100.0 до 1000.0 регулировка качества отрисовки пикселей с пропусками и без них

void setup() {
  // Инициализация генератора случайных чисел
  randomSeed(analogRead(32));
  tft.begin();
  tft.fillScreen(GC9A01A_BLACK);
  // tft.cp437(true);
  tft.setRotation(2);

}

void loop() {
  float f = (random(0, 101) / 100.0) * (2 * PI - PI / 6.0);
  byte ris=random(0,7);
  
  if(ris==0){ draw_RisSektor(f, ris_1);}
  if(ris==1){ draw_RisSektor(f, ris_2);}
  if(ris==2){ draw_RisSektor(f, ris_3);}
  if(ris==3){ draw_RisSektor(f, ris_4);}
  if(ris==4){ draw_RisSektor(f, ris_5);}
  if(ris==5){ draw_RisSektor(f, ris_6);}
  if(ris==6){ draw_RisSektor(f, ris_7);}
}
//////////////////////////////////////
//функция вывода 12 отсимметриченных секторов узора по базовому сектору картинки
void draw_RisSektor(float S, const uint8_t *bitmap) {
  for (int r1 = 0; r1 <= 120 ; r1 += 1) {
    for (float f1 = 0.0; f1 <= PI / 6.0; f1 += PI / Z) {
      int x = CENTER_X + cos(f1 + S) * r1;
      int y = CENTER_Y + sin(f1 + S) * r1;
      for (float i = 0.01; i <= 2 * PI; i += PI / 3.0) {
        int x1 = CENTER_X + cos(f1 + i) * r1;
        int y1 = CENTER_Y + sin(f1 + i) * r1;
        tft.drawPixel(x1, y1, 256 * bitmap[2 * x + 1 + y * 2 * 240] + bitmap[2 * x + y * 2 * 240]);
        int x2 = CENTER_X + cos(2 * PI - f1 + i) * r1;
        int y2 = CENTER_Y + sin(2 * PI - f1 + i) * r1;
        tft.drawPixel(x2, y2, 256 * bitmap[2 * x + 1 + y * 2 * 240] + bitmap[2 * x + y * 2 * 240]);

      }
    }
  }
}
//////////////////////////////////////


