Timer Arduino
1. Rangkai komponen sesuai percobaan dan kondisi yang dipilih.
2. Buat program menggunakan Arduino IDE.
3. Transfer program yang telah dibuat ke Arduino yang ada di Proteus.
4. Uji coba program di simulasi sesuai dengan kondisi yang diinginkan.
5. Proses selesai setelah uji coba berhasil dilakukan.
2. Hardware dan Diagram Blok
[Kembali]
a. Hardware
b. Diagram Blok
Prinsip Kerja
4. Flowcharth dan Listing Program [Kembali]
Dalam percobaan 3 dengan kondisi 3 yang dijelaskan, rangkaian dirancang untuk memberikan output yang berbasis pada input dari tiga tombol dipswitch. Komponen-komponen yang terlibat dalam rangkaian ini meliputi Arduino sebagai otak pengendali, display 7-Segment dengan dua digit untuk menampilkan angka, dipswitch sebagai input, dan resistor untuk mengatur arus.
Tiga dipswitch terhubung ke pin A0-A3 pada Arduino, menyediakan input yang dapat diinterpretasikan oleh mikrokontroler. Output dari Arduino kemudian ditransmisikan ke display 7-Segment melalui koneksi ke pin 4-13. Ketika ketiga dipswitch diaktifkan, Arduino memberikan output yang mengatur display 7-Segment untuk menghitung maju dari 0 hingga 10.
Namun, ada perubahan penting yang harus diperhatikan. Display 7-Segment ini hanya mampu menampilkan satu digit pada satu waktu. Oleh karena itu, setelah mencapai angka 10, hitungan di-reset kembali ke 0. Dengan demikian, siklus penghitungan dari 0 hingga 10 terus berulang setiap kali tiga dipswitch diaktifkan.
Dengan menggabungkan komponen-komponen ini, rangkaian menciptakan respons yang terkoordinasi terhadap input yang diberikan, memungkinkan pengguna untuk memantau dan mengamati perubahan pada display 7-Segment seiring dengan aktivasi dan deaktivasi dipswitch. Ini memberikan pengalaman interaktif yang melibatkan pengguna dengan perangkat dan menunjukkan kemampuan Arduino dalam memproses input dan menghasilkan output yang sesuai.
a. Flowcharth
b. Listing Program
#define a 6
#define b 7
#define c 8
#define d 9
#define e 10
#define f 11
#define g 12
#define dp 13
#define D1 4
#define D2 5
#define Dsw1 A0
#define Dsw2 A1
#define Dsw3 A2
#define Dsw4 A3
bool sw1,sw2,sw3,sw4;
int segments[] = {a, b, c, d, e, f, g};
byte digitPatterns[10][7] = {
{1, 1, 1, 1, 1, 1, 0}, // 0
{0, 1, 1, 0, 0, 0, 0}, // 1
{1, 1, 0, 1, 1, 0, 1}, // 2
{1, 1, 1, 1, 0, 0, 1}, // 3
{0, 1, 1, 0, 0, 1, 1}, // 4
{1, 0, 1, 1, 0, 1, 1}, // 5
{1, 0, 1, 1, 1, 1, 1}, // 6
{1, 1, 1, 0, 0, 0, 0}, // 7
{1, 1, 1, 1, 1, 1, 1}, // 8
{1, 1, 1, 1, 0, 1, 1} // 9
};
void setup() {
for (int i = 0; i < 7; i++) {
pinMode(segments[i], OUTPUT);
}
pinMode(dp, OUTPUT);
pinMode(D1, OUTPUT);
pinMode(D2, OUTPUT);
pinMode(Dsw1, INPUT_PULLUP);
pinMode(Dsw2, INPUT_PULLUP);
pinMode(Dsw3, INPUT_PULLUP);
pinMode(Dsw4, INPUT_PULLUP);
Serial.begin(9600);
}
void number(int display) {
if (display >= 0 && display <= 9) {
for (int i = 0; i < 7; i++) {
digitalWrite(segments[i], digitPatterns[display][i]);
}
}
}
void loop() {
int sw1 = digitalRead(Dsw1);
int sw2 = digitalRead(Dsw2);
int sw3 = digitalRead(Dsw3);
int sw4 = digitalRead(Dsw4);
static int digit = 1; // Digit yang sedang ditampilkan (1 atau 2)
static int count = 0; // Counter untuk digit
static unsigned long lastTime = 0; // Waktu terakhir pembacaan tombol
if (sw1 == LOW) {
if (millis() - lastTime > 1000) { // Debouncing
lastTime = millis();
count++;
if (count > 9) {
count = 0;
}
if (digit == 1) {
digitalWrite(D1, HIGH);
digitalWrite(D2, LOW);
number(count);
digit = 2;
} else {
digitalWrite(D1, LOW);
digitalWrite(D2, HIGH);
number(count);
digit = 1;
}
}
} else if (sw2 == LOW) {
if (millis() - lastTime > 1000) { // Debouncing
lastTime = millis();
digitalWrite(D1, HIGH);
digitalWrite(D2, LOW);
for (int i = 9; i >= 0; i--) {
number(i);
delay(1000); // Delay agar Anda bisa melihat perubahan digit
}
}
} else if (sw3 == LOW && sw1 == LOW && sw2 == LOW) { // Kondisi ketika ketiga switch aktif
if (millis() - lastTime > 1000) { // Debouncing
lastTime = millis();
count++;
if (count > 10) {
count = 0;
}
if (digit == 1) {
digitalWrite(D2, LOW);
digitalWrite(D1, HIGH);
number(count);
digit = 2;
} else {
digitalWrite(D2, HIGH);
digitalWrite(D1, LOW);
number(count);
digit = 1;
}
}
}
}
#define b 7
#define c 8
#define d 9
#define e 10
#define f 11
#define g 12
#define dp 13
#define D1 4
#define D2 5
#define Dsw1 A0
#define Dsw2 A1
#define Dsw3 A2
#define Dsw4 A3
bool sw1,sw2,sw3,sw4;
int segments[] = {a, b, c, d, e, f, g};
byte digitPatterns[10][7] = {
{1, 1, 1, 1, 1, 1, 0}, // 0
{0, 1, 1, 0, 0, 0, 0}, // 1
{1, 1, 0, 1, 1, 0, 1}, // 2
{1, 1, 1, 1, 0, 0, 1}, // 3
{0, 1, 1, 0, 0, 1, 1}, // 4
{1, 0, 1, 1, 0, 1, 1}, // 5
{1, 0, 1, 1, 1, 1, 1}, // 6
{1, 1, 1, 0, 0, 0, 0}, // 7
{1, 1, 1, 1, 1, 1, 1}, // 8
{1, 1, 1, 1, 0, 1, 1} // 9
};
void setup() {
for (int i = 0; i < 7; i++) {
pinMode(segments[i], OUTPUT);
}
pinMode(dp, OUTPUT);
pinMode(D1, OUTPUT);
pinMode(D2, OUTPUT);
pinMode(Dsw1, INPUT_PULLUP);
pinMode(Dsw2, INPUT_PULLUP);
pinMode(Dsw3, INPUT_PULLUP);
pinMode(Dsw4, INPUT_PULLUP);
Serial.begin(9600);
}
void number(int display) {
if (display >= 0 && display <= 9) {
for (int i = 0; i < 7; i++) {
digitalWrite(segments[i], digitPatterns[display][i]);
}
}
}
void loop() {
int sw1 = digitalRead(Dsw1);
int sw2 = digitalRead(Dsw2);
int sw3 = digitalRead(Dsw3);
int sw4 = digitalRead(Dsw4);
static int digit = 1; // Digit yang sedang ditampilkan (1 atau 2)
static int count = 0; // Counter untuk digit
static unsigned long lastTime = 0; // Waktu terakhir pembacaan tombol
if (sw1 == LOW) {
if (millis() - lastTime > 1000) { // Debouncing
lastTime = millis();
count++;
if (count > 9) {
count = 0;
}
if (digit == 1) {
digitalWrite(D1, HIGH);
digitalWrite(D2, LOW);
number(count);
digit = 2;
} else {
digitalWrite(D1, LOW);
digitalWrite(D2, HIGH);
number(count);
digit = 1;
}
}
} else if (sw2 == LOW) {
if (millis() - lastTime > 1000) { // Debouncing
lastTime = millis();
digitalWrite(D1, HIGH);
digitalWrite(D2, LOW);
for (int i = 9; i >= 0; i--) {
number(i);
delay(1000); // Delay agar Anda bisa melihat perubahan digit
}
}
} else if (sw3 == LOW && sw1 == LOW && sw2 == LOW) { // Kondisi ketika ketiga switch aktif
if (millis() - lastTime > 1000) { // Debouncing
lastTime = millis();
count++;
if (count > 10) {
count = 0;
}
if (digit == 1) {
digitalWrite(D2, LOW);
digitalWrite(D1, HIGH);
number(count);
digit = 2;
} else {
digitalWrite(D2, HIGH);
digitalWrite(D1, LOW);
number(count);
digit = 1;
}
}
}
}
5. Kondisi
[Kembali]
Percobaan 3 Kondisi 3
Ketika 3 switch aktif 7-Segment menghitung maju hingga 10
5. Video Simulasi [Kembali]
HTML klik disini
Simulasi klik disini
Gambar Simulasi klik disini
Video Simulasi klik disini
Listing Program klik disini