TP 1 M3

    [KEMBALI KE MENU SEBELUMNYA]  




Semua Switch pull-down, switch 1 dan 3 motor ke kanan, switch 1 dan 4 panah ke kanan


1. Prosedur  [back]

·                Rangkailah rangkaian seperti panduan pada modul

·                Buka Arduino IDE dan masukan listing program, lalu upload program ke arduino 

·                Variasikan DIPSW_6 dan amati perubahan pada Double Seven Segmen

2. Hardware dan diagram blok [back]
a. Arduino


b. Dipswitch
c. 7-Segment





Diagram blok



3. Rangkaian Simulasi dan Prinsip Kerja  [back]






 Prinsip Kerja

     ada rangkaian di atas, terdapat sepasang arduino dan sebuah double seven segment. Arduino pertama berfungsi sebagai master yang menerima input dari DIPSW_6. Sedangkan Arduino kedua adalah slave atau arduino yang dikontrol. Slave menerima instruksi dari Master dan meneruskannya ke double Seven Segment. Sesuai kondisi yang dipilih dan listing program yang mana setiap 3 switch diaktifkan maka double Seven Segment akan melakukan counting dari 9 sampai 0 secara bergantian di digit 1 dan 2.







4. Flowchart dan Listing Program  [back]
a. Master

b. Slave

Listing Program

a. Master

 //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);

}

 

a. 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 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

}

 

#define D1 A0

#define D2 A1

 

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  [back]
  
Setiap 3 switch yang aktif akan melakukan counting 9 - 0 pada digit 1 dan 2 secara berseling

6. Video Simulasi  [back]






7. Download File  [back]
HTML klik
Simulasi klik
Video Simulasi klik
Listing Program klik





Tidak ada komentar:

Posting Komentar