#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Keypad.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define ROW_NUM 4 // four rows
#define COLUMN_NUM 4 // four columns
char keys[ROW_NUM][COLUMN_NUM] = {
{'1','2','3', 'A'},
{'4','5','6', 'B'},
{'7','8','9', 'C'},
{'*','0','#', 'D'}
};
byte pin_rows[ROW_NUM] = {12, 14, 27, 26}; // GPIO19, GPIO18, GPIO5, GPIO17 connect to the row pins
byte pin_column[COLUMN_NUM] = {25, 33, 32, 35}; // GPIO16, GPIO4, GPIO0, GPIO2 connect to the column pins
Keypad keypad = Keypad(makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM );
const double pi = 3.142;
float calculateArea(float circumference) {
float radius = circumference / (2 * pi);
return pi * radius * radius;
}
void setup() {
Serial.begin(9600);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
display.display();
delay(2000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print("Enter Circumference:");
display.display();
}
void loop() {
char key = keypad.getKey();
static String inputStr = "";
static float circumference = 0.0;
if (key) {
if (key == '#') {
circumference = inputStr.toFloat();
float area = calculateArea(circumference);
display.clearDisplay();
display.setCursor(0, 0);
display.print("Circumference: ");
display.println(circumference);
display.print("Area: ");
display.println(area);
display.display();
inputStr = "";
circumference = 0.0;
} else {
inputStr += key;
display.clearDisplay();
display.setCursor(0, 0);
display.print("Enter Circumference:");
display.setCursor(0, 16);
display.println(inputStr);
display.display();
}
}
}