#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <Keypad.h>
// ================= TFT =================
#define TFT_CS D10
#define TFT_DC D9
Adafruit_ILI9341 tft(TFT_CS, TFT_DC);
// ================= Buzzer =================
#define BUZZER A3
// ================= LED =================
#define LED_PIN D1
// ================= Keypad =================
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'}
};
byte rowPins[ROWS] = {D2, D3, D4, D5};
byte colPins[COLS] = {D6, D7, D8, A0};
Keypad keypad = Keypad(
makeKeymap(keys),
rowPins,
colPins,
ROWS,
COLS
);
String phoneNumber = "";
// ================= HOME SCREEN =================
void showHome() {
tft.fillScreen(ILI9341_BLACK);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.setCursor(65, 15);
tft.println("MINI PHONE");
tft.drawLine(10, 45, 310, 45, ILI9341_WHITE);
// Number
tft.setTextSize(3);
tft.setCursor(20, 65);
tft.println(phoneNumber);
// Instructions
tft.setTextSize(2);
tft.setCursor(30, 160);
tft.println("A = CALL");
tft.setCursor(30, 190);
tft.println("B = END");
tft.setCursor(30, 220);
tft.println("C = CLEAR");
tft.setCursor(30, 250);
tft.println("D = DELETE");
}
// ================= MESSAGE SCREEN =================
void showMessage(const char *message) {
tft.fillScreen(ILI9341_BLACK);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(3);
tft.setCursor(35, 100);
tft.println(message);
}
// ================= SETUP =================
void setup() {
pinMode(BUZZER, OUTPUT);
pinMode(LED_PIN, OUTPUT);
digitalWrite(BUZZER, LOW);
digitalWrite(LED_PIN, LOW);
tft.begin();
tft.setRotation(1);
showHome();
}
// ================= LOOP =================
void loop() {
char key = keypad.getKey();
if (key) {
// Number
if (key >= '0' && key <= '9') {
phoneNumber += key;
showHome();
}
// * and #
else if (key == '*' || key == '#') {
phoneNumber += key;
showHome();
}
// ================= CALL =================
else if (key == 'A') {
digitalWrite(LED_PIN, HIGH);
tone(BUZZER, 1000);
showMessage("CALLING...");
delay(2000);
noTone(BUZZER);
}
// ================= END =================
else if (key == 'B') {
noTone(BUZZER);
digitalWrite(LED_PIN, LOW);
showMessage("CALL ENDED");
delay(1500);
showHome();
}
// ================= CLEAR =================
else if (key == 'C') {
phoneNumber = "";
showHome();
}
// ================= DELETE =================
else if (key == 'D') {
if (phoneNumber.length() > 0) {
phoneNumber.remove(phoneNumber.length() - 1);
}
showHome();
}
}
}Loading
st-nucleo-c031c6
st-nucleo-c031c6
Loading
ssd1306
ssd1306
Loading
ili9341-cap-touch
ili9341-cap-touch