Tugas Pendahuluan 1 uP uC Modul 3
TUGAS PENDAHULUAN 1 (MODUL 3 COMMUNICATION)
1. Prosedur [Kembali]
Langkah-langkah percobaan :
- Siapkan alat dan bahan yaitu dengan komponen utama Arduino Uno, Switch, LCD
- Rangkai sesuai gambar percobaan
- Rancang kerja rangkaian sesuai flowchart
- Tekan tombol “Play” untuk menjalankan simulasi
2. Hardware dan Diagram Blok [Kembali]
Pada rangkaian ini, rangkain bekerja dengan menggunakan komunikasi SPI (Serial Pheripheral Interface) yang mana menggunakan pin MOSI, MISO, SCK dan SS. Master berfungsi mengontrol slave dengan mengirimkan kondisi dipswitch yang sedang aktif menuju slave dengan menggunakan pin MOSI (Master Out Slave input). Sedangkan Slave merupakan bagian yang dikontrol. Saat kondisi dipswitch hidup 3, maka program akan berjalan, yang mana akan melakukan counting secara berseling antara kedua segment.
4. Flowchart dan Listing Program [Kembali]
Flowchart
Listing Program
master
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//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); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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. Video Demo [Kembali]
Saat Praktikum
6. Kondisi [Kembali]
Setiap 3 switch yang aktif akan melakukan counting 9 - 0 pada digit 1 dan 2 secara berseling
7. Video Simulasi [Kembali]
8. Link Download [Kembali]
Download HTML [Klik di sini]
Download file rangkaian [Klik di sini]
Download video rangkaian [Klik di sini]
Download program Arduino [Klik di sini]
Download datasheet Arduino [Klik di sini]
Download datasheet Dual Seven Segment [Klik di sini]
Download datasheet Dipswitch [Klik di sini]
Komentar
Posting Komentar