Tugas Pendahuluan 2

 [KEMBALI KE MENU SEBELUMNYA]


Percobaan 2 Kondisi 2
Komunikasi SPI Menggunakan Arduino

1. Prosedur [Kembali]

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







Prinsip Kerja :

    Pada rangkaian tersebut, terdapat 2 arduino yaitu arduino master dan arduino slave. Dimana arduino slave terhubung ke output yaitu 7 segmen dan arduino master terhubung ke input yaitu 7-Segmen.
    Pada rangkain tersebut ketika 1 switch aktif akan muncul angka pada 1 digit yaitu digit 1. dan ketika ada switch yang aktif atau dalam keadaan high maka akan muncul angka pada kedua digit yaitu digit 1 dan digit 2.


Flowchart:




Arduino Master




Arduino Slave




Listing Program :
//Master
#include <SPI.h>
int dip[] = {2, 3, 4, 5, 6, 7, 8, 9};
int dipvalue[] = {};
int dipCount = 0; // Variable to count active dip switches

void setup() {
  Serial.begin(9600);
  for (int i = 0; i < 8; i++) {
    pinMode(dip[i], INPUT_PULLUP);
  }
  SPI.begin();
  SPI.setClockDivider(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++; // Increment dip switch count if active
    }
  }

  if (dipCount == 1) {
    Mastersend = 1; // Set Mastersend to 1 if only one dip switch is active
  } else if (dipCount == 4) {
    Mastersend = 4; // Set Mastersend to 4 if four dip switches are active
  }

  dipCount = 0; // Reset dip switch count for next iteration

  digitalWrite(SS, LOW);
  SPI.transfer(Mastersend);
  delay(100);
}


//Slave
#include <SPI.h>

#define a 9
#define b 8
#define c 7
#define d 6
#define e 5
#define f 4
#define g 3
#define dp 2
#define D1 A1
#define D2 A0

const int segmentPins[] = {a, b, c, d, e, f, g}; // Koneksi digit 1 ke pin 1, digit 2 ke pin 0

volatile boolean received = false;
volatile byte Slavereceived;

void setup() {
  pinMode(D1, OUTPUT);
  pinMode(D2, OUTPUT);
  Serial.begin(9600);
  for (int i = 0; i < 7; 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); // Delay kecil untuk memastikan penampilan stabil
}

void loop() {
  if (received) {
    if (Slavereceived == 1) {
      displayCharacter(8, D1); // Menampilkan angka 1 hanya pada digit 1
      displayCharacter(0, D2); // Matikan digit 2
    } else if (Slavereceived == 4) {
      displayCharacter(4, D1); // Menampilkan angka 4 pada kedua digit
      displayCharacter(4, D2);
    }
    delay(100);
    received = false;
  }
}


4. Kondisi [Kembali]

Setiap 1 switch aktif muncul angka berbeda pada digit 1, setiap switch aktif muncul angka pada kedua digit

HTML klik disini  
Rangkaian Simulasi  klik disini
Video Simulasi   klik disini
Listing Program Master klik disini
Listing Program Slave klik disini

Tidak ada komentar:

Posting Komentar