Tugas Pendahuluan 1

  




1. Prosedur
 [Kembali]

Langkah-langkah percobaan :

  1. Rangkailah seperti rangkaian berikut
  2. Buka Arduino IDE dan masukan listing Program
  3. Upload program ke arduino
  4. Mencoba rangkaiannya dengan memvariasikan input pada dipswitch.

2. Hardware dan Diagram Blok [Kembali]
    
  • LDR sensor
  • Arduino Uno
  • LCD
  • Motor Servo
  • Driver Motor L293D




3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]



Prinsip Kerja:    
Cara kerja  rangkaian ini adalah saklar dip bertindak sebagai masukan pada master Arduino dan keluarannya berupa 7 segmen pada Arduino Slave. Master Arduino bertindak sebagai input pada pin 1 yang berlogika 1. Jika ada logika 1  maka master Arduino akan mengirimkan data 9 ke Arduino Slave. Setelah diterima 9 data  oleh slave Arduino, maka akan ditampilkan dalam 7segmen.

 

4. Flowchart dan Listing Program [Kembali]
    flowchart:






    listing program:
 //Master Arduino
#include<SPI.h> //Library for SPI
int dip[] = {2,3,4,5,6,7};
int dipvalue[] = {};
void setup (){
 Serial.begin(9600); //Starts Serial Communication at Baud Rate 115200
 for(int i = 0; i < 6; 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;
 for(int i = 0; i < 6; i++){
 dipvalue[i] = digitalRead(dip[i]);
 if(dipvalue[i] == LOW){
 x = dip[i];
 }
 }
 digitalWrite(SS, LOW);
Mastersend = x;
 Serial.println(Mastersend);
 SPI.transfer(Mastersend); //Send the mastersend value to slave also receives value from slave
 delay(1000);
}
#include <SPI.h>

const int segmentPins[] = {9, 8, 7, 6, 5, 4, 3, 2};
volatile boolean received = false;
volatile byte Slavereceived;
int index;
int currentNumber = 9; // Inisialisasi angka saat ini
int switchCount = 0; // Counter untuk menghitung jumlah switch aktif

void setup() {
  Serial.begin(9600);
 
  for (int i = 0; i < 8; i++) {
    pinMode(segmentPins[i], OUTPUT);
  }
 
  SPCR |= _BV(SPE); // Mengaktifkan SPI dalam mode Slave
  SPI.attachInterrupt(); // Menetapkan interrupt untuk komunikasi SPI
}

ISR (SPI_STC_vect) { // Fungsi rutin interrupt
  Slavereceived = SPDR; // Menyimpan nilai yang diterima dari master
  received = true; // Set nilai received menjadi true
}

void loop() {
  Serial.println(Slavereceived);
 
  if (received) {
    if (Slavereceived == 1) { // Jika switch aktif
      switchCount++;
     
      if (switchCount >= 3) { // Jika sudah terdeteksi 3 switch aktif
        switchCount = 0; // Reset counter
        currentNumber = 9; // Mulai perhitungan dari 9 lagi
      }
    }
    received = false; // Reset nilai received
   
    displayCharacter(currentNumber); // Menampilkan angka saat ini di 7 segment
    delay(1000); // Delay sebelum menampilkan angka selanjutnya
   
    currentNumber--; // Mengurangi angka saat ini untuk perhitungan selanjutnya
    if (currentNumber < 0) { // Jika mencapai 0, kembali ke 9
      currentNumber = 9;
    }
  }
}

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)) {
    // Mendapatkan indeks digit (0-9) dari karakter
    int index = ch;
    // Menulis pola ke pin-pins segment
    for (int i = 0; i < 7; i++) {
      digitalWrite(segmentPins[i], patterns[index][i]);
    }
  }
}


5. Kondisi [Kembali]
    Kondisi 7:
   Setiap 3 switch yang aktif akan melakukan counting 9 - 0 pada digit 1 dan 2 secara berseling

6. Video Simulasi [Kembali]    



7. Download File [Kembali]
rangkaian klik di sini
code arduino uno klik di sini




















Tidak ada komentar:

Posting Komentar

Entri yang Diunggulkan

  BAHAN PRESENTASI  MATA KULIAH SISTEM DIGITAL 2023     Oleh : Mu'minatul Afifah Nusatama 2110951003   Dosen Pengampu: Dr. Darwison, M.T...