#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SH110X.h>
#define OLED_RESET 21
#define i2c_Address 0x3c
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SH1106G display = Adafruit_SH1106G(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define pulsePin 32
int pulse = 0;
int center_x = 63;
int center_y = 32;
int start_x;
int start_y;
int end_x;
int end_y;
int cir_radius = 28;
int data_x;
int data_y;
void setup() {
Serial.begin(9600);
pinMode(pulsePin, INPUT);
display.begin(i2c_Address, true);
display.display();
delay(1000);
display.clearDisplay();
}
void loop() {
int temp_val = analogRead(pulsePin);
pulse = map(temp_val, 0, 4095, 45, 325);
OLED_display(pulse);
delay(10);
}
void OLED_display(int pulse_data){
for(int i = 45; i < 325; i += 10){
int x;
int y;
x = center_x - cir_radius * sin(radians(i));
y = center_y + cir_radius * cos(radians(i));
display.drawPixel(x, y, 1);
}
for(int i = 45; i < pulse_data; i++){
data_x = center_x - cir_radius * sin(radians(i));
data_y = center_y + cir_radius * cos(radians(i));
display.fillCircle(data_x, data_y, 1, 1);
}
for(int i = 49; i < pulse_data; i++){
start_x = center_x - (cir_radius - 25) * sin(radians(i));
start_y = center_y + (cir_radius - 25) * cos(radians(i));
end_x = center_x - (cir_radius + 4) * sin(radians(i));
end_y = center_y + (cir_radius + 4) * cos(radians(i));
}
display.drawCircle(data_x, data_y, 1, 0);
display.drawLine(start_x, start_y, end_x, end_y, 1);
display.display();
display.clearDisplay();
}