Senin, 29 April 2024

Tugas Pendahuluan 2 P2K3




Tugas Pendahuluan Modul 3
Percobaan 2 Kondisi 3
1. Prosedur
[Kembali]
1. Rangkai komponen sesuai percobaan dan kondisi yang dipilih.
2. Buat program menggunakan Arduino IDE.
3. Transfer program yang telah dibuat ke Arduino yang ada di Proteus.
4. Uji coba program di simulasi sesuai dengan kondisi yang diinginkan.
5. Proses selesai setelah uji coba berhasil dilakukan.

2. Hardware dan Diagram Blok [Kembali]

a. Hardware
1. Modul Arduino Uno


spesifikasi: 



2. Seven Segment 2 digit





3. Dipswitch
spesifikasi:



4. Power supply



5. Ground



6. Resistor



b. diagram blok


3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

A. Rangkaian Simulasi



B. Prinsip Kerja

Program yang telah dibuat akan dijalankan lalu akan masuk ke arduino master, kemduian program berjalan ke rangkaian utama, lalu akan terjadi proses perhitungan jumlah switch pada dipswitch, dimana kondisinya adalah untuk kondisi 1 jika 3 switch aktif maka akan pada seven segmen akan menampilkan counting 0-5 pada digit 1 dan 6-9 untuk digit 2, dan untuk kondisi 2 jika 4 switch aktif maka seven segment akan menampilkan counting 6-9 pada digit1, dan akan menampilkan 0-5 pada digit 2. Dan perintah pada arduino master ini nantinya akan dikirim ke arduino slave dan dimana outputnya akan terhubung ke seven segment dan seven segment menampilkan hasil countingnya, sesuai dengan kondisi 1 dan kondisi 2, dan bila diluar kondisi itu maka seven segment tidak akan menampilkan angka.

4. Flowchart dan Listing Program [Kembali]

a. Flowchart

Master


Slave



b. 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 9600
for(int i = 0; i < 8; i++){
pinMode(dip[i], INPUT);
}
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] == HIGH) {
      x = dip[i];
      activeSwitches++;
    }
  }

  // Jika 3 saklar aktif, tampilkan counter 0-5 di digit pertama, kemudian counting 6-9 di digit kedua
  if (activeSwitches == 3) {
    // Tampilkan counter 0-5 di digit pertama
      digitalWrite(SS, LOW);
      Mastersend = 3;
      Serial.println(Mastersend);
      SPI.transfer(Mastersend);
      delay(100);
    // Lanjutkan counting dari 6-9 di digit kedua
    //for (int i = 6; i <= 9; i++) {
     // digitalWrite(SS, LOW);
     // Mastersend = i;
      //Serial.println(Mastersend);
      //SPI.transfer(Mastersend);
      //delay(100);
    }
  //}
  
  // Jika 4 saklar aktif, tampilkan counter 0-5 di digit kedua, kemudian counting 6-9 di digit pertama
  else if (activeSwitches == 4) {
    // Tampilkan counter 0-5 di digit kedua
      digitalWrite(SS, LOW);
      Mastersend = 4; // Shift 4 bit ke kiri untuk menetapkan digit kedua
      Serial.println(Mastersend);
      SPI.transfer(Mastersend);
      delay(100);
    // Lanjutkan counting dari 6-9 di digit pertama
    //for (int i = 6; i <= 9; i++) {
     // digitalWrite(SS, LOW);
     // Mastersend = i << 4; // Shift 4 bit ke kiri untuk menetapkan digit kedua
     // Serial.println(Mastersend);
      //SPI.transfer(Mastersend);
      //delay(100);
    //}
  }
}


Slave:

//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 dg1 = A1;
int dg2 = A0;

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 == 3) {
      for(int i=0;i<=9;i++){
        if(i <= 5){
          digitalWrite(dg1,HIGH);
          digitalWrite(dg2,LOW);
          displayCharacter(i);
          delay (100);
        }
        else{
          digitalWrite(dg2, HIGH);
          digitalWrite(dg1,LOW);
          displayCharacter(i);
          delay (100);
        }
      }
      
    }
    else if (Slavereceived == 4) {
      for(int i=0;i<=9;i++){
        if(i <= 5){
          digitalWrite(dg1,LOW);
          digitalWrite(dg2,HIGH);
          displayCharacter(i);
          delay (100);
        }
     
        else{
          digitalWrite(dg2, LOW);
          digitalWrite(dg1, HIGH);
          displayCharacter(i);
          delay (100);
        }
      }}

      else {
      for(int i=0;i<=9;i++){
        if(i <= 5){
          digitalWrite(dg1,LOW);
          digitalWrite(dg2,HIGH);
          displayCharacter(i);
          delay (100);
        }
     
        else{
          digitalWrite(dg2, LOW);
          digitalWrite(dg1, HIGH);
          displayCharacter(i);
          delay (100);
        }
         
      }
    }
      
    }
    
    received = false; // Reset received flag
  }

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]);
    }
  }
}



5. Kondisi [Kembali]

Percobaan 1 Kondisi 3

Jika 3 switch aktif maka counting 0-5 oada digit1 dan 6-9 pada digit 2, jika 4 switch aktif maka counting 0-5 pada digit 2, dan 6-9 pada digit 1.


5. Video Simulasi [Kembali]




7. Download File [Kembali
Download HMTL Klik disini
Download Simulasi Rangkaian Klik disini
Download Program Klik disini
Download Video Simulasi Klik disini
Download Datasheet ARDUINO UNO klik disini
Download Datasheet Dipswitch  klik disini
Download Datasheet LED klik disini








Tidak ada komentar:

Posting Komentar

Modul 4

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