Chrome Pointer

LA 2 M2 Prak Up Uc

Percobaan II

1. Prosedur [Kembali]

1. Rangkai rangkaian di proteus sesuai dengan kondisi percobaan.
2. Tulis program untuk arduino di software Arduino IDE.
3. Compile program tadi, lalu upload ke dalam arduino.
4. Setelah program selesai di upload, jalankan simulasi rangkaian pada proteus.

2. Hardware dan Diagram Blok [Kembali]

Hardware:

1. Arduino Uno




2. Dip Switch




3. 7 Segment 2 Digit



4. Resistor



Block Diagram:


3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]




Rangkaian ini terdiri dari Arduino, dua display 7-segment, Dipswitch, dan Resistor. Dipswitch digunakan untuk memasukkan data ke Arduino melalui pin A0-A3, dan Arduino akan menampilkan hasil penghitungan pada dua display 7-segment melalui pin 4-13.

Ketika dua Dipswitch aktif, Arduino akan menghitung mundur dari 15 ke 0, dan kemudian kembali ke 15. Karena display 7-segment hanya bisa menampilkan satu digit, program di Arduino dirancang untuk menangani hal ini. Ketika penghitungan mencapai 10 atau lebih, display 7-segment sebelah kiri akan menunjukkan angka puluhan, dan display 7-segment sebelah kanan akan menunjukkan angka satuan. Kedua display akan bergantian menampilkan angka dengan jeda waktu singkat.

Jika penghitungannya di bawah 10, display 7-segment sebelah kiri akan dimatikan, dan hanya display 7-segment sebelah kanan yang akan menunjukkan angka.

Jika Dipswitch yang aktif lebih dari 2 atau kurang dari 2, proses penghitungan tidak akan terjadi.


Flowchart :



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

int segments[] = {a, b, c, d, e, f, g};
byte digitPatterns[16][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
    {0, 0, 0, 0, 0, 0, 1}, // dp
    {0, 0, 0, 0, 0, 0, 0}, // empty
};

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 displayDigit(int digit, int digitPosition) {
    for (int i = 0; i < 7; i++) {
        digitalWrite(segments[i], digitPatterns[digit][i]);
    }
    // Aktifkan digit yang sesuai
    if (digitPosition == D1) {
        digitalWrite(D1, HIGH);
        digitalWrite(D2, LOW);
    } else if (digitPosition == D2) {
        digitalWrite(D1, LOW);
        digitalWrite(D2, HIGH);
    }
}

void displayNumber(int number) {
    if (number < 10) {
        digitalWrite(D1, HIGH);
        digitalWrite(D2, LOW);
        displayDigit(0, D2); // Menampilkan angka 0 pada digit kedua (D2)
        displayDigit(number, D1); // Menampilkan angka pada digit pertama (D1)
    } else {
        digitalWrite(D1, HIGH);
        digitalWrite(D2, HIGH);
        int tensDigit = number / 10; // Digit puluhan
        int unitsDigit = number % 10; // Digit satuan
        displayDigit(tensDigit, D2); // Menampilkan digit puluhan pada digit kedua (D2)
        delay(100); // Delay untuk menampilkan digit puluhan
        displayDigit(unitsDigit, D1); // Menampilkan digit satuan pada digit pertama (D1)
    }
    delay(1000); // Delay agar Anda bisa melihat perubahan digit
}

void loop() {
    bool sw1 = digitalRead(Dsw1) == LOW;
    bool sw2 = digitalRead(Dsw2) == LOW;
    bool sw3 = digitalRead(Dsw3) == LOW;
    bool sw4 = digitalRead(Dsw4) == LOW;

    int pressedCount = sw1 + sw2 + sw3 + sw4;

    static unsigned long lastTime = 0; // Waktu terakhir pembacaan tombol
    static int count = 15; // Counter untuk digit

    if (pressedCount == 2) {
        if (millis() - lastTime > 1000) { // Debouncing
            lastTime = millis();
            if (count >= 10) { // Angka 10 hingga 15
                displayNumber(count);
            } else { // Angka 0 hingga 9
                displayDigit(0, D2); // Menampilkan angka 0 pada digit kedua (D2)
                displayDigit(count, D1); // Menampilkan angka pada digit pertama (D1)
                delay(1000); // Delay agar Anda bisa melihat perubahan digit
            }
            count--;
            if (count < 0) {
                count = 15;
            }
        }
    } else {
        count = 15; // Reset count jika tidak ada dua tombol yang ditekan
    }
}


Percobaan 3








Tidak ada komentar:

Posting Komentar