Tugas Pendahuluan 1 (M3)

  

[KEMBALI KE MENU SEBELUMNYA]





1. Prosedur  [back]

    1. Siapkan alat dan bahan yaitu dengan komponen yaitu Arduino Uno, 
        Dipswitch, dan Seven Segment.
    2. Rangkai sesuai gambar percobaan.
    3, Rancang kerja rangkaian sesuai kondisi.
    4. Jalankan simulasi.

2. Hardware dan diagram blok [back]
- Arduino Uno

- Dipswitch 


- Seven Segment



  • Diagram Blok :



3. Rangkaian Simulasi dan Prinsip Kerja  [back]
  • Rangkaian Simulasi :

  • Prinsip Kerja:
    Pada percobaan kali ini menggunakan alat dan bahan seperti dipswitch (input), Arduino Uno (Master), Arduino Uno (Slave), dan seven segment (output). Pada rangkaian ini, dipswitch dihubungkan dengan Master Arduino dan output sevent segment terhubung dengan slave arduino. Rangkaian ini menggunakan komunikasi SPI (Series Pheriperal Interface) Arduino, yaitu menggunakan pin MISO, MOSI, SCK, dan SS yang terhubung antara Master Arduino dan Slave Arduino. Seven segment akan menampilkan karakter angka sesuai dengan kondisi dipswitch yang aktif berdasarkan program. 
    Pada saat setiap dipswitch di aktifkan, maka master arduino akan mengirimkan data menuju slave arduino secara paralel dan slave arduino akan menerima data sesuai program dan ditampilkan pada output seven segment. Dan pada percobaan kondisi ini pada saat 2 switch aktif muncul angka berbeda pada digit ke 1 seven segment, dan pada saat 3 switch aktif muncul angka berbeda pada digit ke 2.


4. Flowchart dan Listing Program  [back]
  • Flowchart :
- Master Arduino


- Slave Arduino


  • Listing Program :
- Master Arduino
// MASTER
#include <SPI.h>

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

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;
  int digit1 = 0;
  int digit2 = 0;

  int count1 = 0; // Menghitung jumlah switch aktif untuk digit pertama
  int count2 = 0; // Menghitung jumlah switch aktif untuk digit kedua

  for (int i = 0; i < 8; i++) {
    dipvalue[i] = digitalRead(dip[i]);
    if (dipvalue[i] == LOW) {
      if (i < 4) {
        count1++;
      } else {
        count2++;
      }
    }
  }

  if (count1 == 2) { // Jika ada 2 switch aktif
    digit1 = 1;      // Digit pertama = 1
  } else if (count1 == 3) { // Jika ada 3 switch aktif
    digit1 = 3;      // Digit pertama = 3
  }

  if (count2 == 2) { // Jika ada 2 switch aktif
    digit2 = 2;      // Digit kedua = 2
  } else if (count2 == 3) { // Jika ada 3 switch aktif
    digit2 = 4;      // Digit kedua = 4
  }

  int x = digit1 * 10 + digit2;
  digitalWrite(SS, LOW);
  Mastersend = x;
  Serial.println(Mastersend);
  SPI.transfer(Mastersend);
  delay(100);
}

// SLAVE remains unchanged


- Slave Arduino    
//SLAVE
#include <SPI.h>

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

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 loop() {
  if (received) {
    int digit1 = Slavereceived / 10;
    int digit2 = Slavereceived % 10;

    displayCharacter(digit1, D1);
    delay(100);

    displayCharacter(digit2, D2);
    delay(100);
    received = false;
  }
}

void displayCharacter(int ch, int digitPin) {
  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) {
    int index = ch;
    for (int i = 0; i < 7; i++) {
      digitalWrite(segmentPins[i], patterns[index][i]);
    }
    digitalWrite(digitPin, HIGH);
  }
}


6. Kondisi  [back]
Percobaan 2 Kondisi 1 :
Setiap 2 Switch aktif muncul angka berbeda pada digit ke 1, Setiap 3 Switch aktif muncul angka berbeda pada digit ke 2
  
7. Video Simulasi  [back]





8. Download File  [back]
Download Video percobaan Di Sini
Download Rangkaian percobaan Di Sini
Download Library Arduino Uno Di Sini
Download Datasheet Arduino Uno Di Sini
Download Datasheet Seven Segment Di Sini
Download HTML Di Sini

Tidak ada komentar:

Posting Komentar