Tugas Pendahuluan 1 Modul 2
(Percobaan 2 Kondisi 1)
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. 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.
3. Rangkaian Simulasi dan Prinsip Kerja
[Kembali]
Rangkaian Simulasi :
Prinsip Kerja :
Pada modul 3, percobaan 2 kondisi 1, terdapat dua Arduino Uno yang digunakan, dimana satu Arduino bertindak sebagai master dan satunya lagi sebagai slave. Alat dan bahan yang digunakan seperti dipswitch, Arduino Uno (Master), Arduino Uno (Slave), dan seven segment. Pada rangkaian ini, dipswitch dihubungkan dengan Master Arduino dan output sevent segment terhubung dengan slave arduino. Rangkaian ini menggunakan komunikasi SPI Arduino, yaitu menggunakan pin MISO, MOSI, SCK, dan SS yang terhubung antara Master Arduino dan Slave Arduino. Seven segment akan menampilkan karakter angka sesuai dengan kondisi dipswitch yang aktif berdasarkan program. Pada saat setiap dipswitch di aktifkan, maka master arduino akan mengirimkan data menuju slave arduino secara paralel dan slave arduino akan menerima data sesuai program dan ditampilkan pada output seven segment. Dan pada percobaan kondisi ini pada saat 2 switch aktif muncul angka berbeda pada digit ke 1 seven segment, dan pada saat 3 switch aktif muncul angka berbeda pada digit ke 2.
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[] = {};
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;
for(int i = 0; i < 8; i++){
dipvalue[i] = digitalRead(dip[i]);
if(dipvalue[i] == LOW){
x = dip[i];
}
}
digitalWrite(SS, LOW); //Starts communication with Slave connected to master
Mastersend = x;
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};
const int D1 = A1; // Definisi pin D1 sebagai A1
const int D2 = A3; // Definisi pin D2 sebagai A3
volatile boolean received = false;
volatile byte Slavereceived;
int index;
void setup() {
pinMode(D1, OUTPUT); // Mengatur pin D1 sebagai OUTPUT
pinMode(D2, OUTPUT); // Mengatur pin D2 sebagai OUTPUT
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(); // Interuupt 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
int digit1 = Slavereceived / 10; // Mendapatkan digit pertama
int digit2 = Slavereceived % 10; // Mendapatkan digit kedua
displayCharacter(digit1, D1); // Menampilkan digit pertama pada pin D1
delay(1000); // Delay untuk membaca digit pertama
displayCharacter(digit2, D2); // Menampilkan digit kedua pada pin D2
delay(1000); // Delay untuk membaca digit kedua
received = false; // Set received to false after displaying digits
}
}
void displayCharacter(int ch, int digitPin) {
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]);
}
digitalWrite(digitPin, HIGH); // Membuat digit aktif
}
}
5. Kondisi
[Kembali]
Percobaan 2 Kondisi 1
(Setiap 2 Switch aktif muncul angka berbeda pada digit ke 1, Setiap 3 Switch aktif muncul angka pada digit ke 2)
6. Video Simulasi
[Kembali]
7. Download File
[Kembali]
HTML klik disini
File Rangkaian klik disini
Video Percobaan klik disini
Video Percobaan klik disini
Listing Program Master klik disini
Listing Program Slave klik disini
Datasheet Arduino klik disini
Datasheet Seven Segment klik disini
Datasheet DIP Switch klik disini
Tidak ada komentar:
Posting Komentar