Senin, 29 April 2024


TP 1: Percobaan 2 Kondisi 6 



MODUL 3
PERCOBAAN 2 KONDISI 6

1. Prosedur
 [Kembali]

1. Rangkai semua komponen sesuai kondisi yang dipilih
2. Buat program di aplikasi arduino IDE
3. Setelah selesai masukkan program ke arduino di proteus
4. Jalankan program pada simulasi dan cobakan sesuai dengan modul dan kondisi
5. Selesai

2. Hardware dan diagram blok [Kembali]
      a. hardware



1. Arduino Uno


spesifikasi: 

2. Dipswitch
2. Dipswitch
spesifikasi:

3. Seven Segment





            b. Digram Blok




3. Rangkaian Simulasi dan Prinsip kerja [Kembali]

Gambar Rangkaian Sebelum Disimulasikan


Gambar Rangkaian Setelah Disimulasikan




PRINSIP KERJA
Master:
Master Arduino memiliki tanggung jawab untuk membaca keadaan tombol dan mengirimkan pesan ke Arduino slave berdasarkan keadaan tersebut. Setiap kali loop dijalankan, Master Arduino membaca tombol-tombol yang terhubung, mengidentifikasi dua tombol yang ditekan, dan mengirimkan dua digit berbeda ke Arduino slave melalui SPI. Ketika dua tombol telah dipilih, nilai dari tombol-tombol tersebut disimpan dalam variabel `digit1` dan `digit2`. Setelah itu, Master Arduino mengirimkan kedua digit tersebut ke slave melalui koneksi SPI. Kemudian, Master Arduino menunggu selama satu detik sebelum mengulangi proses tersebut.

Slave:
Arduino slave, di sisi lain, bertanggung jawab untuk menerima pesan dari Master Arduino dan menampilkan dua digit yang diterima secara bergantian pada display. Ketika pesan diterima melalui koneksi SPI, ISR akan diaktifkan. Di dalam ISR, slave menerima dua byte secara berurutan dari master dan menyimpannya dalam variabel `Slavereceived1` dan `Slavereceived2`. Selanjutnya, dalam loop, slave memanggil fungsi `displayCharacter()` dengan dua nilai yang diterima dari master untuk menampilkan dua digit secara bergantian pada display. Setelah menampilkan digit pertama, slave menunggu sebentar sebelum menampilkan digit kedua. Proses ini berlanjut sehingga display pada slave akan menampilkan dua digit yang dikirim dari master secara bergantian saat dua tombol aktif pada master.


4. FlowChart [Kembali]

a. Listing Program 

Master

//Master Arduino
#include<SPI.h> //Library for SPI
int dip[] = {2,3,4,5,6,7,8,9};
int dipvalue[] = {};
void setup (){
Serial.begin(9600); //Starts Serial Communication at Baud Rate 115200
for(int i = 0; i < 8; 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;
  int activeSwitches = 0; // variabel untuk menghitung jumlah saklar yang aktif

  // Membaca status saklar dan menghitung berapa yang aktif
  for (int i = 0; i < 8; i++) {
    dipvalue[i] = digitalRead(dip[i]);
    if (dipvalue[i] == LOW) {
      x = dip[i];
      activeSwitches++;
    }
  }

  if (activeSwitches == 2) {
      digitalWrite(SS, LOW);
      Mastersend = 2;
      Serial.println(Mastersend);
      SPI.transfer(Mastersend);
      delay(100);
    }
}


Slave
#include <SPI.h>

const int segmentPins[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
volatile boolean received = false;
volatile byte Slavereceived;
int index;
int dg1 = A0;
int dg2 = A1;

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)) {
    // Get the digit index (0-9) from the character
    int index = ch;
    // Write the pattern to the segment pins
    for (int i = 0; i < 7; i++) {
      digitalWrite(segmentPins[i], patterns[index][i]);
    }
  }
}

void setup() {
  Serial.begin(9600);
  for (int i = 0; i < 8; i++) {
    pinMode(segmentPins[i], OUTPUT);
  }
  pinMode(dg1, OUTPUT);
  pinMode(dg2, OUTPUT);
  SPCR |= _BV(SPE); // Turn on SPI in Slave Mode
  SPI.attachInterrupt(); // Interrupt ON is set for SPI communication
}

ISR (SPI_STC_vect) { // Interrupt routine function
  Slavereceived = SPDR; // Value received from master is stored in variable Slavereceived
  received = true; // Sets received as True
}

void loop() {
  if (received) { // Logic to SET LED ON OR OFF depending upon the value received from master
    Serial.println(Slavereceived);
    if (Slavereceived == 2) {
      for(int i=0;i<=9;i++){
        if(i % 2 == 0 ){
          digitalWrite(dg1,HIGH);
          digitalWrite(dg2,LOW);
          displayCharacter(i);
          delay (100);
        }
        else{
          digitalWrite(dg1, LOW);
          digitalWrite(dg2, HIGH);
          displayCharacter(i);
          delay (100);
        }
      }
    }
    received = false; // Reset received flag
  }
}


b. Flowchart
Arduino Master: 

Arduino Slave: 


                                      
5. Kondisi [Kembali]

Kondisi  →Percobaan 2 Kondisi 6

Setiap 2 switch yang aktif akan melakukan counting 0 - 9 pada digit 1 dan 2 secara berseling

6. Video Simulasi [Kembali]




7. Download File [Kembali]
Download HMTL Klik disini
Download Simulasi Rangkaian Klik disini
Download Program Arduino Mater Klik disini
Download Program Arduino Slave Klik disini
Download Video Simulasi Klik disini
Download Datasheet ARDUINO UNO klik disini
Download Datasheet Dipswicth klik disini
Download Datasheet Seven Segment klik disini














































Tidak ada komentar:

Posting Komentar

Entri yang Diunggulkan

Modul 4 [menuju akhir] [KEMBALI KE MENU SEBELUMNYA] DAFTAR ISI 1. Pendahuluan 2. Tujuan 3. Alat dan Bahan 4. Dasar Teori 5. Percobaan Percob...