#include <TM1637Display.h>
#include <Keypad.h>
#define CLK 2
#define DIO 3
TM1637Display display(CLK, DIO);
const byte ROWS = 4; // Jumlah baris keypad
const byte COLUMNS = 4; // Jumlah kolom keypad
char keys[ROWS][COLUMNS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; // Pin Arduino yang terhubung ke baris keypad
byte columnPins[COLUMNS] = {13, 12, 11, 10}; // Pin Arduino yang terhubung ke kolom keypad
Keypad keypad = Keypad(makeKeymap(keys), rowPins, columnPins, ROWS, COLUMNS);
int TRIGGER = 4;
int ECHO = 5;
#define MAX_DISTANCE 1000
unsigned long previousMillis = 0;
const long interval = 1000; // 1 second interval
int currentDisplay = 0; // 0 for default, 1 for ultrasonic, 2 for digital clock
int hours = 12;
int minutes = 0;
long duration,distance;
void setup() {
display.setBrightness(0x0a); // set the brightness to a lower level
pinMode(TRIGGER, OUTPUT);
pinMode(ECHO, INPUT);
Serial.begin(9600);
}
void loop() {
char key = keypad.getKey();
if (key != NO_KEY) {
switch (key) {
case 'A':
currentDisplay = 1;
break;
case 'B':
currentDisplay = 2;
break;
case 'C':
hours = (hours + 1) % 24;
break;
case 'D':
minutes = (minutes + 1) % 60;
break;
default:
currentDisplay = 0;
break;
}
}
switch (currentDisplay) {
case 0:
displayDefault();
break;
case 1:
displayUltrasonic();
// Tidak perlu break di sini karena kita ingin menjalankan displayUltrasonic() saja tanpa keluar dari switch
break;
case 2:
displayDigitalClock();
break;
default:
// Ini akan dijalankan jika currentDisplay tidak cocok dengan kasus yang diberikan
break;
}
// program dibawah ini agar trigger memancarakan suara ultrasonic
digitalWrite(TRIGGER, LOW);
delayMicroseconds(8);
digitalWrite(TRIGGER, HIGH);
delayMicroseconds(8);
digitalWrite(TRIGGER, LOW);
delayMicroseconds(8);
duration = pulseIn(ECHO, HIGH); // menerima suara ultrasonic
distance = (duration / 2) / 29.1 ; // mengubah durasi menjadi jarak (cm)
// menampilkan jarak pada Serial Monitor
}
void displayDefault() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
display.showNumberDecEx(1200, 0b11100000, true); // Display default number
}
}
void displayUltrasonic() {
if (distance == 0 || distance > MAX_DISTANCE) {
Serial.println("Out of range");
display.showNumberDec(0000); // Tampilkan angka yang menunjukkan diluar jarak pengukuran yang valid
} else {
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
display.showNumberDec(distance);
}
delay(100); // Sesuaikan delay antara pengukuran sesuai kebutuhan
}
void displayDigitalClock() {
display.showNumberDecEx(hours * 100 + minutes, B11111100, true);
}