Tugas Pendahuluan 2




TUGAS PENDAHULUAN 2
Percobaan 2 Kondisi 1


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

2. Hardware dan Diagram Blok [Kembali]

    1. Arduino Uno


    2. Dip Switch

    3. Seven Segment 2 Digit


    4. Resisor


    5. Power Supply


    6. Ground



Diagram Blok:


3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

    A. Gambar rangkaian sebelum disimulasikan


    B. Gambar rangkaian setelah disimulasikan


    C. Prinsip Kerja
    Pada percobaan ini, kita menggunakan dua Arduino Uno. Satu Arduino berperan sebagai master dan yang lainnya sebagai slave. Arduino master terhubung ke dipswitch sebagai input, sedangkan Arduino slave terhubung ke seven segment 2 digit sebagai output. Komunikasi antara keduanya menggunakan protokol SPI, di mana pin 10-13 Arduino master terhubung ke pin 10-13 Arduino slave.

    Ketika dua switch aktif pada dipswitch, Arduino master mengirimkan perintah ke Arduino slave untuk menampilkan angka 1 digit pada seven segment. Namun, jika tiga switch aktif, Arduino master mengirimkan perintah ke Arduino slave untuk menampilkan angka yang berbeda pada digit kedua dari seven segment. Dengan demikian, Arduino master mengontrol tampilan pada seven segment berdasarkan kondisi input dari dipswitch.

4. Flowchart [Kembali]

    A. Listing Program

//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++;
    }
  }

  // Jika 3 saklar aktif, tampilkan counter 0-5 di digit pertama, kemudian counting 6-9 di digit kedua
  if (activeSwitches == 2) {
    // 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 == 3) {
    // 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
#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]);
    }
  }
}
    
    B. Flowchart




5. Kondisi [Kembali]
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

6. Video Simulasi [Kembali]



7. Download File [Kembali]
Download Rangkaian Simulasi klik disini
Download Html klik disini 
Download Datasheet Arduino Uno disini
Download Video Simulasi klik disini





















Tidak ada komentar:

Posting Komentar

Entri yang Diunggulkan

APLIKASI HPF +60DB/DEC DENGAN GENERATOR SINYAL

[MENUJU AKHIR] APLIKASI HPF +60DB/DEC DENGAN GENERATOR SINYAL DAFTAR ISI 1. Tujuan 2. Alat dan Bahan 3. Dasar Teori 4. P...