Senin, 29 April 2024

Tugas Pendahuluan 2 - Modul 3




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

1. Prosedur
[Kembali]
  • Rangkailah semua komponen 
  • Buat program di aplikasi arduino IDE
  • Setelah selesai, masukkan program ke arduino 
  • Jalankan program pada simulasi dan lakukan sesuai kondisi
2. Hardware dan diagram blok [Kembali]
      a. hardware
                 
                                                  
1. Arduino Uno
2. Dipswitch_8
3. Seven Segment

            b. Digram Blok




3. Rangkaian Simulasi dan Prinsip kerja [Kembali]
Gambar Rangkaian Sebelum Disimulasikan
                                    

Gambar Rangkaian Setelah Disimulasikan




                                        
PRINSIP KERJA
   Pada percobaan 2 kondisi 6 terdapat dua Arduino yang terhubung satu sama lain melalui komunikasi SPI. Salah satu Arduino berperan sebagai master, sedangkan yang lainnya sebagai slave. Pada Arduino master, terdapat beberapa dipswitches yang terhubung ke pin input digital. Dipswitches ini berfungsi sebagai saklar input yang dapat digunakan untuk memberikan masukan ke Arduino master. Setiap dipswitch dihubungkan ke pin digital pada Arduino, dengan nilai logika LOW ketika saklar ditekan dan HIGH ketika tidak ditekan.

Ketika saklar aktif dideteksi oleh Arduino master, ia akan mengirimkan byte dengan nilai 2 ke Arduino slave melalui komunikasi SPI. Untuk komunikasi SPI, Arduino master menggunakan pin yang telah ditentukan, yaitu pin SS (Slave Select), MOSI (Master Out Slave In), MISO (Master In Slave Out), dan SCK (Serial Clock). Arduino slave telah diatur untuk menerima data melalui SPI dan menampilkan output pada dua digit 7-segment display.

Pada Arduino slave, output ditampilkan melalui dua digit 7-segment display. Arduino slave menggunakan pin digital untuk mengendalikan segmen-segmen pada display dan menggunakan dua pin analog untuk mengendalikan kedua digit pada display. Setiap segmen pada display diatur menggunakan digitalWrite sesuai dengan pola yang diberikan dalam kodingan. Dua digit ditampilkan secara bergantian dengan menggunakan digitalWrite untuk mengontrol pin-pinnnya sesuai dengan angka yang ingin ditampilkan pada setiap digitnya.

4. FlowChart [Kembali]

a. Listing Program 

Master Arduino


//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 Arduino

#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


Master Arduino



Slave Arduino




5. Kondisi [Kembali]

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]

Rangkaian Simulasi  klik disini
Video Simulasi  klik disini
Listing Program Master Arduino  klik disini
Listing Program Slave Arduino  klik disini
Datasheet Arduino klik disini
Datasheet Seven Segment klik disini


Tidak ada komentar:

Posting Komentar

MODUL 4

  [KEMBALI KE MENU SEBELUMNYA] DAFTAR ISI     1. Pendahuluan     2. Tujuan     3. Alat dan Bahan     4. Dasar Teori     5. Perc...