#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Keypad.h>
#define OLED_RESET 4
#define READ_PIN A0
Adafruit_SSD1306 lcd(128, 64, &Wire, OLED_RESET);
double volts;
double bvolts;
double x, y;
bool Redraw1 = true;
bool Redraw2 = true;
bool Redraw3 = true;
bool Redraw4 = true;
double ox , oy ;
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
char key;
byte rowPins[ROWS] = {13, 12, 11, 10};
byte colPins[COLS] = {9, 8, 7, 6};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
const unsigned char Logo[] PROGMEM = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xfd, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xfc, 0x00, 0x78, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xfc, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xf8, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xf8, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xf8, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x07, 0xff, 0xfb, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xfc, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x03, 0xff, 0xf1, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xf0, 0x00, 0x00, 0xff, 0x00, 0x03, 0xff, 0xf0, 0xe1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x03, 0xff, 0xff, 0x80, 0x0f, 0xff, 0xf0, 0xe1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xc7, 0xff, 0xff, 0xf8, 0x7f, 0xff, 0xf0, 0xe1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xfe, 0x01, 0xf0, 0xe1, 0xe3, 0xe0, 0x1f, 0x80, 0x00, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x7c, 0x00, 0xf0, 0xe1, 0xc1, 0xc0, 0x0f, 0x00, 0x00, 0x7f,
0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x78, 0x00, 0x70, 0xe1, 0x83, 0x80, 0x07, 0x00, 0x00, 0x3f,
0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x78, 0x78, 0x70, 0xe1, 0x87, 0x87, 0x87, 0x06, 0x08, 0x3f,
0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x78, 0xf8, 0x70, 0xe1, 0x0f, 0x87, 0x87, 0x0e, 0x1c, 0x3f,
0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x78, 0x78, 0x70, 0xe0, 0x1f, 0x87, 0x87, 0x0e, 0x1c, 0x3f,
0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x78, 0x00, 0xf0, 0xe0, 0x1f, 0x87, 0x87, 0x0e, 0x1c, 0x3f,
0xfc, 0x07, 0xff, 0xc0, 0xff, 0xf8, 0x78, 0x00, 0xf0, 0xe0, 0x1f, 0x87, 0x87, 0x0e, 0x1c, 0x3f,
0xfc, 0x07, 0xff, 0x80, 0xff, 0xf8, 0x78, 0x03, 0xf0, 0xe0, 0x0f, 0x87, 0x87, 0x0e, 0x1c, 0x3f,
0xfc, 0x07, 0xff, 0x80, 0xff, 0xf8, 0x78, 0x7f, 0xf0, 0xe1, 0x07, 0x87, 0x87, 0x0e, 0x1c, 0x3f,
0xfc, 0x07, 0xff, 0x80, 0xff, 0xf8, 0x78, 0x7f, 0xf0, 0xe1, 0x87, 0x87, 0x87, 0x0e, 0x1c, 0x3f,
0xfc, 0x07, 0xff, 0x80, 0xff, 0xf8, 0x78, 0x00, 0xf1, 0xe1, 0xc3, 0x80, 0x07, 0x0e, 0x1c, 0x3f,
0xfc, 0x07, 0xff, 0x80, 0xff, 0xf8, 0x78, 0x00, 0xf0, 0xe1, 0xc1, 0xc0, 0x0f, 0x0e, 0x1c, 0x3f,
0xfc, 0x07, 0xff, 0x80, 0xff, 0xf8, 0xfc, 0x00, 0xf1, 0xe3, 0xe1, 0xe0, 0x1f, 0x8f, 0x1c, 0x3f,
0xfc, 0x07, 0xff, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xfc, 0x07, 0xff, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xfc, 0x07, 0xff, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xfc, 0x07, 0xff, 0x80, 0xff, 0xf9, 0xe7, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xfe, 0xf3, 0xff, 0xff,
0xfc, 0x03, 0xff, 0x00, 0xff, 0xf9, 0xe7, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xfe, 0xe3, 0xff, 0xff,
0xfe, 0x03, 0xff, 0x00, 0xff, 0xf9, 0xe7, 0x07, 0xbb, 0xfe, 0x1e, 0x0c, 0x0e, 0xe0, 0xef, 0x7f,
0xfe, 0x00, 0xfc, 0x01, 0xff, 0xf9, 0xe6, 0x03, 0x11, 0xcc, 0x0c, 0x08, 0x0c, 0xc0, 0xc7, 0x3f,
0xfe, 0x00, 0x30, 0x01, 0xff, 0xf9, 0xe6, 0x23, 0x11, 0xc8, 0xc4, 0x78, 0xfc, 0x73, 0xc7, 0x3f,
0xfe, 0x00, 0x00, 0x03, 0xff, 0xf9, 0xe6, 0x71, 0x19, 0xc8, 0xc4, 0x78, 0x7c, 0x73, 0xc7, 0x3f,
0xff, 0x00, 0x00, 0x03, 0xff, 0xf9, 0xe6, 0x71, 0x18, 0x98, 0x0c, 0x7c, 0x0c, 0x73, 0xc7, 0x3f,
0xff, 0x80, 0x00, 0x07, 0xff, 0xf9, 0xe6, 0x71, 0x1c, 0x18, 0x3c, 0x7e, 0x0c, 0x73, 0xc7, 0x3f,
0xff, 0xc0, 0x00, 0x0f, 0xff, 0xf9, 0xc6, 0x71, 0x1c, 0x18, 0xfc, 0x7f, 0xc4, 0x71, 0xc6, 0x3f,
0xff, 0xe0, 0x00, 0x1f, 0xff, 0xf8, 0x06, 0x71, 0x1c, 0x3c, 0x0c, 0x7c, 0x0c, 0xf0, 0x60, 0x3f,
0xff, 0xf8, 0x00, 0x3f, 0xff, 0xfc, 0x0f, 0x7b, 0xbe, 0x7e, 0x0e, 0xfc, 0x0e, 0xf8, 0x70, 0x3f,
0xff, 0xfc, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x3f,
0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x7f,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
};
void setup() {
lcd.begin(SSD1306_SWITCHCAPVCC, 0x3C);
lcd.clearDisplay();
lcd.drawBitmap(0, 0, Logo, 128, 64, WHITE);
lcd.display();
delay(3000);
lcd.setTextSize(1);
lcd.setTextColor(WHITE);
lcd.setCursor(30,0);
delay(1000);
lcd.clearDisplay();
pinMode(A0, INPUT);
}
unsigned long OldTime;
unsigned long counter;
void loop() {
bvolts = analogRead(A0);
volts = (bvolts / 204.6 ) ;
DrawCGraph(lcd, x++, bvolts, 30, 50, 75, 30, 0, 100, 25, 0, 1024, 512, 0, "." , Redraw4);
if (x > 100) {
while (1) {
}
}
delay(1000);
key = keypad.getKey();
lcd.setCursor(110,5);
lcd.setTextSize(2);
lcd.setTextColor(WHITE);
lcd.print(key);
}
void DrawCGraph(Adafruit_SSD1306 &d, double x, double y, double gx, double gy, double w, double h, double xlo, double xhi, double xinc, double ylo, double yhi, double yinc, double dig, String title, boolean &Redraw) {
double i;
double temp;
int rot, newrot;
if (Redraw == true) {
Redraw = false;
d.fillRect(0, 0, 127 , 16, SSD1306_WHITE);
d.setTextColor(SSD1306_BLACK, SSD1306_WHITE);
d.setTextSize(1);
d.setCursor(2, 4);
d.println(title);
ox = (x - xlo) * ( w) / (xhi - xlo) + gx;
oy = (y - ylo) * (gy - h - gy) / (yhi - ylo) + gy;
// draw y scale
d.setTextSize(1);
d.setTextColor(SSD1306_WHITE, SSD1306_BLACK);
for ( i = ylo; i <= yhi; i += yinc) {
temp = (i - ylo) * (gy - h - gy) / (yhi - ylo) + gy;
if (i == 0) {
d.drawFastHLine(gx - 3, temp, w + 3, SSD1306_WHITE);
}
else {
d.drawFastHLine(gx - 3, temp, 3, SSD1306_WHITE);
}
d.setCursor(gx - 27, temp - 3);
d.println(i, dig);
}
for (i = xlo; i <= xhi; i += xinc) {
d.setTextSize(1);
d.setTextColor(SSD1306_WHITE, SSD1306_BLACK);
temp = (i - xlo) * ( w) / (xhi - xlo) + gx;
if (i == 0) {
d.drawFastVLine(temp, gy - h, h + 3, SSD1306_WHITE);
}
else {
d.drawFastVLine(temp, gy, 3, SSD1306_WHITE);
}
d.setCursor(temp, gy + 6);
d.println(i, dig);
}
}
x = (x - xlo) * ( w) / (xhi - xlo) + gx;
y = (y - ylo) * (gy - h - gy) / (yhi - ylo) + gy;
d.drawLine(ox, oy, x, y, SSD1306_WHITE);
d.drawLine(ox, oy - 1, x, y - 1, SSD1306_WHITE);
ox = x;
oy = y;
d.display();
}