/* Main.ino file
*
* Processor: ESP32
* Compiler: Arduino ESP32
*/
// --- Peripheral Configuration ---
// ESP32 GPIO Pin Definitions based on your schematic
// Segments (Assuming HIGH turns segment ON)
const int segA_pin = 13; // IO13 for Segment a
const int segB_pin = 12; // IO12 for Segment b
const int segC_pin = 15; // IO15 for Segment c
const int segD_pin = 2; // IO2 for Segment d
const int segE_pin = 4; // IO4 for Segment e
const int segF_pin = 16; // IO16 for Segment f
const int segG_pin = 17; // IO17 for Segment g
// Digits (Assuming Common Anode - LOW enables the digit)
// IMPORTANT: Verify these GPIO assignments from your Proteus schematic for D2-D6
const int D1_pin = 14; // IO14 for Digit 1
const int D2_pin = 27; // <<<<< VERIFY THIS GPIO for Digit 2 (e.g., IO27 or actual connected pin)
const int D3_pin = 26; // <<<<< VERIFY THIS GPIO for Digit 3 (e.g., IO26 or actual connected pin)
const int D4_pin = 25; // <<<<< VERIFY THIS GPIO for Digit 4 (e.g., IO25 or actual connected pin)
const int D5_pin = 33; // <<<<< VERIFY THIS GPIO for Digit 5 (e.g., IO33 or actual connected pin)
const int D6_pin = 32; // <<<<< VERIFY THIS GPIO for Digit 6 (e.g., IO32 or actual connected pin)
const int D7_pin = 19; // IO19 for Digit 7
const int D8_pin = 18; // IO18 for Digit 8
// Input Switch
const int input_pin = 0; // IO0 for Input switch
void setup() {
// Configure segment pins as OUTPUT
pinMode(segA_pin, OUTPUT);
pinMode(segB_pin, OUTPUT);
pinMode(segC_pin, OUTPUT);
pinMode(segD_pin, OUTPUT);
pinMode(segE_pin, OUTPUT);
pinMode(segF_pin, OUTPUT);
pinMode(segG_pin, OUTPUT);
// Configure digit common pins as OUTPUT
pinMode(D1_pin, OUTPUT);
pinMode(D2_pin, OUTPUT);
pinMode(D3_pin, OUTPUT);
pinMode(D4_pin, OUTPUT);
pinMode(D5_pin, OUTPUT);
pinMode(D6_pin, OUTPUT);
pinMode(D7_pin, OUTPUT);
pinMode(D8_pin, OUTPUT);
// Configure input pin
pinMode(input_pin, INPUT_PULLUP); // Assuming switch pulls IO0 to GND when active (0)
// Initialize display state (all digits off, all segments off)
digitalWrite(D1_pin, HIGH); // Off
digitalWrite(D2_pin, HIGH); // Off
digitalWrite(D3_pin, HIGH); // Off
digitalWrite(D4_pin, HIGH); // Off
digitalWrite(D5_pin, HIGH); // Off
digitalWrite(D6_pin, HIGH); // Off
digitalWrite(D7_pin, HIGH); // Off
digitalWrite(D8_pin, HIGH); // Off
digitalWrite(segA_pin, LOW); // Segment off
digitalWrite(segB_pin, LOW); // Segment off
digitalWrite(segC_pin, LOW); // Segment off
digitalWrite(segD_pin, LOW); // Segment off
digitalWrite(segE_pin, LOW); // Segment off
digitalWrite(segF_pin, LOW); // Segment off
digitalWrite(segG_pin, LOW); // Segment off
}
//==============================================
// DIGIT SELECTION FUNCTIONS
//==============================================
void digit_1() {
digitalWrite(D8_pin, HIGH);
digitalWrite(D7_pin, HIGH);
digitalWrite(D6_pin, HIGH);
digitalWrite(D5_pin, HIGH);
digitalWrite(D4_pin, HIGH);
digitalWrite(D3_pin, HIGH);
digitalWrite(D2_pin, HIGH);
digitalWrite(D1_pin, LOW); // Enable Digit 1
}
void digit_2() {
digitalWrite(D8_pin, HIGH);
digitalWrite(D7_pin, HIGH);
digitalWrite(D6_pin, HIGH);
digitalWrite(D5_pin, HIGH);
digitalWrite(D4_pin, HIGH);
digitalWrite(D3_pin, HIGH);
digitalWrite(D1_pin, HIGH);
digitalWrite(D2_pin, LOW); // Enable Digit 2
}
void digit_3() {
digitalWrite(D8_pin, HIGH);
digitalWrite(D7_pin, HIGH);
digitalWrite(D6_pin, HIGH);
digitalWrite(D5_pin, HIGH);
digitalWrite(D4_pin, HIGH);
digitalWrite(D1_pin, HIGH);
digitalWrite(D2_pin, HIGH);
digitalWrite(D3_pin, LOW); // Enable Digit 3
}
void digit_4() {
digitalWrite(D8_pin, HIGH);
digitalWrite(D7_pin, HIGH);
digitalWrite(D6_pin, HIGH);
digitalWrite(D5_pin, HIGH);
digitalWrite(D1_pin, HIGH);
digitalWrite(D2_pin, HIGH);
digitalWrite(D3_pin, HIGH);
digitalWrite(D4_pin, LOW); // Enable Digit 4
}
void digit_5() {
digitalWrite(D8_pin, HIGH);
digitalWrite(D7_pin, HIGH);
digitalWrite(D6_pin, HIGH);
digitalWrite(D1_pin, HIGH);
digitalWrite(D2_pin, HIGH);
digitalWrite(D3_pin, HIGH);
digitalWrite(D4_pin, HIGH);
digitalWrite(D5_pin, LOW); // Enable Digit 5
}
void digit_6() {
digitalWrite(D8_pin, HIGH);
digitalWrite(D7_pin, HIGH);
digitalWrite(D1_pin, HIGH);
digitalWrite(D2_pin, HIGH);
digitalWrite(D3_pin, HIGH);
digitalWrite(D4_pin, HIGH);
digitalWrite(D5_pin, HIGH);
digitalWrite(D6_pin, LOW); // Enable Digit 6
}
void digit_7() {
digitalWrite(D8_pin, HIGH);
digitalWrite(D1_pin, HIGH);
digitalWrite(D2_pin, HIGH);
digitalWrite(D3_pin, HIGH);
digitalWrite(D4_pin, HIGH);
digitalWrite(D5_pin, HIGH);
digitalWrite(D6_pin, HIGH);
digitalWrite(D7_pin, LOW); // Enable Digit 7
}
void digit_8() {
digitalWrite(D1_pin, HIGH);
digitalWrite(D2_pin, HIGH);
digitalWrite(D3_pin, HIGH);
digitalWrite(D4_pin, HIGH);
digitalWrite(D5_pin, HIGH);
digitalWrite(D6_pin, HIGH);
digitalWrite(D7_pin, HIGH);
digitalWrite(D8_pin, LOW); // Enable Digit 8
}
//==============================================
// SEGMENT DISPLAY FUNCTIONS (0-9)
//==============================================
// Assuming HIGH = Segment ON
void tampil_0() {
digitalWrite(segA_pin, HIGH);
digitalWrite(segB_pin, HIGH);
digitalWrite(segC_pin, HIGH);
digitalWrite(segD_pin, HIGH);
digitalWrite(segE_pin, HIGH);
digitalWrite(segF_pin, HIGH);
digitalWrite(segG_pin, LOW);
}
void tampil_1() {
digitalWrite(segA_pin, LOW);
digitalWrite(segB_pin, HIGH);
digitalWrite(segC_pin, HIGH);
digitalWrite(segD_pin, LOW);
digitalWrite(segE_pin, LOW);
digitalWrite(segF_pin, LOW);
digitalWrite(segG_pin, LOW);
}
void tampil_2() {
digitalWrite(segA_pin, HIGH);
digitalWrite(segB_pin, HIGH);
digitalWrite(segC_pin, LOW);
digitalWrite(segD_pin, HIGH);
digitalWrite(segE_pin, HIGH);
digitalWrite(segF_pin, LOW);
digitalWrite(segG_pin, HIGH);
}
void tampil_3() {
digitalWrite(segA_pin, HIGH);
digitalWrite(segB_pin, HIGH);
digitalWrite(segC_pin, HIGH);
digitalWrite(segD_pin, HIGH);
digitalWrite(segE_pin, LOW);
digitalWrite(segF_pin, LOW);
digitalWrite(segG_pin, HIGH);
}
void tampil_4() {
digitalWrite(segA_pin, LOW);
digitalWrite(segB_pin, HIGH);
digitalWrite(segC_pin, HIGH);
digitalWrite(segD_pin, LOW);
digitalWrite(segE_pin, LOW);
digitalWrite(segF_pin, HIGH);
digitalWrite(segG_pin, HIGH);
}
void tampil_5() {
digitalWrite(segA_pin, HIGH);
digitalWrite(segB_pin, LOW);
digitalWrite(segC_pin, HIGH);
digitalWrite(segD_pin, HIGH);
digitalWrite(segE_pin, LOW);
digitalWrite(segF_pin, HIGH);
digitalWrite(segG_pin, HIGH);
}
void tampil_6() {
digitalWrite(segA_pin, HIGH);
digitalWrite(segB_pin, LOW);
digitalWrite(segC_pin, HIGH);
digitalWrite(segD_pin, HIGH);
digitalWrite(segE_pin, HIGH);
digitalWrite(segF_pin, HIGH);
digitalWrite(segG_pin, HIGH);
}
void tampil_7() {
digitalWrite(segA_pin, HIGH);
digitalWrite(segB_pin, HIGH);
digitalWrite(segC_pin, HIGH);
digitalWrite(segD_pin, LOW);
digitalWrite(segE_pin, LOW);
digitalWrite(segF_pin, LOW);
digitalWrite(segG_pin, LOW);
}
void tampil_8() {
digitalWrite(segA_pin, HIGH);
digitalWrite(segB_pin, HIGH);
digitalWrite(segC_pin, HIGH);
digitalWrite(segD_pin, HIGH);
digitalWrite(segE_pin, HIGH);
digitalWrite(segF_pin, HIGH);
digitalWrite(segG_pin, HIGH);
}
void tampil_9() {
digitalWrite(segA_pin, HIGH);
digitalWrite(segB_pin, HIGH);
digitalWrite(segC_pin, HIGH);
digitalWrite(segD_pin, HIGH);
digitalWrite(segE_pin, LOW);
digitalWrite(segF_pin, HIGH);
digitalWrite(segG_pin, HIGH);
}
//==============================================
// SEGMENT DISPLAY FUNCTIONS (Letters)
//==============================================
void tampil_t() {
digitalWrite(segA_pin, LOW);
digitalWrite(segB_pin, LOW);
digitalWrite(segC_pin, LOW);
digitalWrite(segD_pin, HIGH);
digitalWrite(segE_pin, HIGH);
digitalWrite(segF_pin, HIGH);
digitalWrite(segG_pin, HIGH);
}
void tampil_a() { // Lowercase 'a' or like 'A' without the top bar if g is off
digitalWrite(segA_pin, HIGH);
digitalWrite(segB_pin, HIGH);
digitalWrite(segC_pin, HIGH);
digitalWrite(segD_pin, LOW); // For 'A', this would be HIGH
digitalWrite(segE_pin, HIGH);
digitalWrite(segF_pin, LOW); // For 'A', this would be HIGH
digitalWrite(segG_pin, HIGH);
// Original 'tampil_a' (looks more like 'O' or capital 'A' if d,f were on)
// digitalWrite(segA_pin, HIGH);
// digitalWrite(segB_pin, HIGH);
// digitalWrite(segC_pin, HIGH);
// digitalWrite(segD_pin, HIGH); // Original was HIGH
// digitalWrite(segE_pin, HIGH);
// digitalWrite(segF_pin, LOW); // Original was LOW
// digitalWrite(segG_pin, HIGH);
}
void tampil_s() { // Same as tampil_5
digitalWrite(segA_pin, HIGH);
digitalWrite(segB_pin, LOW);
digitalWrite(segC_pin, HIGH);
digitalWrite(segD_pin, HIGH);
digitalWrite(segE_pin, LOW);
digitalWrite(segF_pin, HIGH);
digitalWrite(segG_pin, HIGH);
}
void tampil_r() { // Lowercase 'r'
digitalWrite(segA_pin, LOW);
digitalWrite(segB_pin, LOW);
digitalWrite(segC_pin, LOW);
digitalWrite(segD_pin, LOW);
digitalWrite(segE_pin, HIGH);
digitalWrite(segF_pin, LOW);
digitalWrite(segG_pin, HIGH);
}
void tampil_i() { // Lowercase 'i' or like '1'
digitalWrite(segA_pin, LOW);
digitalWrite(segB_pin, LOW);
digitalWrite(segC_pin, HIGH); // Or LOW for just a vertical bar for 'i'
digitalWrite(segD_pin, LOW);
digitalWrite(segE_pin, LOW); // Or HIGH if c is LOW
digitalWrite(segF_pin, LOW);
digitalWrite(segG_pin, LOW);
// Original 'tampil_i' (just segment e)
// digitalWrite(segA_pin, LOW);
// digitalWrite(segB_pin, LOW);
// digitalWrite(segC_pin, LOW);
// digitalWrite(segD_pin, LOW);
// digitalWrite(segE_pin, HIGH);
// digitalWrite(segF_pin, LOW);
// digitalWrite(segG_pin, LOW);
}
void tampil_p() { // Capital 'P'
digitalWrite(segA_pin, HIGH);
digitalWrite(segB_pin, HIGH);
digitalWrite(segC_pin, LOW);
digitalWrite(segD_pin, LOW);
digitalWrite(segE_pin, HIGH);
digitalWrite(segF_pin, HIGH);
digitalWrite(segG_pin, HIGH);
}
void tampil_n() { // Lowercase 'n'
digitalWrite(segA_pin, LOW);
digitalWrite(segB_pin, LOW);
digitalWrite(segC_pin, HIGH);
digitalWrite(segD_pin, LOW);
digitalWrite(segE_pin, HIGH);
digitalWrite(segF_pin, LOW);
digitalWrite(segG_pin, HIGH);
}
//==============================================
// DELAY & BLANKING FUNCTION
//==============================================
void tunda() {
delay(2); // Small delay for persistence of vision. Adjust as needed (1-5ms usually works)
// Turn OFF all digits (HIGH for common anode)
digitalWrite(D1_pin, HIGH);
digitalWrite(D2_pin, HIGH);
digitalWrite(D3_pin, HIGH);
digitalWrite(D4_pin, HIGH);
digitalWrite(D5_pin, HIGH);
digitalWrite(D6_pin, HIGH);
digitalWrite(D7_pin, HIGH);
digitalWrite(D8_pin, HIGH);
// Turn OFF all segments (LOW, assuming HIGH was ON)
// This helps prevent ghosting when switching digits.
digitalWrite(segA_pin, LOW);
digitalWrite(segB_pin, LOW);
digitalWrite(segC_pin, LOW);
digitalWrite(segD_pin, LOW);
digitalWrite(segE_pin, LOW);
digitalWrite(segF_pin, LOW);
digitalWrite(segG_pin, LOW);
}
//==============================================
// MAIN LOOP
//==============================================
void loop() {
// digitalRead(input_pin) will be LOW if switch is pressed (connected to GND)
// digitalRead(input_pin) will be HIGH if switch is open (due to INPUT_PULLUP)
// Schematic: Input: 1 = Tampil NAMA, 0 = Tampil NRP
if (digitalRead(input_pin) == LOW) { // Input is 0, display NRP (01234567)
tampil_0(); digit_1(); tunda();
tampil_1(); digit_2(); tunda();
tampil_2(); digit_3(); tunda();
tampil_3(); digit_4(); tunda();
tampil_4(); digit_5(); tunda();
tampil_5(); digit_6(); tunda();
tampil_6(); digit_7(); tunda();
tampil_7(); digit_8(); tunda();
} else { // Input is 1, display NAMA ("TTARIPAN" as per original else block)
tampil_t(); digit_1(); tunda();
tampil_t(); digit_2(); tunda(); // Original code displays 'T' 'T'
// If you want "TASRIPAN", change the line above to:
// tampil_a(); digit_2(); tunda();
tampil_a(); digit_3(); tunda();
tampil_r(); digit_4(); tunda();
tampil_i(); digit_5(); tunda();
tampil_p(); digit_6(); tunda();
tampil_a(); digit_7(); tunda();
tampil_n(); digit_8(); tunda();
}
}