Langkah-langkah percobaan :
- Rangkailah seperti rangkaian berikut
- Buka Arduino IDE dan masukan listing Program
- Upload program ke arduino
- Mencoba rangkaiannya dengan memvariasikan input pada dipswitch.
2. Hardware dan Diagram Blok [Kembali]
- LDR sensor
- Arduino Uno
- LCD
- Motor Servo
- Driver Motor L293D
3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]
Prinsip Kerja:
Cara kerja rangkaian ini adalah saklar dip bertindak sebagai masukan pada master Arduino
dan keluarannya berupa 7 segmen pada Arduino Slave. Master Arduino bertindak
sebagai input pada pin 1 yang berlogika 1. Jika ada logika 1 maka master Arduino akan mengirimkan data 9
ke Arduino Slave. Setelah diterima 9 data
oleh slave Arduino, maka akan ditampilkan dalam 7segmen.
4. Flowchart dan Listing Program [Kembali]
flowchart:
listing program:
//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);
}
#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. Kondisi [Kembali]
Kondisi 7:
Setiap 3 switch yang aktif akan melakukan counting 9 - 0 pada digit 1 dan 2 secara berseling
7. Download File [Kembali]
video klik di sini
html klik di sini
rangkaian klik di sini
code arduino uno klik di sini
Tidak ada komentar:
Posting Komentar