float rad, sin1, cos1;
unsigned long startTime, totTime;

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeSerif9pt7b.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

void setup() {
  Serial.begin(115200);

  display.setTextSize(2);
  display.setTextColor(WHITE);
  

  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { 
    Serial.println("SSD1306 allocation failed");
    for(;;);
  }

  display.clearDisplay();
  display.display();

  start();
  circle();
  end();
  delay(5000);
  display.clearDisplay();
  display.display();

  
  start();
  quarter();
  end();
  delay(5000);
  display.clearDisplay();
  display.display();

  
  start();
  display.drawCircle(95, 32, 30, WHITE);
  end();
  delay(5000);
  display.clearDisplay();
  display.display();

}


void quarter() {
  for (int angle=0; angle<90; angle=angle+1) {

    rad = angle*3.14159/180;
    sin1 = sin(rad);
    cos1 = cos(rad);
    display.drawPixel(cos1*30+40, sin1*30+32, WHITE);
    display.drawPixel(-cos1*30+40, sin1*30+32, WHITE);
    display.drawPixel(cos1*30+40, -sin1*30+32, WHITE);
    display.drawPixel(-cos1*30+40, -sin1*30+32, WHITE);
    display.display();
  }
}

void circle() {
  for (int angle=0; angle<360; angle=angle+1) {

    rad = angle*3.14159/180;
    sin1 = sin(rad);
    cos1 = cos(rad);
    display.drawPixel(cos1*30+40, sin1*30+32, WHITE);
    display.display();
  }
}

void start() {
  startTime = millis();
}

void end() {
  totTime = millis() - startTime;
  display.setCursor(0,28);
  display.println(totTime);
  display.display();

}

void loop() {
}