Modul 3 Communication
1. Rangkai semua komponen sesuai kondisi yang dipilih
2. buat program di aplikasi arduino IDE
3. setelah selesai masukkan program ke arduino di proteus
4. jalankan program pada simulasi dan cobakan sesuai dengan modul dan kondisi
5. Selesai
2. Hardware dan diagram blok
[Kembali]
1. Arduino Uno
2. Seven Segment
4. Resistor
Diagram Blok :
3. Rangkaian Simulasi dan Prinsip kerja
[Kembali]
→ Gambar Rangkaian Sebelum Disimulasikan
→ Gambar Rangkaian Setelah Disimulasikan
PRINSIP KERJA
saat program dijalankan dan masuk ke komponen arduino MASTER. Selanjutnya, program terus berjalan dalam loop utama, pada saat awal jalannya rangkaian maka akan terjadi proses pendeteksian berapa switch yang on dimana Jika 3 Switch aktif maka counting 0 - 5 pada digit 1 dan 6 - 9 pada digit 2, Jika 4 Switch aktif maka counting 0 - 5 pada digit 2 dan 6 - 9 pada digit 1. Pada bagian loop MASTER untuk kondisi pertama disebut kondisi A dan kondisi kedua disebut kondisi B.
Perintah pada MASTER ini nantinya akan dikirim ke SLAVE dimana nanti SLAVE ini yang terhubung ke output LED. pada bagian SLAVE ini akan diatur HIGH-LOW dari LED agar sesuai dengan kondisi A dan B
4. FlowChart [Kembali]
//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 == 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
#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]Kondisi : Percobaan 2 Kondisi 3
Jika 3 Switch aktif maka counting 0 - 5 pada digit 1 dan 6 - 9 pada digit 2, Jika 4 Switch aktif maka counting 0 - 5 pada digit 2 dan 6 - 9 pada digit 1
6. Video Simulasi [Kembali]
7. Download File
[Kembali]
Download Simulasi Rangkaian Klik disini
Download HTML Klik disini
Download Video Simulasi Klik disini
Download Datasheet ARDUINO UNO klik disini
Tidak ada komentar:
Posting Komentar