Tugas Pendahuluan 1 Modul 3
(Percobaan 2 Kondisi 6)
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. 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]
3. Rangkaian Simulasi dan Prinsip Kerja
[Kembali]
Rangkaian Simulasi Sebelum dirunning:
Prinsip Kerja :
Pada rangkaian menggunakan dua buah arduino sebagai master dan slave, untuk arduino master itu digunakan sebagai input, input berupa dipswitch 8 pin. Sedangkan untuk arduino slvae sebagai output, output berupa doubel digit seven segment. Komunikasi yang digunakan antar dua arduino adalah SPI
Pada rangkaian menggunakan dua buah arduino sebagai master dan slave, untuk arduino master itu digunakan sebagai input, input berupa dipswitch 8 pin. Sedangkan untuk arduino slvae sebagai output, output berupa doubel digit seven segment. Komunikasi yang digunakan antar dua arduino adalah SPI
Saat input berupa dipswitch dengan saklar yang aktif adalah 2 buah, maka master akan mengirimkan data "mastersend = 2" sehingga apabila diterima oleh slave, maka akan dilakukan perhitungan dari 0 sampai 9, secara berseling antara 2 digit pada seven segment. Saat iterasi bernilai ganjil, maka digit pada seven segment yang aktif adalah digit 1, sedangkan saat iterasi bernilai genap, maka digit pada seven segment yang aktif adalah digit 2, sehingga perhitungan akan dilakukan secara berseling.
4. Flowchart dan Listing Program
[Kembali]
Flowchart :
- Master :
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;
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++;
}
}
if (activeSwitches == 2) {
digitalWrite(SS, LOW);
Mastersend = 2;
Serial.println(Mastersend);
SPI.transfer(Mastersend);
delay(100);
}
}
Slave :
#include <SPI.h>
const int segmentPins[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
volatile boolean received = false;
volatile byte Slavereceived;
int index;
int dg1 = A0;
int dg2 = A1;
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]);
}
}
}
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 == 2) {
for(int i=0;i<=9;i++){
if(i % 2 == 0 ){
digitalWrite(dg1,HIGH);
digitalWrite(dg2,LOW);
displayCharacter(i);
delay (100);
}
else{
digitalWrite(dg1, LOW);
digitalWrite(dg2, HIGH);
displayCharacter(i);
delay (100);
}
}
}
received = false; // Reset received flag
}
}
Percobaan 2 Kondisi 6
Setiap 2 switch yang aktif akan melakukan counting 0 - 9 pada digit 1 dan 2 secara berseling
6. Video Simulasi
[Kembali]
7. Download File
[Kembali]
Tidak ada komentar:
Posting Komentar