SlideShare a Scribd company logo
1 of 78
ARDUINO DANIEL ADRIAN
APA ITU ARDUINO ?
Arduino merupakan mikrokontroller Atmel AVR yang dimodifikasi
sehingga pemrogramannya menjadi lebih “mudah”
“Arduino is an open-source prototyping platform based on easy-to-
use hardware and software”
Dikarenakan menggunakan Atmel AVR maka kemampuan dari
Arduino mengikuti dari chip AVR yang menempel pada board
ARDUINO merupakan AVR yang dimodifikasi bootloadernya sehingga
bekerja dengan environment baru ( Dapat deprogram dengan serial)
APA ITU ARDUINO ?
ARDUINO merupakan mikrokontroller sehingga peruntukannya lebih
mengacu pada MACHINE FRIENDLY tetapi karena disediakan banyak
sekali library dan pihak developer berusaha untuk membuat kode
mudah dipahami namun hal ini berimbas pada “ketidakpahaman user
terhadap mikrokontroller secara mendalam”
ARDUINO memiliki IDE dengan Bahasa C, menggunakan avr gcc
DEVELOPMENT
Web : https://www.arduino.cc/
Software IDE : https://www.arduino.cc/en/Main/Software
Library Arduino : https://www.arduino.cc/en/Reference/Libraries
Arduino Shield : https://www.arduino.cc/en/Main/ArduinoShields
STRUKTUR BLOK DARI MEMORY
AVR
ARDUINO UNO PIN
CONFIGURATION
ISI DARI ARDUINO
FITUR ARDUINO UNO
14 Pin I/O
16 MHz Clock
Power Jack
Memori Flash 32 KB ( 0.5 KB untuk bootloader), 2 KB SRAM, 1 KB
EEPROM
Komunikasi Serial pada pin 0(RX) dan 1(TX)
EXT INTERRUPT pada pin 2 dan 3
PWM pada pin 3,5,6,9,10,11 -> 8 bit PWM
LED pada pin 13
6 INPUT ANALOG
PROGRAM
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
I/O - OUTPUT
SETUP :
pinMode(ledPin, OUTPUT);
Ex :
pinMode(0, OUTPUT);
CODE :
digitalWrite(ledPin, HIGH);
digitalWrite(ledPin, LOW);
BLINKING LED
int ledPin = 13; // LED connected to digital pin 13
void setup()
{
pinMode(ledPin, OUTPUT); // sets the digital pin as output
}
void loop()
{
digitalWrite(ledPin, HIGH); // sets the LED on
delay(1000); // waits for a second
digitalWrite(ledPin, LOW); // sets the LED off
delay(1000); // waits for a second
}
I/O READ
pullup resistor (to +5V), or a pulldown resistor (resistor to ground) on
the input. A 10K resistor is a good value for a pullup or pulldown
resistor.
SETUP :
pinMode(inPin, INPUT);
Ex :
pinMode(0, INPUT);
CODE :
digitalRead(inPin);
CAPTURE PUSH BUTTON
int ledPin = 13; // LED connected to digital pin 13
int InPin = 7;
int data;
void setup()
{
pinMode(ledPin, OUTPUT); // sets the digital pin as output
pinMode(InPin, INPUT); // sets the digital pin as output
}
void loop()
{
data=digitalRead(InPin);
digitalWrite(ledPin, data); // sets the LED on
}
SERIAL
SETUP :
Serialx.begin(baud_rate);
Baud Rate merupakan kecepatan pengiriman data
Pilihan Baud rate :
300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400,
57600, dan 115200
x merupakan serial yang dipakai. Pada uno hanya terdapat 1 buah
serial. Untuk serial 0 maka angka 0 tidak perlu ditulis sehingga setup
menjadi
Serial.begin(baud_rate);
MENGIRIM DATA DENGAN SERIAL
CODE :
Serial.print(“text");
Serial.println(“text"); => print disertai dengan newline
SERIAL SEND EXAMPLE
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.print(“hello world!!!”);
Delay(500);
}
SERIAL READ
Untuk mengetahui apakah terjadi pengiriman data ke Arduino maka
dapat diketahui dengan melakukan cek pada Serialx.available() > 0
CODE :
if (Serialx.available() > 0){
char = char(Serialx.read());
}
* x disesuaikan dengan serial yang dipakai
SERIAL READ – MULTIPLE
CHARACTER
Untuk menerima banyak karakter maka program perlu mengecek secara
terus menerus apakah Serialx.available() > 0. Selama nilai tersebut > 0 maka
data akan terus dimasukan kedalam string
CODE :
String cmd = "";
if (Serial1.available() > 0){
while (Serial1.available() > 0){
cmd += char(Serial1.read()); // memasukan setiap character
kedalam string
delay(1); // untuk baud rate 115200
}
}
SERIAL READ – PARSE / SPLIT DATA
FUNCTION :
String getValue(String data, char separator, int index)
{
int found = 0;
int strIndex[] = { 0, -1 };
int maxIndex = data.length() - 1;
for (int i = 0; i <= maxIndex && found <= index; i++){
if (data.charAt(i) == separator || i == maxIndex){
found++;
strIndex[0] = strIndex[1] + 1;
strIndex[1] = (i == maxIndex) ? i + 1 : i;
}
}
return found>index ? data.substring(strIndex[0], strIndex[1]) : "";
}
SERIAL READ – PARSE / SPLIT DATA
CODE :
String cmd = "";
if (Serial1.available() > 0){
while (Serial1.available() > 0){
cmd += char(Serial1.read());
delay(1);
}
}
String index0 = getValue(cmd, ':', 0);
String index1 = getValue(cmd, ':', 1);
String index2 = getValue(cmd, ':', 2);
String index3 = getValue(cmd, ':', 3);
TIMER - INTERRUPT
Tidak ada library resmi dari Arduino namun beberapa library support
dapat digunakan seperti library pada URL :
https://github.com/JChristensen/Timer
Namun dengan menggunakan library yang tidak resmi Arduino maka
beberapa konsekuensi seperti bugs tidak dapat dihindarkan untuk itu
perlu menggunakan “TRUE C AVR”
Pada Arduino semua timer dikonfigurasi menjadi output pwm, untuk
itu perlu melakukan setting / konfigurasi
PWM CAN’T BE USED ?
Penggunaan timer0, timer1 dan timer2 dapat menggangu pin PWM
pada ARDUINO sehingga perlu menyesuaikan pin mana saja yang
memanfaatkan timer tersebut dan mana yang tidak.
timer-0 terhubung dengan pin 5, 6
timer-1 terhubung dengan pin 9, 10
timer-2 terhubung dengan pin 3, 11
I/O MAPPING
TIMER – INTERRUPT CTC
Pada AVR Atmega 328 yang dipakai oleh ARDUINO terdapat 3 buah
timer yaitu timer 0, timer 1 dan timer2 dan setiap timer terdapat
counter yang mencacah. Dengan mode CTC/ Clear Timer on
Compare, Saat angka cacahan mencapai titik tertentu maka terjadi
yang disebut trigger event atau update event atau overflow event.
Event ini dapat kita pakai untuk menimbulkan interrupt.
Diperlukan beberapa konfigurasi pada address tertentu agar timer
dapat berjalan.
TIMER – INTERRUPT CTC
ARDUINO bekerja pada 16 MHz yang artinya setiap instruksi di
jalankan setiap 1/16000000 atau (~63ns) per instruksi yang artinya
juga bahwa cacahan dari timer akan mencapai nilai 9 pada detik ke
10/16000000 (Mulai dari 0)
Dalam beberapa kejadian proses cacahan ini terlalu cepat. Maka
dibutuhkan prescaler yang bertujuan untuk membagi 16 MHz ke
dalam beberapa bagian. Terdapat 5 mode prescaler yaitu 1, 8, 64,
256, and 1024
Artinya jika prescaler yang digunakan 8 maka 16000000 akan dibagi
dengan 8 sehingga kecepatan dari timer berada pada 2MHz
TIMER – INTERRUPT CTC
Langkah selanjutnya menentukan CTC value. Untuk menentukannya
dapat menggunakan rumus :
compare match register = [ 16,000,000Hz/ (prescaler * desired
interrupt frequency) ] – 1
Nilai dari CTC untuk timer0 dan timer2 adalah 8 Bit yang artinya
diantara 0 – 255
Nilai dari CTC untuk timer1 adalah 16 bit yang artinya diantara 0 -
65536
TIMER0 DAN TIMER2– BLOCK
DIAGRAM
TIMER0 –OCR0
Terdapat 2 buah OCR0 yaitu OCR0A dan OCR0B
Nilai OCR ini yang akan diisi sebagai compare dari CTC
TIMER0 – TCCR0
Perlu konfigurasi agar timer diaktifkan sebagai mode CTC. Pada timer0 terdapat
register TCCR0 yang berisi beberapa value yang perlu disetting agar menyalakan mode
CTC
TCCR0A =0;
TCCR0B =0;
TCCR0A |= (1 << WGM01); // membuat nilai WGM01 menjadi 1
TCCR0B |= (1 << CS02) | (1 << CS00); // Pemilihan prescaler 1024
TIMER0 – TCNT0
TCNT0 adalah register yang berfungsi menyimpan nilai cacahan dari
counter timer 0. Pada konfigurasi perlu untuk diset TCNT0 = 0;
TCNT0 dapat menampung data 8 bit
TIMER0 – INTERRUPT MASK
Untuk mengaktif mode CTC sebagai mode interrupt maka perlu
dilakukan konfigurasi pada interrupt mask
TIMSK0 |= (1 << OCIE0A); // menggunakan OCR0A compare
TIMSK0 |= (1 << OCIE0B); // menggunakan OCR0B compare
TIMSK0 |= (1 << TOIE0); // menggunakan overflow event
TIMER0 – INTERRUPT HANDLER
Dalam interrupt diperlukan sebuah handler yang menangani event
interrupt tersebut. Fungsi tersebut diletakan pada function ISR
Function :
ISR(TIMER0_COMPA_vect){
//your interrupt code here
}
Function :
ISR(TIMER0_COMPB_vect){
//your interrupt code here
}
CONTOH KONFIGURASI
Timer mengunakan timer 0 dengan interrupt CTC setiap 2 ms
Frekuensi interrupt = 1/(2 * 10^-3) ms =1000/2 = 500 Hz
compare match register = [ 16,000,000Hz/ (prescaler * desired
interrupt frequency) ] – 1
Prescaler ditentukan 1024
CTC Value = [16000000/(1024*500)]-1
= 30.5 = 30
Maka OCR0A = 30;
CONTOH KONFIGURASI
Maka konfigurasi menjadi :
cli(); // disable interrupt
TCCR0A = 0;
TCCR0B = 0;
TCNT0 = 0;
OCR0A = 30; //decimal 30
// turn on CTC mode
TCCR0A |= (1 << WGM01);
// Set CS02 and CS00 bits for 1024 prescaler
TCCR0B |= (1 << CS02) | (1 << CS00);
// enable timer compare interrupt
TIMSK0 |= (1 << OCIE0A); // karena menggunakan OCR0A
sei(); // Enable interrupt
CONTOH KONFIGURASI 2
Timer mengunakan timer 0 dengan interrupt CTC setiap 1 s
Frekuensi interrupt = 1/1 = 1 Hz
compare match register = [ 16,000,000Hz/ (prescaler * desired interrupt
frequency) ] – 1
Prescaler ditentukan 1024
CTC Value = [16000000/(1024*1)]-1
= 15624
Value CTC lebih besar dari 255 maka untuk konfigurasi ini tidak dapat
menggunakan timer0. untuk itu memerlukan timer dengan nilai CTC yang
lebih besar yaitu timer1 16 bit
TIMER 2
Kira-kira sama seperti timer 0 => datasheet
TIMER1
TIMER 1 – OCR1
Terdapat 2 buah OCR1 yaitu OCR1A dan OCR1B
Nilai OCR ini yang akan diisi sebagai compare dari CTC
TIMER1 – TCCR1
Untuk timer 1 maka TCCR1>>WGM12 harus di set sehingga menjadi
mode CTC
TCCR1A=0;
TCCR1B=0;
TCCR1B |= (1 << WGM12);// WGM12 => 1
TCCR1B |= (1 << CS10)|(1<<CS12); //SET PRESCALER 1024
TIMER1 – TCNT1
TCNT1 adalah register yang berfungsi menyimpan nilai cacahan dari
counter timer 1. Pada konfigurasi perlu untuk diset TCNT1 = 0;
TCNT1 dapat menampung data sampai 16 bit dengan membagi 2
menjadi TCNT1 high dan TCNT1 low
TIMER 1 – INTERRUPT MASK
Untuk mengaktif mode CTC sebagai mode interrupt maka perlu
dilakukan konfigurasi pada interrupt mask
TIMSK1 |= (1 << OCIE1A); // menggunakan OCR1A compare
TIMSK1 |= (1 << OCIE0B); // menggunakan OCR1B compare
TIMSK1 |= (1 << TOIE1); // menggunakan overflow event
OCIE1A
TIMER1 – INTERRUPT HANDLER
Dalam interrupt diperlukan sebuah handler yang menangani event
interrupt tersebut. Fungsi tersebut diletakan pada function ISR
Function :
ISR(TIMER1_COMPA_vect){
//your interrupt code here
}
Function :
ISR(TIMER1_COMPB_vect){
//your interrupt code here
}
CONTOH KONFIGURASI 2
Timer mengunakan timer 1 dengan interrupt CTC setiap 1 s
Frekuensi interrupt = 1/1 = 1 Hz
compare match register = [ 16,000,000Hz/ (prescaler * desired
interrupt frequency) ] – 1
Prescaler ditentukan 1024
CTC Value = [16000000/(1024*1)]-1
= 15624
CONTOH KONFIGURASI 2
Maka konfigurasi menjadi :
cli(); // disable interrupt
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
OCR1A = 15624; //decimal 15624
// turn on CTC mode
TCCR1B |= (1 << WGM12);// SET WGM12
// Set CS12 and CS10 bits for 1024 prescaler
TCCR1B |= (1 << CS10)|(1<<CS12);
// enable timer compare interrupt
TIMSK1 |= (1 << OCIE1A); // karena menggunakan OCR1A
sei(); // Enable interrupt
KONFIGURASI PADA ARDUINO IDE
INPUT INTERRUPT
Fungsi : attachInterrupt()
Board Digital Pins Usable For Interrupts
Uno, Nano, Mini, other 328-based 2, 3
Mega, Mega2560, MegaADK 2, 3, 18, 19, 20, 21
Micro, Leonardo, other 32u4-based 0, 1, 2, 3, 7
Zero, MKR1000 all digital pins, except 4
Due all digital pins
attachInterrupt(digitalPinToInterrupt(pin), ISR, mode);
INPUT INTERRUPT - MODE
- LOW
Memanggil ISR saat kondisi low pada pin
- CHANGE
Memanggil ISR saat terjadi perubahan kondisi pin
- RISING
Memanggil ISR saat terjadi perubahan low to high
- FALLING
Memanggil ISR saat terjadi perubahan high to low
- HIGH (ONLY FOR ARDUINO DUE)
Memanggil ISR saat kondisi high pada pin
INPUT INTERRUPT
int pin=2;
volatile int state=LOW;
void setup() {
// put your setup code here, to run once:
pinMode(pin,INPUT);
pinMode(13,OUTPUT);
attachInterrupt(digitalPinToInterrupt(pin),blink,CHANGE);
}
void loop() {
digitalWrite(13,state);
}
void blink(){
state=!state;
}
INTERRUPT MANAGEMENT
Pada Arduino terdapat 2 buah fungsi yang berhubungan langsung pada penggunaan interrupt. Yaitu
interrupts(); => Berfungsi untuk menyalakan interrupt
noInterrupts(); => Berfungsi untuk mematikan interrupt
CODE :
void setup() {}
void loop()
{
noInterrupts();
// critical, time-sensitive code here
interrupts();
// other code here
}
DELAY
DELAY bertujuan untuk menunda suatu instruksi. Terdapat dua buah
jenis delay yaitu
 Delay Blocking
 Delay Non Blocking
DELAY BLOCKING
Delay blocking adalah delay yang memblockir instruksi secara
keseluruhan sehingga saat delay ini diaktifkan maka CPU berhenti
bekerja dan menunggu sampai dengan waktu yang ditentukan
tercapai.
CODE :
Delay(1000); // menghentikan program selama satu detik
CONTOH DELAY BLOCKING -
BLINKING LED
int ledPin = 13; // LED connected to digital pin 13
void setup()
{
pinMode(ledPin, OUTPUT); // sets the digital pin as output
}
void loop()
{
digitalWrite(ledPin, HIGH); // sets the LED on
delay(1000); // waits for a second
digitalWrite(ledPin, LOW); // sets the LED off
delay(1000); // waits for a second
}
DELAY NON BLOCKING
Delay non blocking bertujuan untuk membuat delay yang tidak
menghambat CPU bekerja secara total. Sehingga program dapat
berjalan secara “Multi Tasking”
Untuk membuat delay non blocking diperlukan sebuah interrupt yang
bekerja setiap waktu tertentu dan berfungsi sebagai detak jantung
dari delay
MEMBUAT INTERRUPT SETIAP 1 MS
Timer mengunakan timer 0 dengan interrupt CTC setiap 1 ms
Frekuensi interrupt = 1/(1 * 10^-3) ms =1000/1 = 1000 Hz
compare match register = [ 16,000,000Hz/ (prescaler * desired
interrupt frequency) ] – 1
Prescaler ditentukan 256
CTC Value = [16000000/(256*1000)]-1
= 62.5 = 63
Maka OCR0A = 63;
KONFIGURASI DELAY NON
BLOCKINGSETUP :
cli(); // disable interrupt
TCCR0A = 0;
TCCR0B = 0;
TCNT0 = 0;
OCR0A = 63; // interrupt setiap 1 ms
// turn on CTC mode
TCCR0A |= (1 << WGM01);
// Set CS02 bits for 256 prescaler
TCCR0B |= (1 << CS02);
// enable timer compare interrupt
TIMSK0 |= (1 << OCIE0A); // karena menggunakan OCR0A
sei(); // Enable interrupt
INTERRUPT HANDLER DAN
DEKLARASI
DEKLARASI VARIABEL:
volatile unsigned long ticks;
INTERRUPT HANDLER :
ISR(TIMER0_COMPA_vect){
//your interrupt code here
ticks++;
if(ticks>=65537){
ticks=0;
}
}
MEMBUAT DELAY NON BLOCKING –
INTERRUPT CTC
DEKLARASI VARIABEL:
unsigned long blinks;
SETUP :
blinks=ticks;
CODE :
if(ticks-blinks>=delay){
// Do something
blinks=ticks;
}
*delay sesuai dengan angka yang diinginkan
CONTOH DELAY NON BLOCKING
INTERRUPT CTC – BLINKING LED
volatile unsigned long ticks;
unsigned long blinks;
int led1;
void setup() {
pinMode(13,OUTPUT);
cli(); // disable interrupt
TCCR0A = 0;
TCCR0B = 0;
TCNT0 = 0;
OCR0A = 63; // interrupt setiap
1 ms
TCCR0A |= (1 << WGM01);
TCCR0B |= (1 << CS02);
TIMSK0 |= (1 << OCIE0A);
sei(); // Enable interrupt
blinks=ticks;
led1=0;
void loop() {
unsigned long cticks=ticks;
if(cticks-blinks>=1000){
if(led1==0){
led1=1;
}else{
led1=0;
}
blinks=ticks;
digitalWrite(13,led1);
}
}
ISR(TIMER0_COMPA_vect){
ticks++;
if(ticks>=65537){
ticks=0;
}
}
MILLIS()
millis() digunakan untuk mengetahui berapa lama Arduino telah berjalan.
Terjadi overlflow setiap 50 hari. Kemudian nilai milis() akan direset ke 0.
millis() memanfaatkan timer 0 dengan mode fast pwm.
CODE :
unsigned long time;
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.print("Time: ");
time = millis();
Serial.println(time);
delay(1000);
}
MICROS()
micros() digunakan untuk mengetahui berapa lama Arduino telah berjalan. Terjadi overlflow setiap 70
menit. Kemudian nilai micros() akan direset ke 0. Resolusi dari micros() adalah 4 us. micros()
memanfaatkan timer 0 dengan mode fast pwm.
CODE :
unsigned long time;
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.print("Time: ");
time = micros();
Serial.println(time);
delay(1000);
}
MEMBUAT DELAY NON BLOCKING –
MENGGUNAKAN MILIS()
unsigned long previousMillis = 0;
const long interval = 1000;
const int ledPin = 13;
int ledState = LOW;
void setup() {
previousMillis=millis();
pinMode(ledPin, OUTPUT);
}
void loop() {
// put your main code here, to run
repeatedly:
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >=
interval) {
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}
digitalWrite(ledPin, ledState);
previousMillis=currentMillis;
}
}
ANALOG WRITE - PWM
SETUP :
pinMode(ledPin, OUTPUT);
CODE :
analogWrite(ledPin, 8 bit value);
ANALOG READ
CODE :
sensorValue = analogRead(sensorPin);
Hasil dari analog read berupa data dari 0 – 1023 dapat di convert
menjadi 0 – 255 untuk keperluan eeprom misalnya maka hasil
read dapat di map yaitu dengan memanggil function map
map(sensorValue, 0, 1023, 0, 255);
Fitur map dapat berlaku untuk aplikasi lainnya yang membutuhkan
fitur perbandingan angka
ANALOG EXAMPLE
int sensorPin = A0; // select the input pin for the potentiometer
int ledPin = 3; // select the pin for the LED
int sensorValue = 0; // variable to store the value coming from the
sensor
void setup() {
// declare the ledPin as an OUTPUT:
pinMode(ledPin, OUTPUT);
}
ANALOG EXAMPLE
void loop() {
// read the value from the sensor:
sensorValue = analogRead(sensorPin);
analogWrite(LedPin, sensorValue);
}
EEPROM
LIBRARY :
#include <EEPROM.h>
PENGGUNAAN :
EEPROM memiliki Address dengan max address sesuai dengan
Arduino yang digunakan (ARDUINO UNO 1 KB / 1000 ADDRESS)
Setiap BYTE / ADDRESS dapat menampung unsigned integer value
antara 0 sampai 255. Untuk data yang lebih besar perlu dipotong
sebelum dimasukan kedalam eeprom
WRITE
CODE :
EEPROM.write(addr, val);
Addr adalah address dari eeprom
* Terdapat fungsi EEPROM.length() yang berguna untuk mengetahui
length address dari Arduino tersebut
READ
CODE :
value = EEPROM.read(address);
* Address merupakan alamat dari data yang disimpan dalam eeprom
I2C
Uno, Ethernet A4 (SDA), A5 (SCL)
Mega2560 20 (SDA), 21 (SCL)
Leonardo 2 (SDA), 3 (SCL)
Due 20 (SDA), 21 (SCL), SDA1, SCL1
I2C – DS1307 REAL TIME CLOCK
Crystal / XTAL : 32.768 KHz
LIBRARY DS1307 RTC
URL Download :
http://www.instructables.com/files/orig/FC2/O0HR/HW4OIBWY/FC2
O0HRHW4OIBWY.zip
I2C - DS1307 REAL TIME CLOCK
INCLUDE :
#include <Wire.h>
#include <RealTimeClockDS1307.h>
START CLOCK :
RTC.start();
STOP CLOCK :
RTC.stop();
I2C - DS1307 REAL TIME CLOCK
TIME COMMAND :
//Checks whether the clock is running.
RTC.isStopped();
//Check whether it is AM or PM(1) depending on the output(given
above).
RTC.isPM();
//Checks whether the clock is in 24hour mode.
RTC.is12hour();
//Toggles between the 12hour mode and 24hour mode.
RTC.switchTo24h();
I2C - DS1307 REAL TIME CLOCK
READ CLOCK :
int hours = 0;
int minutes = 0;
int seconds = 0;
int dates = 0;
int months = 0;
int years = 0;
int date = 0;
//syntax for setting the values to the integers
RTC.readClock(); //This line is essential for the other commands to work.
//Commands for getting the individual time values.
hours = RTC.getHours();
minutes = RTC.getMinutes();
seconds = RTC.getSeconds();
dates = RTC.getDate();
months = RTC.getMonth();
years = RTC.getYear();
date = RTC.getDayofWeek();
I2C - DS1307 REAL TIME CLOCK
WRITE CLOCK :
RTC.setHours(jam);
RTC.setMinutes(menit);
RTC.setSeconds(detik);
RTC.setDate(hari);
RTC.setMonth(bulan);
RTC.setYear(tahun);
RTC.set24h();
//RTC.setAM();
RTC.setPM();
RTC.setDayofWeek(1);
LCD 16X2
INCLUDE :
#include <LiquidCrystal.h>
LIQUID CRYSTAL CONFIGURATION
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//LCD RS pin to digital pin 12
//LCD Enable pin to digital pin 11
//LCD D4 pin to digital pin 5
//LCD D5 pin to digital pin 4
//LCD D6 pin to digital pin 3
//LCD D7 pin to digital pin 2
//LCD R/W pin to ground
//LCD VSS pin to ground
//LCD VCC pin to 5V
LCD 16X2
SETUP :
lcd.begin(16, 2);
CODE :
lcd.setCursor(0, 0);
lcd.print(“Hello World!”);
THE END

More Related Content

What's hot

Modul arduino i ii
Modul arduino i iiModul arduino i ii
Modul arduino i iisutono stn
 
Automatic Door Control using LM35 Sensor
Automatic Door Control using LM35 SensorAutomatic Door Control using LM35 Sensor
Automatic Door Control using LM35 SensorAghnia Rusydah
 
Humid and temp sensor dht11 with arduino
Humid and temp sensor dht11 with arduinoHumid and temp sensor dht11 with arduino
Humid and temp sensor dht11 with arduinorena hakimah
 
Humidity and temperature sensor using dht11 with arduino
Humidity and temperature sensor using dht11 with arduinoHumidity and temperature sensor using dht11 with arduino
Humidity and temperature sensor using dht11 with arduinoAsep Subagja
 
17 proyek arduino
17 proyek arduino17 proyek arduino
17 proyek arduinoJilun
 
Laporan praktikum mikrokontroler dengan led
Laporan praktikum mikrokontroler dengan ledLaporan praktikum mikrokontroler dengan led
Laporan praktikum mikrokontroler dengan ledSawah Dan Ladang Ku
 
arduino
arduinoarduino
arduinojhcid
 
Project Sistem Pegukuran Arduino
Project Sistem Pegukuran ArduinoProject Sistem Pegukuran Arduino
Project Sistem Pegukuran ArduinoYasyfiFai
 
Humidity and temperature sensor using dht11 with arduino
Humidity and temperature sensor using dht11 with arduinoHumidity and temperature sensor using dht11 with arduino
Humidity and temperature sensor using dht11 with arduinoDwinanda Gitta
 
Humidity and temperature sensor using dht11 with arduino
Humidity and temperature sensor using dht11 with arduinoHumidity and temperature sensor using dht11 with arduino
Humidity and temperature sensor using dht11 with arduinosanarosalina
 
Project arduino uno with sound sensor
Project arduino uno with sound sensorProject arduino uno with sound sensor
Project arduino uno with sound sensorMuhammad Rezza
 
Sistem pengukuran berbasis arduino
Sistem pengukuran berbasis arduinoSistem pengukuran berbasis arduino
Sistem pengukuran berbasis arduinoAlyaPenta1
 
Parking sensor with arduino
Parking sensor with arduinoParking sensor with arduino
Parking sensor with arduinohilmanboimzt
 

What's hot (15)

Laporan embedded system
Laporan   embedded systemLaporan   embedded system
Laporan embedded system
 
Modul arduino i ii
Modul arduino i iiModul arduino i ii
Modul arduino i ii
 
Automatic Door Control using LM35 Sensor
Automatic Door Control using LM35 SensorAutomatic Door Control using LM35 Sensor
Automatic Door Control using LM35 Sensor
 
Humid and temp sensor dht11 with arduino
Humid and temp sensor dht11 with arduinoHumid and temp sensor dht11 with arduino
Humid and temp sensor dht11 with arduino
 
Humidity and temperature sensor using dht11 with arduino
Humidity and temperature sensor using dht11 with arduinoHumidity and temperature sensor using dht11 with arduino
Humidity and temperature sensor using dht11 with arduino
 
17 proyek arduino
17 proyek arduino17 proyek arduino
17 proyek arduino
 
Laporan praktikum mikrokontroler dengan led
Laporan praktikum mikrokontroler dengan ledLaporan praktikum mikrokontroler dengan led
Laporan praktikum mikrokontroler dengan led
 
arduino
arduinoarduino
arduino
 
Project Sistem Pegukuran Arduino
Project Sistem Pegukuran ArduinoProject Sistem Pegukuran Arduino
Project Sistem Pegukuran Arduino
 
Humidity and temperature sensor using dht11 with arduino
Humidity and temperature sensor using dht11 with arduinoHumidity and temperature sensor using dht11 with arduino
Humidity and temperature sensor using dht11 with arduino
 
Humidity and temperature sensor using dht11 with arduino
Humidity and temperature sensor using dht11 with arduinoHumidity and temperature sensor using dht11 with arduino
Humidity and temperature sensor using dht11 with arduino
 
Traffic and enviromental device
Traffic and enviromental deviceTraffic and enviromental device
Traffic and enviromental device
 
Project arduino uno with sound sensor
Project arduino uno with sound sensorProject arduino uno with sound sensor
Project arduino uno with sound sensor
 
Sistem pengukuran berbasis arduino
Sistem pengukuran berbasis arduinoSistem pengukuran berbasis arduino
Sistem pengukuran berbasis arduino
 
Parking sensor with arduino
Parking sensor with arduinoParking sensor with arduino
Parking sensor with arduino
 

Viewers also liked

Cassiopeia Ltd - standard Arduino workshop
Cassiopeia Ltd - standard Arduino workshopCassiopeia Ltd - standard Arduino workshop
Cassiopeia Ltd - standard Arduino workshoptomtobback
 
Introduction to arduino
Introduction to arduinoIntroduction to arduino
Introduction to arduinoAhmed Sakr
 
CSTalks - Object detection and tracking - 25th May
CSTalks - Object detection and tracking - 25th MayCSTalks - Object detection and tracking - 25th May
CSTalks - Object detection and tracking - 25th Maycstalks
 
Automatic vehicle license plate detection using VEDA
Automatic vehicle license plate detection using VEDAAutomatic vehicle license plate detection using VEDA
Automatic vehicle license plate detection using VEDARojith Thomas
 
A start point on a security study of a Raspberry pi version 0.4
A start point on a security study of a Raspberry pi version 0.4A start point on a security study of a Raspberry pi version 0.4
A start point on a security study of a Raspberry pi version 0.4Kiyoshi Ogawa
 
Java.ino - Plataforma de Programação para Arduino com Java
Java.ino - Plataforma de Programação para Arduino com JavaJava.ino - Plataforma de Programação para Arduino com Java
Java.ino - Plataforma de Programação para Arduino com JavaNewton Gomes
 
Rfid based vechile parking management system
Rfid based vechile parking management systemRfid based vechile parking management system
Rfid based vechile parking management systemSaurav Suman
 
Outsourcing To Find, Fund, Flip, and Grow Rich
Outsourcing To Find, Fund, Flip, and Grow RichOutsourcing To Find, Fund, Flip, and Grow Rich
Outsourcing To Find, Fund, Flip, and Grow RichGabriel Jimenez
 
Bionic arduino class1_russian
Bionic arduino class1_russianBionic arduino class1_russian
Bionic arduino class1_russiansrgksch
 
Гирлянда для программистов
Гирлянда для программистовГирлянда для программистов
Гирлянда для программистовGetDev.NET
 
Bionic arduino class4_russian
Bionic arduino class4_russianBionic arduino class4_russian
Bionic arduino class4_russiansrgksch
 
Raspberry pi lnl
Raspberry pi lnlRaspberry pi lnl
Raspberry pi lnlDon Doerres
 
Arduino training day 1
Arduino training day 1Arduino training day 1
Arduino training day 1Binod Thapa
 
Arduino – это просто!
Arduino – это просто!Arduino – это просто!
Arduino – это просто!Marat Lukyanov
 

Viewers also liked (20)

Cassiopeia Ltd - standard Arduino workshop
Cassiopeia Ltd - standard Arduino workshopCassiopeia Ltd - standard Arduino workshop
Cassiopeia Ltd - standard Arduino workshop
 
Introduction to arduino
Introduction to arduinoIntroduction to arduino
Introduction to arduino
 
So i got an Arduino now what
So i got an Arduino now whatSo i got an Arduino now what
So i got an Arduino now what
 
Keyword Pada Bahasa C
Keyword Pada Bahasa CKeyword Pada Bahasa C
Keyword Pada Bahasa C
 
CSTalks - Object detection and tracking - 25th May
CSTalks - Object detection and tracking - 25th MayCSTalks - Object detection and tracking - 25th May
CSTalks - Object detection and tracking - 25th May
 
Automatic vehicle license plate detection using VEDA
Automatic vehicle license plate detection using VEDAAutomatic vehicle license plate detection using VEDA
Automatic vehicle license plate detection using VEDA
 
Arduino
ArduinoArduino
Arduino
 
Dyor arduino
Dyor arduinoDyor arduino
Dyor arduino
 
A start point on a security study of a Raspberry pi version 0.4
A start point on a security study of a Raspberry pi version 0.4A start point on a security study of a Raspberry pi version 0.4
A start point on a security study of a Raspberry pi version 0.4
 
Java.ino - Plataforma de Programação para Arduino com Java
Java.ino - Plataforma de Programação para Arduino com JavaJava.ino - Plataforma de Programação para Arduino com Java
Java.ino - Plataforma de Programação para Arduino com Java
 
Rfid based vechile parking management system
Rfid based vechile parking management systemRfid based vechile parking management system
Rfid based vechile parking management system
 
Outsourcing To Find, Fund, Flip, and Grow Rich
Outsourcing To Find, Fund, Flip, and Grow RichOutsourcing To Find, Fund, Flip, and Grow Rich
Outsourcing To Find, Fund, Flip, and Grow Rich
 
Bionic arduino class1_russian
Bionic arduino class1_russianBionic arduino class1_russian
Bionic arduino class1_russian
 
Гирлянда для программистов
Гирлянда для программистовГирлянда для программистов
Гирлянда для программистов
 
Bionic arduino class4_russian
Bionic arduino class4_russianBionic arduino class4_russian
Bionic arduino class4_russian
 
Iot meetup 07.10.15
Iot meetup 07.10.15Iot meetup 07.10.15
Iot meetup 07.10.15
 
Raspberry pi lnl
Raspberry pi lnlRaspberry pi lnl
Raspberry pi lnl
 
01
0101
01
 
Arduino training day 1
Arduino training day 1Arduino training day 1
Arduino training day 1
 
Arduino – это просто!
Arduino – это просто!Arduino – это просто!
Arduino – это просто!
 

Similar to ARDUINO

Membuat stopwatch menggunakan mikrokontroler atmega16 by muhammad kennedy gin...
Membuat stopwatch menggunakan mikrokontroler atmega16 by muhammad kennedy gin...Membuat stopwatch menggunakan mikrokontroler atmega16 by muhammad kennedy gin...
Membuat stopwatch menggunakan mikrokontroler atmega16 by muhammad kennedy gin...Muhammad Kennedy Ginting
 
Mikrokontroler io tombol dan led
Mikrokontroler io tombol dan ledMikrokontroler io tombol dan led
Mikrokontroler io tombol dan ledJodit Sulistyo
 
Tutorial membuat project termometer dan jam digital menggunakan codevision av...
Tutorial membuat project termometer dan jam digital menggunakan codevision av...Tutorial membuat project termometer dan jam digital menggunakan codevision av...
Tutorial membuat project termometer dan jam digital menggunakan codevision av...Muhammad Kennedy Ginting
 
Tugas akhir muhamad iqbal ramdhani arduino sensor gas
Tugas akhir muhamad iqbal ramdhani arduino sensor gasTugas akhir muhamad iqbal ramdhani arduino sensor gas
Tugas akhir muhamad iqbal ramdhani arduino sensor gasMuhamadIqbalRamdhani
 
Latihan Arduino.pptx
Latihan Arduino.pptxLatihan Arduino.pptx
Latihan Arduino.pptxVidi34
 
Perancangan keypad mesin fotocopy sederhana menggunakan ATmega8535
Perancangan keypad mesin fotocopy sederhana menggunakan ATmega8535Perancangan keypad mesin fotocopy sederhana menggunakan ATmega8535
Perancangan keypad mesin fotocopy sederhana menggunakan ATmega8535al farisi
 
Presentasi makalah interface & peripheral
Presentasi makalah interface & peripheralPresentasi makalah interface & peripheral
Presentasi makalah interface & peripheralyohanesjati
 
Praktikum Mikrokontoler 2
Praktikum Mikrokontoler 2  Praktikum Mikrokontoler 2
Praktikum Mikrokontoler 2 Muhammad Taufik
 
Adc (analog to digital converter)
Adc (analog to digital converter)Adc (analog to digital converter)
Adc (analog to digital converter)akbar010
 
MODUL PLC (Programmable Logic Control) DIDIK
MODUL PLC (Programmable Logic Control) DIDIKMODUL PLC (Programmable Logic Control) DIDIK
MODUL PLC (Programmable Logic Control) DIDIKDidik Supriyono
 
Projek arduino uno with sound sensor
Projek arduino uno with sound sensorProjek arduino uno with sound sensor
Projek arduino uno with sound sensorBernaz Bullah
 
Project arduino uno with sound sensor
Project arduino uno with sound sensorProject arduino uno with sound sensor
Project arduino uno with sound sensoranahadijah
 
Projek arduino uno with sound sensor
Projek arduino uno with sound sensorProjek arduino uno with sound sensor
Projek arduino uno with sound sensorMuhammad Alwan
 
Pengetahuan Dasar penggunaan Timer dan Counter Microcontroller AVR
Pengetahuan Dasar penggunaan Timer dan Counter Microcontroller AVR Pengetahuan Dasar penggunaan Timer dan Counter Microcontroller AVR
Pengetahuan Dasar penggunaan Timer dan Counter Microcontroller AVR KEN KEN
 
Adc (analog to digital converter)
Adc (analog to digital converter)Adc (analog to digital converter)
Adc (analog to digital converter)akbar010
 
IMPLEMENTASI RANGKAIAN COUNTER PADA DIGITAL CLOCK
IMPLEMENTASI RANGKAIAN COUNTER PADA DIGITAL CLOCKIMPLEMENTASI RANGKAIAN COUNTER PADA DIGITAL CLOCK
IMPLEMENTASI RANGKAIAN COUNTER PADA DIGITAL CLOCKmafailmi
 

Similar to ARDUINO (20)

Membuat stopwatch menggunakan mikrokontroler atmega16 by muhammad kennedy gin...
Membuat stopwatch menggunakan mikrokontroler atmega16 by muhammad kennedy gin...Membuat stopwatch menggunakan mikrokontroler atmega16 by muhammad kennedy gin...
Membuat stopwatch menggunakan mikrokontroler atmega16 by muhammad kennedy gin...
 
Mikrokontroler io tombol dan led
Mikrokontroler io tombol dan ledMikrokontroler io tombol dan led
Mikrokontroler io tombol dan led
 
Tutorial membuat project termometer dan jam digital menggunakan codevision av...
Tutorial membuat project termometer dan jam digital menggunakan codevision av...Tutorial membuat project termometer dan jam digital menggunakan codevision av...
Tutorial membuat project termometer dan jam digital menggunakan codevision av...
 
Tugas akhir muhamad iqbal ramdhani arduino sensor gas
Tugas akhir muhamad iqbal ramdhani arduino sensor gasTugas akhir muhamad iqbal ramdhani arduino sensor gas
Tugas akhir muhamad iqbal ramdhani arduino sensor gas
 
Sismik
Sismik Sismik
Sismik
 
Latihan Arduino.pptx
Latihan Arduino.pptxLatihan Arduino.pptx
Latihan Arduino.pptx
 
Perancangan keypad mesin fotocopy sederhana menggunakan ATmega8535
Perancangan keypad mesin fotocopy sederhana menggunakan ATmega8535Perancangan keypad mesin fotocopy sederhana menggunakan ATmega8535
Perancangan keypad mesin fotocopy sederhana menggunakan ATmega8535
 
Presentasi makalah interface & peripheral
Presentasi makalah interface & peripheralPresentasi makalah interface & peripheral
Presentasi makalah interface & peripheral
 
Praktikum Mikrokontoler 2
Praktikum Mikrokontoler 2  Praktikum Mikrokontoler 2
Praktikum Mikrokontoler 2
 
Adc (analog to digital converter)
Adc (analog to digital converter)Adc (analog to digital converter)
Adc (analog to digital converter)
 
Adc (analog to digital converter)
Adc (analog to digital converter)Adc (analog to digital converter)
Adc (analog to digital converter)
 
MODUL PLC (Programmable Logic Control) DIDIK
MODUL PLC (Programmable Logic Control) DIDIKMODUL PLC (Programmable Logic Control) DIDIK
MODUL PLC (Programmable Logic Control) DIDIK
 
SIMPLE SYSTEM OPERATING WITH ECLPSE
SIMPLE SYSTEM OPERATING WITH ECLPSESIMPLE SYSTEM OPERATING WITH ECLPSE
SIMPLE SYSTEM OPERATING WITH ECLPSE
 
Projek arduino uno with sound sensor
Projek arduino uno with sound sensorProjek arduino uno with sound sensor
Projek arduino uno with sound sensor
 
Project arduino uno with sound sensor
Project arduino uno with sound sensorProject arduino uno with sound sensor
Project arduino uno with sound sensor
 
Projek arduino uno with sound sensor
Projek arduino uno with sound sensorProjek arduino uno with sound sensor
Projek arduino uno with sound sensor
 
Pengetahuan Dasar penggunaan Timer dan Counter Microcontroller AVR
Pengetahuan Dasar penggunaan Timer dan Counter Microcontroller AVR Pengetahuan Dasar penggunaan Timer dan Counter Microcontroller AVR
Pengetahuan Dasar penggunaan Timer dan Counter Microcontroller AVR
 
Adc (analog to digital converter)
Adc (analog to digital converter)Adc (analog to digital converter)
Adc (analog to digital converter)
 
857
857857
857
 
IMPLEMENTASI RANGKAIAN COUNTER PADA DIGITAL CLOCK
IMPLEMENTASI RANGKAIAN COUNTER PADA DIGITAL CLOCKIMPLEMENTASI RANGKAIAN COUNTER PADA DIGITAL CLOCK
IMPLEMENTASI RANGKAIAN COUNTER PADA DIGITAL CLOCK
 

ARDUINO

  • 2. APA ITU ARDUINO ? Arduino merupakan mikrokontroller Atmel AVR yang dimodifikasi sehingga pemrogramannya menjadi lebih “mudah” “Arduino is an open-source prototyping platform based on easy-to- use hardware and software” Dikarenakan menggunakan Atmel AVR maka kemampuan dari Arduino mengikuti dari chip AVR yang menempel pada board ARDUINO merupakan AVR yang dimodifikasi bootloadernya sehingga bekerja dengan environment baru ( Dapat deprogram dengan serial)
  • 3. APA ITU ARDUINO ? ARDUINO merupakan mikrokontroller sehingga peruntukannya lebih mengacu pada MACHINE FRIENDLY tetapi karena disediakan banyak sekali library dan pihak developer berusaha untuk membuat kode mudah dipahami namun hal ini berimbas pada “ketidakpahaman user terhadap mikrokontroller secara mendalam” ARDUINO memiliki IDE dengan Bahasa C, menggunakan avr gcc
  • 4. DEVELOPMENT Web : https://www.arduino.cc/ Software IDE : https://www.arduino.cc/en/Main/Software Library Arduino : https://www.arduino.cc/en/Reference/Libraries Arduino Shield : https://www.arduino.cc/en/Main/ArduinoShields
  • 5. STRUKTUR BLOK DARI MEMORY AVR
  • 8. FITUR ARDUINO UNO 14 Pin I/O 16 MHz Clock Power Jack Memori Flash 32 KB ( 0.5 KB untuk bootloader), 2 KB SRAM, 1 KB EEPROM Komunikasi Serial pada pin 0(RX) dan 1(TX) EXT INTERRUPT pada pin 2 dan 3 PWM pada pin 3,5,6,9,10,11 -> 8 bit PWM LED pada pin 13 6 INPUT ANALOG
  • 9. PROGRAM void setup() { // put your setup code here, to run once: } void loop() { // put your main code here, to run repeatedly: }
  • 10. I/O - OUTPUT SETUP : pinMode(ledPin, OUTPUT); Ex : pinMode(0, OUTPUT); CODE : digitalWrite(ledPin, HIGH); digitalWrite(ledPin, LOW);
  • 11. BLINKING LED int ledPin = 13; // LED connected to digital pin 13 void setup() { pinMode(ledPin, OUTPUT); // sets the digital pin as output } void loop() { digitalWrite(ledPin, HIGH); // sets the LED on delay(1000); // waits for a second digitalWrite(ledPin, LOW); // sets the LED off delay(1000); // waits for a second }
  • 12. I/O READ pullup resistor (to +5V), or a pulldown resistor (resistor to ground) on the input. A 10K resistor is a good value for a pullup or pulldown resistor. SETUP : pinMode(inPin, INPUT); Ex : pinMode(0, INPUT); CODE : digitalRead(inPin);
  • 13. CAPTURE PUSH BUTTON int ledPin = 13; // LED connected to digital pin 13 int InPin = 7; int data; void setup() { pinMode(ledPin, OUTPUT); // sets the digital pin as output pinMode(InPin, INPUT); // sets the digital pin as output } void loop() { data=digitalRead(InPin); digitalWrite(ledPin, data); // sets the LED on }
  • 14. SERIAL SETUP : Serialx.begin(baud_rate); Baud Rate merupakan kecepatan pengiriman data Pilihan Baud rate : 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, dan 115200 x merupakan serial yang dipakai. Pada uno hanya terdapat 1 buah serial. Untuk serial 0 maka angka 0 tidak perlu ditulis sehingga setup menjadi Serial.begin(baud_rate);
  • 15. MENGIRIM DATA DENGAN SERIAL CODE : Serial.print(“text"); Serial.println(“text"); => print disertai dengan newline
  • 16. SERIAL SEND EXAMPLE void setup() { Serial.begin(9600); } void loop() { Serial.print(“hello world!!!”); Delay(500); }
  • 17. SERIAL READ Untuk mengetahui apakah terjadi pengiriman data ke Arduino maka dapat diketahui dengan melakukan cek pada Serialx.available() > 0 CODE : if (Serialx.available() > 0){ char = char(Serialx.read()); } * x disesuaikan dengan serial yang dipakai
  • 18. SERIAL READ – MULTIPLE CHARACTER Untuk menerima banyak karakter maka program perlu mengecek secara terus menerus apakah Serialx.available() > 0. Selama nilai tersebut > 0 maka data akan terus dimasukan kedalam string CODE : String cmd = ""; if (Serial1.available() > 0){ while (Serial1.available() > 0){ cmd += char(Serial1.read()); // memasukan setiap character kedalam string delay(1); // untuk baud rate 115200 } }
  • 19. SERIAL READ – PARSE / SPLIT DATA FUNCTION : String getValue(String data, char separator, int index) { int found = 0; int strIndex[] = { 0, -1 }; int maxIndex = data.length() - 1; for (int i = 0; i <= maxIndex && found <= index; i++){ if (data.charAt(i) == separator || i == maxIndex){ found++; strIndex[0] = strIndex[1] + 1; strIndex[1] = (i == maxIndex) ? i + 1 : i; } } return found>index ? data.substring(strIndex[0], strIndex[1]) : ""; }
  • 20. SERIAL READ – PARSE / SPLIT DATA CODE : String cmd = ""; if (Serial1.available() > 0){ while (Serial1.available() > 0){ cmd += char(Serial1.read()); delay(1); } } String index0 = getValue(cmd, ':', 0); String index1 = getValue(cmd, ':', 1); String index2 = getValue(cmd, ':', 2); String index3 = getValue(cmd, ':', 3);
  • 21. TIMER - INTERRUPT Tidak ada library resmi dari Arduino namun beberapa library support dapat digunakan seperti library pada URL : https://github.com/JChristensen/Timer Namun dengan menggunakan library yang tidak resmi Arduino maka beberapa konsekuensi seperti bugs tidak dapat dihindarkan untuk itu perlu menggunakan “TRUE C AVR” Pada Arduino semua timer dikonfigurasi menjadi output pwm, untuk itu perlu melakukan setting / konfigurasi
  • 22. PWM CAN’T BE USED ? Penggunaan timer0, timer1 dan timer2 dapat menggangu pin PWM pada ARDUINO sehingga perlu menyesuaikan pin mana saja yang memanfaatkan timer tersebut dan mana yang tidak. timer-0 terhubung dengan pin 5, 6 timer-1 terhubung dengan pin 9, 10 timer-2 terhubung dengan pin 3, 11
  • 24. TIMER – INTERRUPT CTC Pada AVR Atmega 328 yang dipakai oleh ARDUINO terdapat 3 buah timer yaitu timer 0, timer 1 dan timer2 dan setiap timer terdapat counter yang mencacah. Dengan mode CTC/ Clear Timer on Compare, Saat angka cacahan mencapai titik tertentu maka terjadi yang disebut trigger event atau update event atau overflow event. Event ini dapat kita pakai untuk menimbulkan interrupt. Diperlukan beberapa konfigurasi pada address tertentu agar timer dapat berjalan.
  • 25. TIMER – INTERRUPT CTC ARDUINO bekerja pada 16 MHz yang artinya setiap instruksi di jalankan setiap 1/16000000 atau (~63ns) per instruksi yang artinya juga bahwa cacahan dari timer akan mencapai nilai 9 pada detik ke 10/16000000 (Mulai dari 0) Dalam beberapa kejadian proses cacahan ini terlalu cepat. Maka dibutuhkan prescaler yang bertujuan untuk membagi 16 MHz ke dalam beberapa bagian. Terdapat 5 mode prescaler yaitu 1, 8, 64, 256, and 1024 Artinya jika prescaler yang digunakan 8 maka 16000000 akan dibagi dengan 8 sehingga kecepatan dari timer berada pada 2MHz
  • 26. TIMER – INTERRUPT CTC Langkah selanjutnya menentukan CTC value. Untuk menentukannya dapat menggunakan rumus : compare match register = [ 16,000,000Hz/ (prescaler * desired interrupt frequency) ] – 1 Nilai dari CTC untuk timer0 dan timer2 adalah 8 Bit yang artinya diantara 0 – 255 Nilai dari CTC untuk timer1 adalah 16 bit yang artinya diantara 0 - 65536
  • 27. TIMER0 DAN TIMER2– BLOCK DIAGRAM
  • 28. TIMER0 –OCR0 Terdapat 2 buah OCR0 yaitu OCR0A dan OCR0B Nilai OCR ini yang akan diisi sebagai compare dari CTC
  • 29. TIMER0 – TCCR0 Perlu konfigurasi agar timer diaktifkan sebagai mode CTC. Pada timer0 terdapat register TCCR0 yang berisi beberapa value yang perlu disetting agar menyalakan mode CTC TCCR0A =0; TCCR0B =0; TCCR0A |= (1 << WGM01); // membuat nilai WGM01 menjadi 1 TCCR0B |= (1 << CS02) | (1 << CS00); // Pemilihan prescaler 1024
  • 30. TIMER0 – TCNT0 TCNT0 adalah register yang berfungsi menyimpan nilai cacahan dari counter timer 0. Pada konfigurasi perlu untuk diset TCNT0 = 0; TCNT0 dapat menampung data 8 bit
  • 31. TIMER0 – INTERRUPT MASK Untuk mengaktif mode CTC sebagai mode interrupt maka perlu dilakukan konfigurasi pada interrupt mask TIMSK0 |= (1 << OCIE0A); // menggunakan OCR0A compare TIMSK0 |= (1 << OCIE0B); // menggunakan OCR0B compare TIMSK0 |= (1 << TOIE0); // menggunakan overflow event
  • 32. TIMER0 – INTERRUPT HANDLER Dalam interrupt diperlukan sebuah handler yang menangani event interrupt tersebut. Fungsi tersebut diletakan pada function ISR Function : ISR(TIMER0_COMPA_vect){ //your interrupt code here } Function : ISR(TIMER0_COMPB_vect){ //your interrupt code here }
  • 33. CONTOH KONFIGURASI Timer mengunakan timer 0 dengan interrupt CTC setiap 2 ms Frekuensi interrupt = 1/(2 * 10^-3) ms =1000/2 = 500 Hz compare match register = [ 16,000,000Hz/ (prescaler * desired interrupt frequency) ] – 1 Prescaler ditentukan 1024 CTC Value = [16000000/(1024*500)]-1 = 30.5 = 30 Maka OCR0A = 30;
  • 34. CONTOH KONFIGURASI Maka konfigurasi menjadi : cli(); // disable interrupt TCCR0A = 0; TCCR0B = 0; TCNT0 = 0; OCR0A = 30; //decimal 30 // turn on CTC mode TCCR0A |= (1 << WGM01); // Set CS02 and CS00 bits for 1024 prescaler TCCR0B |= (1 << CS02) | (1 << CS00); // enable timer compare interrupt TIMSK0 |= (1 << OCIE0A); // karena menggunakan OCR0A sei(); // Enable interrupt
  • 35. CONTOH KONFIGURASI 2 Timer mengunakan timer 0 dengan interrupt CTC setiap 1 s Frekuensi interrupt = 1/1 = 1 Hz compare match register = [ 16,000,000Hz/ (prescaler * desired interrupt frequency) ] – 1 Prescaler ditentukan 1024 CTC Value = [16000000/(1024*1)]-1 = 15624 Value CTC lebih besar dari 255 maka untuk konfigurasi ini tidak dapat menggunakan timer0. untuk itu memerlukan timer dengan nilai CTC yang lebih besar yaitu timer1 16 bit
  • 36. TIMER 2 Kira-kira sama seperti timer 0 => datasheet
  • 38. TIMER 1 – OCR1 Terdapat 2 buah OCR1 yaitu OCR1A dan OCR1B Nilai OCR ini yang akan diisi sebagai compare dari CTC
  • 39. TIMER1 – TCCR1 Untuk timer 1 maka TCCR1>>WGM12 harus di set sehingga menjadi mode CTC TCCR1A=0; TCCR1B=0; TCCR1B |= (1 << WGM12);// WGM12 => 1 TCCR1B |= (1 << CS10)|(1<<CS12); //SET PRESCALER 1024
  • 40. TIMER1 – TCNT1 TCNT1 adalah register yang berfungsi menyimpan nilai cacahan dari counter timer 1. Pada konfigurasi perlu untuk diset TCNT1 = 0; TCNT1 dapat menampung data sampai 16 bit dengan membagi 2 menjadi TCNT1 high dan TCNT1 low
  • 41. TIMER 1 – INTERRUPT MASK Untuk mengaktif mode CTC sebagai mode interrupt maka perlu dilakukan konfigurasi pada interrupt mask TIMSK1 |= (1 << OCIE1A); // menggunakan OCR1A compare TIMSK1 |= (1 << OCIE0B); // menggunakan OCR1B compare TIMSK1 |= (1 << TOIE1); // menggunakan overflow event OCIE1A
  • 42. TIMER1 – INTERRUPT HANDLER Dalam interrupt diperlukan sebuah handler yang menangani event interrupt tersebut. Fungsi tersebut diletakan pada function ISR Function : ISR(TIMER1_COMPA_vect){ //your interrupt code here } Function : ISR(TIMER1_COMPB_vect){ //your interrupt code here }
  • 43. CONTOH KONFIGURASI 2 Timer mengunakan timer 1 dengan interrupt CTC setiap 1 s Frekuensi interrupt = 1/1 = 1 Hz compare match register = [ 16,000,000Hz/ (prescaler * desired interrupt frequency) ] – 1 Prescaler ditentukan 1024 CTC Value = [16000000/(1024*1)]-1 = 15624
  • 44. CONTOH KONFIGURASI 2 Maka konfigurasi menjadi : cli(); // disable interrupt TCCR1A = 0; TCCR1B = 0; TCNT1 = 0; OCR1A = 15624; //decimal 15624 // turn on CTC mode TCCR1B |= (1 << WGM12);// SET WGM12 // Set CS12 and CS10 bits for 1024 prescaler TCCR1B |= (1 << CS10)|(1<<CS12); // enable timer compare interrupt TIMSK1 |= (1 << OCIE1A); // karena menggunakan OCR1A sei(); // Enable interrupt
  • 46. INPUT INTERRUPT Fungsi : attachInterrupt() Board Digital Pins Usable For Interrupts Uno, Nano, Mini, other 328-based 2, 3 Mega, Mega2560, MegaADK 2, 3, 18, 19, 20, 21 Micro, Leonardo, other 32u4-based 0, 1, 2, 3, 7 Zero, MKR1000 all digital pins, except 4 Due all digital pins attachInterrupt(digitalPinToInterrupt(pin), ISR, mode);
  • 47. INPUT INTERRUPT - MODE - LOW Memanggil ISR saat kondisi low pada pin - CHANGE Memanggil ISR saat terjadi perubahan kondisi pin - RISING Memanggil ISR saat terjadi perubahan low to high - FALLING Memanggil ISR saat terjadi perubahan high to low - HIGH (ONLY FOR ARDUINO DUE) Memanggil ISR saat kondisi high pada pin
  • 48. INPUT INTERRUPT int pin=2; volatile int state=LOW; void setup() { // put your setup code here, to run once: pinMode(pin,INPUT); pinMode(13,OUTPUT); attachInterrupt(digitalPinToInterrupt(pin),blink,CHANGE); } void loop() { digitalWrite(13,state); } void blink(){ state=!state; }
  • 49. INTERRUPT MANAGEMENT Pada Arduino terdapat 2 buah fungsi yang berhubungan langsung pada penggunaan interrupt. Yaitu interrupts(); => Berfungsi untuk menyalakan interrupt noInterrupts(); => Berfungsi untuk mematikan interrupt CODE : void setup() {} void loop() { noInterrupts(); // critical, time-sensitive code here interrupts(); // other code here }
  • 50. DELAY DELAY bertujuan untuk menunda suatu instruksi. Terdapat dua buah jenis delay yaitu  Delay Blocking  Delay Non Blocking
  • 51. DELAY BLOCKING Delay blocking adalah delay yang memblockir instruksi secara keseluruhan sehingga saat delay ini diaktifkan maka CPU berhenti bekerja dan menunggu sampai dengan waktu yang ditentukan tercapai. CODE : Delay(1000); // menghentikan program selama satu detik
  • 52. CONTOH DELAY BLOCKING - BLINKING LED int ledPin = 13; // LED connected to digital pin 13 void setup() { pinMode(ledPin, OUTPUT); // sets the digital pin as output } void loop() { digitalWrite(ledPin, HIGH); // sets the LED on delay(1000); // waits for a second digitalWrite(ledPin, LOW); // sets the LED off delay(1000); // waits for a second }
  • 53. DELAY NON BLOCKING Delay non blocking bertujuan untuk membuat delay yang tidak menghambat CPU bekerja secara total. Sehingga program dapat berjalan secara “Multi Tasking” Untuk membuat delay non blocking diperlukan sebuah interrupt yang bekerja setiap waktu tertentu dan berfungsi sebagai detak jantung dari delay
  • 54. MEMBUAT INTERRUPT SETIAP 1 MS Timer mengunakan timer 0 dengan interrupt CTC setiap 1 ms Frekuensi interrupt = 1/(1 * 10^-3) ms =1000/1 = 1000 Hz compare match register = [ 16,000,000Hz/ (prescaler * desired interrupt frequency) ] – 1 Prescaler ditentukan 256 CTC Value = [16000000/(256*1000)]-1 = 62.5 = 63 Maka OCR0A = 63;
  • 55. KONFIGURASI DELAY NON BLOCKINGSETUP : cli(); // disable interrupt TCCR0A = 0; TCCR0B = 0; TCNT0 = 0; OCR0A = 63; // interrupt setiap 1 ms // turn on CTC mode TCCR0A |= (1 << WGM01); // Set CS02 bits for 256 prescaler TCCR0B |= (1 << CS02); // enable timer compare interrupt TIMSK0 |= (1 << OCIE0A); // karena menggunakan OCR0A sei(); // Enable interrupt
  • 56. INTERRUPT HANDLER DAN DEKLARASI DEKLARASI VARIABEL: volatile unsigned long ticks; INTERRUPT HANDLER : ISR(TIMER0_COMPA_vect){ //your interrupt code here ticks++; if(ticks>=65537){ ticks=0; } }
  • 57. MEMBUAT DELAY NON BLOCKING – INTERRUPT CTC DEKLARASI VARIABEL: unsigned long blinks; SETUP : blinks=ticks; CODE : if(ticks-blinks>=delay){ // Do something blinks=ticks; } *delay sesuai dengan angka yang diinginkan
  • 58. CONTOH DELAY NON BLOCKING INTERRUPT CTC – BLINKING LED volatile unsigned long ticks; unsigned long blinks; int led1; void setup() { pinMode(13,OUTPUT); cli(); // disable interrupt TCCR0A = 0; TCCR0B = 0; TCNT0 = 0; OCR0A = 63; // interrupt setiap 1 ms TCCR0A |= (1 << WGM01); TCCR0B |= (1 << CS02); TIMSK0 |= (1 << OCIE0A); sei(); // Enable interrupt blinks=ticks; led1=0; void loop() { unsigned long cticks=ticks; if(cticks-blinks>=1000){ if(led1==0){ led1=1; }else{ led1=0; } blinks=ticks; digitalWrite(13,led1); } } ISR(TIMER0_COMPA_vect){ ticks++; if(ticks>=65537){ ticks=0; } }
  • 59. MILLIS() millis() digunakan untuk mengetahui berapa lama Arduino telah berjalan. Terjadi overlflow setiap 50 hari. Kemudian nilai milis() akan direset ke 0. millis() memanfaatkan timer 0 dengan mode fast pwm. CODE : unsigned long time; void setup(){ Serial.begin(9600); } void loop(){ Serial.print("Time: "); time = millis(); Serial.println(time); delay(1000); }
  • 60. MICROS() micros() digunakan untuk mengetahui berapa lama Arduino telah berjalan. Terjadi overlflow setiap 70 menit. Kemudian nilai micros() akan direset ke 0. Resolusi dari micros() adalah 4 us. micros() memanfaatkan timer 0 dengan mode fast pwm. CODE : unsigned long time; void setup(){ Serial.begin(9600); } void loop(){ Serial.print("Time: "); time = micros(); Serial.println(time); delay(1000); }
  • 61. MEMBUAT DELAY NON BLOCKING – MENGGUNAKAN MILIS() unsigned long previousMillis = 0; const long interval = 1000; const int ledPin = 13; int ledState = LOW; void setup() { previousMillis=millis(); pinMode(ledPin, OUTPUT); } void loop() { // put your main code here, to run repeatedly: unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { if (ledState == LOW) { ledState = HIGH; } else { ledState = LOW; } digitalWrite(ledPin, ledState); previousMillis=currentMillis; } }
  • 62. ANALOG WRITE - PWM SETUP : pinMode(ledPin, OUTPUT); CODE : analogWrite(ledPin, 8 bit value);
  • 63. ANALOG READ CODE : sensorValue = analogRead(sensorPin); Hasil dari analog read berupa data dari 0 – 1023 dapat di convert menjadi 0 – 255 untuk keperluan eeprom misalnya maka hasil read dapat di map yaitu dengan memanggil function map map(sensorValue, 0, 1023, 0, 255); Fitur map dapat berlaku untuk aplikasi lainnya yang membutuhkan fitur perbandingan angka
  • 64. ANALOG EXAMPLE int sensorPin = A0; // select the input pin for the potentiometer int ledPin = 3; // select the pin for the LED int sensorValue = 0; // variable to store the value coming from the sensor void setup() { // declare the ledPin as an OUTPUT: pinMode(ledPin, OUTPUT); }
  • 65. ANALOG EXAMPLE void loop() { // read the value from the sensor: sensorValue = analogRead(sensorPin); analogWrite(LedPin, sensorValue); }
  • 66. EEPROM LIBRARY : #include <EEPROM.h> PENGGUNAAN : EEPROM memiliki Address dengan max address sesuai dengan Arduino yang digunakan (ARDUINO UNO 1 KB / 1000 ADDRESS) Setiap BYTE / ADDRESS dapat menampung unsigned integer value antara 0 sampai 255. Untuk data yang lebih besar perlu dipotong sebelum dimasukan kedalam eeprom
  • 67. WRITE CODE : EEPROM.write(addr, val); Addr adalah address dari eeprom * Terdapat fungsi EEPROM.length() yang berguna untuk mengetahui length address dari Arduino tersebut
  • 68. READ CODE : value = EEPROM.read(address); * Address merupakan alamat dari data yang disimpan dalam eeprom
  • 69. I2C Uno, Ethernet A4 (SDA), A5 (SCL) Mega2560 20 (SDA), 21 (SCL) Leonardo 2 (SDA), 3 (SCL) Due 20 (SDA), 21 (SCL), SDA1, SCL1
  • 70. I2C – DS1307 REAL TIME CLOCK Crystal / XTAL : 32.768 KHz
  • 71. LIBRARY DS1307 RTC URL Download : http://www.instructables.com/files/orig/FC2/O0HR/HW4OIBWY/FC2 O0HRHW4OIBWY.zip
  • 72. I2C - DS1307 REAL TIME CLOCK INCLUDE : #include <Wire.h> #include <RealTimeClockDS1307.h> START CLOCK : RTC.start(); STOP CLOCK : RTC.stop();
  • 73. I2C - DS1307 REAL TIME CLOCK TIME COMMAND : //Checks whether the clock is running. RTC.isStopped(); //Check whether it is AM or PM(1) depending on the output(given above). RTC.isPM(); //Checks whether the clock is in 24hour mode. RTC.is12hour(); //Toggles between the 12hour mode and 24hour mode. RTC.switchTo24h();
  • 74. I2C - DS1307 REAL TIME CLOCK READ CLOCK : int hours = 0; int minutes = 0; int seconds = 0; int dates = 0; int months = 0; int years = 0; int date = 0; //syntax for setting the values to the integers RTC.readClock(); //This line is essential for the other commands to work. //Commands for getting the individual time values. hours = RTC.getHours(); minutes = RTC.getMinutes(); seconds = RTC.getSeconds(); dates = RTC.getDate(); months = RTC.getMonth(); years = RTC.getYear(); date = RTC.getDayofWeek();
  • 75. I2C - DS1307 REAL TIME CLOCK WRITE CLOCK : RTC.setHours(jam); RTC.setMinutes(menit); RTC.setSeconds(detik); RTC.setDate(hari); RTC.setMonth(bulan); RTC.setYear(tahun); RTC.set24h(); //RTC.setAM(); RTC.setPM(); RTC.setDayofWeek(1);
  • 76. LCD 16X2 INCLUDE : #include <LiquidCrystal.h> LIQUID CRYSTAL CONFIGURATION LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //LCD RS pin to digital pin 12 //LCD Enable pin to digital pin 11 //LCD D4 pin to digital pin 5 //LCD D5 pin to digital pin 4 //LCD D6 pin to digital pin 3 //LCD D7 pin to digital pin 2 //LCD R/W pin to ground //LCD VSS pin to ground //LCD VCC pin to 5V
  • 77. LCD 16X2 SETUP : lcd.begin(16, 2); CODE : lcd.setCursor(0, 0); lcd.print(“Hello World!”);