M3 - Tugas Pendahuluan 2




Tugas Pendahuluan 2 Modul 3
(Percobaan 2 Kondisi 5)

1. Prosedur
[Kembali]

1. Rangkai rangkaian di proteus sesuai dengan kondisi percobaan.
2. Tulis program untuk arduino di software Arduino IDE.
3. Compile program tadi, lalu upload ke dalam arduino.
4. Setelah program selesai di upload, jalankan simulasi rangkaian pada proteus.


2. Hardware dan Diagram Blok [Kembali]

Hardware :

a) Modul Arduino 


b) ESP32 


c) Dipswitch 


d) LED 
e) Seven Segment

Diagram Blok:





3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

Rangkaian Simulasi :



Prinsip Kerja :

Rangkaian ini beroperasi dengan memanfaatkan komunikasi SPI antara dua Arduino, masing-masing sebagai master dan slave. Prinsipnya adalah untuk mengirimkan informasi tentang jumlah switch yang aktif dari master ke slave menggunakan jalur SPI, di mana slave kemudian menampilkan informasi tersebut pada seven segment display.

Pada sisi master, pembacaan nilai dip switch dilakukan secara berkala untuk menentukan jumlah switch yang aktif. Setelah itu, nilai ini dikirimkan ke slave melalui jalur SPI untuk ditampilkan pada seven segment display. Di sisi slave, informasi yang diterima dari master diolah untuk menentukan bagaimana tampilan pada seven segment display akan disusun. Dengan menggunakan protokol SPI, komunikasi antara master dan slave terjadi secara efisien, memungkinkan pertukaran informasi yang akurat dalam waktu yang singkat.

Rangkaian ini memungkinkan kontrol yang tepat antara dua Arduino, di mana informasi tentang jumlah switch yang aktif dapat dengan mudah dikirimkan dan ditampilkan. Dengan demikian, prinsip kerja rangkaian ini sangat bergantung pada komunikasi SPI yang efisien dan kemampuan masing-masing Arduino untuk membaca dan mengolah informasi dengan tepat.


 
4. Flowchart dan Listing Program [Kembali]

Flowchart :



Listing Program :

//Master
//Master Arduino
#include<SPI.h> //Library for SPI 
int dip[] = {2,3,4,5,6,7,8,9};
int dipvalue[] = {};
int activeSwitchCount = 0; // Variable to store the count of active switches

void setup (){
 Serial.begin(9600); //Starts Serial Communication at Baud Rate 9600
 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;
 activeSwitchCount = 0; // Reset the count of active switches
 for(int i = 0; i < 8; i++){
 dipvalue[i] = digitalRead(dip[i]);
 if(dipvalue[i] == LOW){
 activeSwitchCount++; // Increment the count if the switch is active
 }
 }
 digitalWrite(SS, LOW); //Starts communication with Slave connected to master
 Mastersend = activeSwitchCount; // Send the count of active switches
 Serial.println(Mastersend); 
 SPI.transfer(Mastersend); //Send the Mastersend value to slave also receives value from slave
 delay(1000);
}

//Slave

#include<SPI.h>
const int segmentPins[] = {9, 8, 7, 6, 5, 4, 3, 2};
volatile boolean received = false;
volatile byte Slavereceived;
int index;
void setup(){
 Serial.begin(9600);
 for (int i = 0; i < 8; i++) {
 pinMode(segmentPins[i], 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 if store in variable slavereceived
 received = true; //Sets received as True 
}
void loop(){
 Serial.println(Slavereceived);
 if(received){//Logic to SET LED ON OR OFF depending upon the value received from master 
 displayCharacter(Slavereceived);
 delay(1000);
 }
}
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 2 Kondisi 5 (Komunikasi SPI dengan Arduino)
"Setiap 1 Switch aktif muncul angka sesuai jumlah switch yang aktif pada digit 1"

6. Video Simulasi [Kembali]






7. Download File [Kembali]

File Rangkaian klik disini
Video Percobaan klik disini
Listing Program klik disini
Datasheet Arduino klik disini
Datasheet Button klik disini
Datasheet Led klik disini
Datasheet Resistor klik disini

Tidak ada komentar:

Posting Komentar