*Klik teks untuk menuju
1. Prosedur [Kembali]
Langkah-langkah percobaan :
1. Siapkan alat dan bahan yaitu dengan komponen utama Arduino Uno, Infrared Sensor, IC I2C, Keypad dan Motor DC
2. Rangkai sesuai gambar percobaan
3. Rancang kerja rangkaian sesuai flowchat
4. Tekan tombol “Play” untuk menjalankan simulasi
2. Hardaware dan Diagram Blok [Kembali]
- Arduino
- Switch
- Dual 7 segment
3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]
Prinsip Kerja
Jalan kerja pada percobaan kali ini menggunakan modul komunikasi SPI yang dimana kita menggunaka pin MOSI,MISO,SISO,SS yaitu pin 13,12,11,10 pada arduino kiri yang terhubung pada switch merupakan arduino master dan ketika terdeteksi 3 switch aktif akan mengirim data pada arduindo ke 2 yang dimana itu slave dan akan memulai counting mundur pada 7 segment
4. Flowchart dan listing Program [Kembali]
Flowchart :
master :
//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);
}
//slave arduino
#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
}
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]
Ketika 3 switch aktif akan memulai counting dari 9 ke 0
7. Download File [Kembali]
HTML Disini
Simulasi Disini
Video Simulasi Disini
Listing Program Master Di sini
Listing Program Slave Di sini
DataSheet dual 7 segment Disini
0 komentar:
Posting Komentar