You are on page 1of 7

Edutechino Weekend Program

Modul Pelatihan Pemrograman


Mikrokontroler Berbasis Arduino

Disusun Oleh :
Rausan Fikri, S.Si
Herjuno Aji Prayogo, S.Kom
Modul 6

1. Interupsi (Interrupts)

Pada tingkat sederhana, interupsi adalah sebuah sinyal yang


mengiterupsi proses yang sedang berlangsung pada prosesor.
Interupsi dapat dipicu oleh perubahan faktor eksternal (seperti
perubahan status pada pin input) atau juga faktor internal (seperti
timer atau juga software signal). Pada saat dipicu, interupsi
menghentikan sementara proses yang sedang berlangsung dan
menyebabkan program untuk mengeksekusi perintah atau fungsi
lain. Pada saat fungsinya selesai dilakukan, maka program akan
kembali bekerja seperti semula.

Pada Arduino Uno, Nano, Mini atau yang berbasis atmega328 pin
interupsi terdapat pada pin 2 dan 3. Untuk arduino yang lain, dapat
kita lihat pada tabel berikut.
Board Pin Interupsi
Uno, Nano, Mini, dan 328-
2, 3
based
Mega, Mega2560, MegaADK 2, 3, 18, 19, 20, 21
Micro, Leonardo, dan 32u4-
0, 1, 2, 3, 7
based
semua pin digital,
Zero
kecuali 4
0, 1, 4, 5, 6, 7, 8, 9, A1,
MKR1000 Rev.1
A2
Due Semua pin digital
101 Semua pin digital

Penjelasan sintaks lebih lanjut di


https://www.arduino.cc/en/Reference/AttachInterrupt
2. Komunikasi I2C

Inter Integrated Circuit atau sering disebut I2C adalah standar


komunikasi serial dua arah menggunakan dua saluran yang didisain
khusus untuk mengirim maupun menerima data. Sistem I2C terdiri
dari saluran SCL (Serial Clock) dan SDA (Serial Data) yang
membawa informasi data antara I2C dengan pengontrolnya. Piranti
yang dihubungkan dengan sistem I2C Bus dapat dioperasikan
sebagai Master dan Slave. Master adalah piranti yang memulai
transfer data pada I2C Bus dengan membentuk sinyal Start,
mengakhiri transfer data dengan membentuk sinyal Stop, dan
membangkitkan sinyal clock. Slave adalah piranti yang dialamati
master.

Sinyal Start merupakan sinyal untuk memulai semua perintah,


didefinisikan sebagai perubahan tegangan SDA dari 1 menjadi 0
pada saat SCL 1. Sinyal Stop merupakan sinyal untuk mengakhiri
semua perintah, didefinisikan sebagai perubahan tegangan SDA dari
0 menjadi 1 pada saat SCL 1.

Sinyal dasar yang lain dalam I2C Bus adalah sinyal acknowledge
yang disimbolkan dengan ACK Setelah transfer data oleh master
berhasil diterima slave, slave akan menjawabnya dengan mengirim
sinyal acknowledge, yaitu dengan membuat SDA menjadi 0
selama siklus clock ke 9. Ini menunjukkan bahwa Slave telah
menerima 8 bit data dari Master.

Pada arduino, komunikasi I2C telah dibuat library nya, yaitu


Wire Library. Library ini mampu membuat arduino berkomunikasi
dengan perangkat I2C. Pada arduino Uno dan Nano, pin I2C terdapat
pada A4 (SDA) dan A5 (SCL)

3. Array

Array (larik) merupakan suatu variabel yang merepresentasikan


daftar (list) atau kumpulan data yang memiliki tipe data sama. Array
merupakan konsep yang penting dalam pemrograman, karna array
memungkinkan kita untuk menyimpan data dalam jumlah banyak
dan terindeks.

Misalkan ada kumpulan data bertipe int yaitu angka 1, 2, 3, 4,


dan 5. Kumpulan data ini dapat disajikan dalam bentuk Array karena
memiliki tipe data yang sama yaitu Int. Misal kumpulan data tadi
kita beri nama Angka sehingga jika disajikan dalam bentuk array
akan menjadi Int Angka[]={1, 2, 3, 4, 5} atau Int Angka[5]={1, 2, 3,
4, 5}. Pada sebuah array, index array dimulai dari indeks ke-0,
sehingga pada array Angka[], angka 1 berada di indeks ke-0
(Array[0]), angka 2 berada di indeks ke-1 (Array[1]), dan seterusnya.
Sedangkan pada pendeklarasian Array, Int Angka [5] berarti Array
Angka dapat menampung 5 masukan nilai Int.

Tabel penjelasan array Angka[5] = {1,2,3,4,5}


Indeks array Nilai
Angka[0] (variabel Angka indeks 1
ke 0)
Angka[0] (variabel Angka indeks 2
ke 0)
Angka[0] (variabel Angka indeks 3
ke 0)
Angka[0] (variabel Angka indeks 4
ke 0)
Angka[0] (variabel Angka indeks 5
ke 0)
Praktikum
JOB 1 - Interupsi

Skema

Kode Program

const byte ledPin = 13;


const byte interruptPin = 2;
volatile byte state = LOW;

void setup() {
pinMode(ledPin, OUTPUT);
pinMode(interruptPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE);
}

void loop() {
digitalWrite(ledPin, state);
}

void blink() {
state = !state;
}

JOB 2 - I2C
Skema

Kode Program untuk Master

// Wire Master Writer


// by Nicholas Zambetti <http://www.zambetti.com>

// Demonstrates use of the Wire library


// Writes data to an I2C/TWI slave device
// Refer to the "Wire Slave Receiver" example for use with this

// Created 29 March 2006

// This example code is in the public domain.

#include <Wire.h>

void setup() {
Wire.begin(); // join i2c bus (address optional for master)
}

byte x = 0;
void loop() {
Wire.beginTransmission(8); // transmit to device #8
Wire.write("x is "); // sends five bytes
Wire.write(x); // sends one byte
Wire.endTransmission(); // stop transmitting

x++;
delay(500);

Kode Program untuk Slave

// Wire Slave Receiver


// by Nicholas Zambetti <http://www.zambetti.com>

// Demonstrates use of the Wire library


// Receives data as an I2C/TWI slave device
// Refer to the "Wire Master Writer" example for use with this

// Created 29 March 2006

// This example code is in the public domain.

#include <Wire.h>

void setup() {
Wire.begin(8); // join i2c bus with address #8
Wire.onReceive(receiveEvent); // register event
Serial.begin(9600); // start serial for output
}

void loop() {
delay(100);
}

// function that executes whenever data is received from master


// this function is registered as an event, see setup()
void receiveEvent(int howMany) {
while (1 < Wire.available()) { // loop through all but the last
char c = Wire.read(); // receive byte as a character
Serial.print(c); // print the character
}
int x = Wire.read(); // receive byte as an integer
Serial.println(x); // print the integer
}

JOB 3 - ARRAY

int angka[5] = {1, 2, 3, 4, 5};


int i = 0;
void setup() {
Serial.begin(9600);
}

void loop() {

if (i < 5) {
Serial.print("Variabel angka indeks ke");
Serial.print(i);
Serial.print(" adalah ");
Serial.println(angka[i]);
i++;
}

if (i == 5) {
i = 0;
}
delay(1000);
}