Percobaan 3 - I2C
2. Rangkaian Simulasi [kembali]
- Listing Program Master
#include <Wire.h>
#define SLAVE_ADDR 9
int butt=12;
int val = 0;
void setup() {
pinMode(butt, INPUT);
Wire.begin();
}
void loop() {
delay(50);
val=digitalRead(butt);
Wire.beginTransmission(SLAVE_ADDR);
Wire.write(val);
Wire.endTransmission();
// put your main code here, to run repeatedly:
}
- Listing Program Slave
SLAVE
#include <Wire.h>
#define SLAVE_ADDR 9
int LED = 13;
int rd;
void setup() {
pinMode(LED, OUTPUT);
Wire.begin(SLAVE_ADDR);
Wire.onReceive(receiveEvent);
Serial.begin(9600);
Serial.println("I2C Slave demo");
digitalWrite(LED,HIGH);
}
void receiveEvent() {
rd = Wire.read();
Serial.println(rd);
}
void loop() {
#define SLAVE_ADDR 9
int LED = 13;
int rd;
void setup() {
pinMode(LED, OUTPUT);
Wire.begin(SLAVE_ADDR);
Wire.onReceive(receiveEvent);
Serial.begin(9600);
Serial.println("I2C Slave demo");
digitalWrite(LED,HIGH);
}
void receiveEvent() {
rd = Wire.read();
Serial.println(rd);
}
void loop() {
delay(delay_value);
digitalWrite(led_pin, LOW);
delay(delay_value);
int button_state = digitalRead(button_pin);
if (button_state == HIGH) {
delay_value = 100;
} else {
delay_value = 1000;
}
}
buat lampu LED berkedip 2x saat tombol button ditekan
Sekarang anda akan membuat kedipan cahaya dengan memperkenalkan fungsi
delay()
ke kode di atas. delay()
berfungsi menerima nilai integer, sama dengan jangka waktu dalam milidetik. 1000 milidetik sama dengan satu detik.
01
02
03
04
05
06
07
08
09
10
11
12
| int delay_value = 1000; int led_pin = 13; void setup() { pinMode(led_pin, OUTPUT); } void loop() { digitalWrite(led_pin, HIGH); delay(delay_value); digitalWrite(led_pin, LOW); delay(delay_value); } |
delay()
berfungsi membuat lampu LED menyala dan juga mematikannya selama satu detik selama setiap iterasi fungsi loop()
. Karena fungsi loop()
terus berulang, kode ini akan menyalakan dan mematikan lampu LED berulang kali.
Dengan menggunakan diagram gelombang digital, saya dapat menjelaskan dengan jelas bagaimana perilaku asli telah berubah. Sebelum memperkenalkan fungsi penundaan pada langkah ketiga, saya menghasilkan gelombang digital yang tampak seperti diagram, di atas. Setiap siklus setiap loop () fungsi iterasi dihabiskan untuk menjaga lampu LED dihidupkan.
Menggunakan fungsi delay (), kode kita membagi setiap siklus menjadi dua bagian, membuat setiap iterasi berlangsung selama dua detik. Selama detik pertama LED dihidupkan, dan, selama detik berikutnya dimatikan.
int delay_value = 1000; int led_pin = 13; int button_pin = 2; void setup() { pinMode(led_pin, OUTPUT); pinMode(button_pin, INPUT); } void loop() { digitalWrite(led_pin, HIGH); delay(delay_value); delay(delay_value); int button_state = digitalRead(button_pin); if (button_state == HIGH) { delay_value = 100; } else { delay_value = 1000; } |
Kali ini, kode tersebut menginstruksikan Arduino untuk memperlakukan pin-2 sebagai sumber input dengan memanggil
pinMode(button_pin, INPUT)
di dalam fungsi setup()
. Ini memungkinkan kita untuk membaca status tombol tekan kemudian di dalam fungsi loop()
dengan memanggil digitalRead(button_pin)
. Mendapatkan status tombol tekan memungkinkan kita menentukan apakah fungsi penundaan harus dipanggil dengan nilai yang lebih kecil.
6. Link Download [kembali]
- Listing Program Link Download
- Video Link Download
- Simulasi Proteus Link Download
.
Tidak ada komentar:
Posting Komentar