Tugas Pendahuluan 2




1. Foto Hardware dan Diagram Blok [Kembali]

        1. Arduino Uno




        2. Dipswitch



        3. Display 7 Segment 2 Digit



        4. Resistor



   

Diagram Blok:




2. Prosedur Percobaan [Kembali]

  • Rangkai semua komponen 
  • Buat program di aplikasi arduino IDE
  • Setelah selesai masukkan program ke arduino 
  • Jalankan program pada simulasi dan cobakan dengan modul


Prinsip Kerja

Pada percobaan 2 kondisi 2, komponen utama dari rangakainnya adalah dipswitch sebagai input, dual seven segment sebagai output, dan arduino uno sebagai mikrokontroler yang digunakan untuk menyimpan dan menjalankan program.

Pada rangkaian, digunakan 2 arduino uno yang masing-masingnya berfungsi sebagai master dan slave. Arduino master dihubungkan dengan dipswitch sebagai input, sementara arduino slave dihubungkan dengan display 7 segment sebagai output.

Arduino membaca input total dipswitch yang aktif. Setiap 1 switch aktif muncul, arduino mengirimkan Mastersend 1 ke arduino slave. Arduino slave yang menerima data tersebut memberi output pattern membentuk karakter 1 pada digit ke 1 pada display 7 segment. Dan begitupula saat 4 switch aktif, maka angka 4 akan muncul di kedua display. 

4. Flowchart dan Listing Program [Kembali]

Master


 Slave


Listing Program Master:

#include <SPI.h> int dip[] = {2, 3, 4, 5, 6, 7, 8, 9}; int dipvalue[] = {}; //array untuk menyimpan nilai-nilai yang dibaca dari dip switch int dipCount = 0; // variabel menghitung ds yang aktif void setup() { //Serial.begin(9600); for (int i = 0; i < 8; i++) { pinMode(dip[i], INPUT_PULLUP); } SPI.begin(); SPI.setClockDivider(SPI_CLOCK_DIV8); //Mengatur pembagian clock SPI menjadi SPI_CLOCK_DIV8 digitalWrite(SS, HIGH); } void loop() { byte Mastersend = 0; for (int i = 0; i < 8; i++) { dipvalue[i] = digitalRead(dip[i]); if (dipvalue[i] == LOW) { dipCount++; } } if (dipCount == 1) { Mastersend = 1; //menyimpan nilai yang akan dikirimkan melalui protokol SPI } else if (dipCount == 4) { Mastersend = 4; } dipCount = 0; // Reset dip switch count for next iteration digitalWrite(SS, LOW); //memulai komunikasi SPI dengan perangkat lain SPI.transfer(Mastersend); //mengirim data jumlah ds yang aktif delay(100); }


Listing Program Slave:

#include #define D1 A0 #define D2 A1 const int segmentPins[] = {9, 8, 7, 6, 5, 4, 3, 2}; volatile boolean received = false; volatile byte Slavereceived; void setup() { pinMode(D1, OUTPUT); pinMode(D2, OUTPUT); //Serial.begin(9600); for (int i = 0; i < 8; i++) { pinMode(segmentPins[i], OUTPUT); } SPCR |= _BV(SPE); SPI.attachInterrupt(); } ISR(SPI_STC_vect) { Slavereceived = SPDR; received = true; } void displayCharacter(int digit, int digitPosition) { byte patterns[10][7] = { {0, 0, 0, 0, 0, 0, 1}, // 0 {1, 0, 0, 1, 1, 1, 1}, // 1 {0, 0, 1, 0, 0, 1, 0}, // 2 {0, 0, 0, 0, 1, 1, 0}, // 3 {1, 0, 0, 1, 1, 0, 0}, // 4 {0, 1, 0, 0, 1, 0, 0}, // 5 {0, 1, 0, 0, 0, 0, 0}, // 6 {0, 0, 0, 1, 1, 1, 1}, // 7 {0, 0, 0, 0, 0, 0, 0}, // 8 {0, 0, 0, 0, 1, 0, 0} // 9 }; // Write the pattern to the segment pins for (int i = 0; i < 7; i++) { digitalWrite(segmentPins[i], patterns[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); } delay(5); } void loop() { if (received) { if (Slavereceived == 1) { displayCharacter(1, D1); // Menampilkan angka 1 hanya pada digit 1 } else if (Slavereceived == 4) { // Menampilkan angka 4 pada kedua digit displayCharacter(4, D1); displayCharacter(4, D2); } delay(100); received = false; } }


5. Kondisi [Kembali]

    Percobaan 2 Kondisi 2 : "Setiap 1 switch aktif muncul angka berbeda pada digit ke 1, setiap Switch aktif muncul angka pada kedua digit"








Posting Komentar

0 Komentar