LAPORAN AKHIR 2 MODUL III





1. Prosedur  [Kembali]

  1. Rangkai komponen sesuai percobaan dan yang dipilih.
  2. Buat program menggunakan Arduino IDE.
  3. Run program yang telah dibuat ke Arduino Uno.
  4. Uji coba program pada rangkaian percobaan sesuai dengan kondisi yang diinginkan.
  5. Proses selesai setelah uji coba berhasil dilakukan.

2. Hardware dan Diagram Blok [Kembali]

a. Arduino

 


b. DIPSWITCH

c. Dual Seven Segment

d. Kabel Jumper

3. Rangkaian Simulasi dan Prinsip Kerja  [Kembali]


    Terdapat dua buah Arduino, DIPSWITCH, dan Dual Seven Segment. Arduino berperan sebagai Master dan Slave, Master Arduino dihubungkangn dengan input DIPSWITCH. Sedangkan Slave Arduino dihubungkan dengan output Dual Seven Segment. Kedua Arduino dihubungkan dengan komunikasi SPI, dan pin yang digunakan adalah MOSI, MISO, SS, dan SCK.
      Listing program dibuat dengan kondisi Dual Seven Segment akan counter angka 9 sampai 0 dengan selang seling. Setelah program diupload, maka setiap switch yang digeser ke posisi ON maka akan mempengaruhi output dengan counting, dimulai dari 9 sampai 0.

4. Flowchart dan Listing Program [Kembali]

 Flowchart

a. Master

b. Slave

Listing Program

a. Master

 

 //Master Arduino

#include<SPI.h> //Library for SPI

int dip[] = {2,3,4,5,6,7};

int dipvalue[] = {};

void setup (){

 Serial.begin(9600); //Starts Serial Communication at Baud Rate 115200

 for(int i = 0; i < 6; i++){

 pinMode(dip[i], INPUT_PULLUP);

 }

 SPI.begin(); //Begins the SPI commnuication

 SPI.setClockDivider(SPI_CLOCK_DIV8); //Sets clock for SPI communication at 8 (16/8=2Mhz)

 digitalWrite(SS,HIGH); // Setting SlaveSelect as HIGH (So master doesnt connnect with slave)

}

void loop(void){

 byte Mastersend;

 int x = 1;

 for(int i = 0; i < 6; i++){

 dipvalue[i] = digitalRead(dip[i]);

 if(dipvalue[i] == LOW){

 x = dip[i];

 }

 }

 digitalWrite(SS, LOW);

Mastersend = x;

 Serial.println(Mastersend);

 SPI.transfer(Mastersend); //Send the mastersend value to slave also receives value from slave

 delay(1000);

}

 

b. Slave

 

#include <SPI.h>

 

const int segmentPins[] = {9, 8, 7, 6, 5, 4, 3, 2};

volatile boolean received = false;

volatile byte Slavereceived;

int index;

int currentNumber = 9; // Inisialisasi angka saat ini

int switchCount = 0; // Counter untuk menghitung jumlah switch aktif

 

void setup() {

  Serial.begin(9600);

 

  for (int i = 0; i < 8; i++) {

    pinMode(segmentPins[i], OUTPUT);

  }

 

  SPCR |= _BV(SPE); // Mengaktifkan SPI dalam mode Slave

  SPI.attachInterrupt(); // Menetapkan interrupt untuk komunikasi SPI

}

 

ISR (SPI_STC_vect) { // Fungsi rutin interrupt

  Slavereceived = SPDR; // Menyimpan nilai yang diterima dari master

  received = true; // Set nilai received menjadi true

}

 

#define D1 A0

#define D2 A1

 

void loop() {

  Serial.println(Slavereceived);

 

  if (received) {

    if (Slavereceived == 1) { // Jika switch aktif

      switchCount++;

     

      if (switchCount >= 3) { // Jika sudah terdeteksi 3 switch aktif

        switchCount = 0; // Reset counter

        currentNumber = 9; // Mulai perhitungan dari 9 lagi

      }

    }

    received = false; // Reset nilai received

   

    displayCharacter(currentNumber); // Menampilkan angka saat ini di 7 segment

    delay(1000); // Delay sebelum menampilkan angka selanjutnya

   

    currentNumber--; // Mengurangi angka saat ini untuk perhitungan selanjutnya

    if (currentNumber < 0) { // Jika mencapai 0, kembali ke 9

      currentNumber = 9;

    }

  }

}

 

void displayCharacter(int ch) {

  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

  };

 

  if ((ch >= 0 && ch <= 9)) {

    // Mendapatkan indeks digit (0-9) dari karakter

    int index = ch;

    // Menulis pola ke pin-pins segment

    for (int i = 0; i < 7; i++) {

      digitalWrite(segmentPins[i], patterns[index][i]);

    }

  }

} 


5. Kondisi [Kembali]
Dual Seven Segment akan counter angka 9 sampai 0 dengan selang seling disetiap tombol dipswicth yang digeser ke posisi ON.

6. Video Demo [Kembali]


7. Link Download [Kembali]
Download HTML [Klik di sini]
Download file rangkaian [Klik di sini]
Download video rangkaian [Klik di sini]
Download program Arduino [Klik di sini]
Download datasheet Arduino [Klik di sini]
Download datasheet Dual Seven Segment [Klik di sini]
Download datasheet DIPSWITCH [Klik di sini]

Tidak ada komentar:

Posting Komentar

DAFTAR ISI 1. Pendahuluan 2. Tujuan 3. Alat dan Bahan 4. Dasar Teori 5. Percobaan Percobaan ... Tugas Pendahulu...