#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // ширина дисплея в пикселях
#define SCREEN_HEIGHT 64 // высота дисплея в пикселях

#define OLED_RESET     -1 // подключение к сигналу сброса
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); //объявили дисплей
           

void draw_cos()  //функция отрисовки двух перидов косинуса
{  
  int8_t f = 0; 
  display.clearDisplay(); //очистка дисплея
  for (int16_t i = 0; i <128; i++) //цикл по всей ширене (128 точек)
  {
    f=abs((cos(i*(4*PI)/128)*30-32)); //вычисление косинуса и его масштабирование
    display.drawPixel(i, f, WHITE);  // закрасить пиксель с координатами i по ширине и f по высоте белым
    display.display();    //послать команду на отрисовку в дисплей
    delay(20);
  }   
}

void draw_sin()
{ 
  int8_t f = 0; 
  display.clearDisplay();
  for (int16_t i = 0; i <128; i++)
  {
    f=abs((sin(i*(4*PI)/128)*30-32)); 
    display.drawPixel(i, f, WHITE);
    display.display();;
    delay(20);
  }   
}

void draw_cos2()  //функция отрисовки двух перидов косинуса в квадрате
{  
  int8_t f = 0; 
  display.clearDisplay(); //очистка дисплея
  for (int16_t i = 0; i <128; i++) //цикл по всей ширене (128 точек)
  {
    f= pow((cos(    i*    (4*PI)/128)*0.5   -32      ),2); //вычисление косинуса и его масштабирование
    display.drawPixel(i, f, WHITE);  // закрасить пиксель с координатами i по ширине и f по высоте белым
    display.display();    //послать команду на отрисовку в дисплей
    delay(20);
  }   
}


void setup()
{
  Serial.begin(115200);
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {   //проверка того,что дисплей подключен
    Serial.println(F("SSD1306 allocation failed"));
    for (;;); 
  }
   display.clearDisplay();  //очистка дисплея
   display.setTextSize(1);  //размер текста
   display.setTextColor(WHITE); //цвет текста
   display.setCursor(10, 0);
   display.println("choose signal");
   display.display(); 

   pinMode(5,INPUT_PULLUP);  
   pinMode(18,INPUT_PULLUP);
   pinMode(19,INPUT_PULLUP);  
}

void loop() {
 if (digitalRead(5) == 0)
 {
   draw_sin();
 }
 
 if (digitalRead(18) == 0)
 {
   draw_cos();
 }

  if (digitalRead(19) == 0)
 {
   draw_cos2();
 }


 
/* else
 {
   display.clearDisplay();
   display.setTextSize(1);
   display.setTextColor(WHITE);
   display.setCursor(10, 0);
   display.println("choose signal");
   display.display(); 
 }  */
  
  
  }
  
