#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <math.h>
//origin for graph is (63,31)
//all values for calculation need to be offset by that
Adafruit_SSD1306 display(128,64,&Wire,-1);
#define OFFSETX 63
#define OFFSETY 31
#define TOTAL_STATES 3
#define BTN_PIN 13
int state = 0;
bool last_state = HIGH;
bool current_state = HIGH;
void drawAxes()
{
display.drawLine(63, 0, 63, 63, SSD1306_WHITE);
display.drawLine(0,31,127,31,SSD1306_WHITE);
}
void linear()
{
// int par = ??? (y=nx)
display.clearDisplay();
drawAxes();
display.drawLine(95,0,31,63,SSD1306_WHITE);
display.display();
}
void quadratic()
{
display.clearDisplay();
drawAxes();
float i = 0;
while(i*i < 31)
{
display.drawPixel(OFFSETX+i,OFFSETY - i*i,SSD1306_WHITE);
display.drawPixel(OFFSETX-i,OFFSETY - i*i,SSD1306_WHITE);
i+=0.05;
}
display.display();
}
void sinusoidal();
void exponential()
{
display.clearDisplay();
drawAxes();
float i = 0;
while(i<=127)
{
display.drawPixel(63+i , OFFSETY - log(i), SSD1306_WHITE);
i+=0.05;
}
display.display();
};
void setup() {
display.begin(SSD1306_SWITCHCAPVCC,0x3C);
pinMode(BTN_PIN, INPUT_PULLUP);
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.display();
}
void loop() {
if (digitalRead(BTN_PIN) == LOW)
{
state += 1;
while(digitalRead(BTN_PIN) == LOW){
delay(10);
}
//wtf is debouncing
delay(50);
}
if(state%TOTAL_STATES == 0){
linear();
}
else if (state%TOTAL_STATES == 1){
quadratic();
}
else if(state%TOTAL_STATES == 2){
exponential();
}
/*
else if(state%TOTAL_STATES == 2){
exponential();
}
else if(state%TOTAL_STATES ==3){
sinusoidal();
}
*/
}