gambar 1. trafight light jadi

Program Full, digunakan untuk miniatur traffic light yang sudah jadi
const int a = 8;const int b = 7;const int c = 6;
const int d = 5;const int e = 4;const int f = 3;
const int g = 2;
const int segmen0 = A0;
const int segmen1 = A1;
const int merah = 12;
const int kuning = 11;
const int hijau = 10;
int data;
int segmenPuluhan;
int segmenSatuan;
void setup() {
// put your setup code here, to run once:
pinMode(a,OUTPUT);pinMode(d,OUTPUT);pinMode(f,OUTPUT);
pinMode(b,OUTPUT);pinMode(e,OUTPUT);pinMode(g,OUTPUT);
pinMode(c,OUTPUT);
pinMode(segmen0,OUTPUT);pinMode(segmen1,OUTPUT);
pinMode(merah,OUTPUT);pinMode(kuning,OUTPUT);pinMode(hijau,OUTPUT);
noInterrupts(); // mematikan semua interrupts
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
OCR1A = 312; // compare match register 16MHz/256/2Hz
TCCR1B |= (1 << WGM12); // CTC mode
TCCR1B |= (1 << CS12); // pembagi 256
TIMSK1 |= (1 << OCIE1A); // enable timer compare interrupt
interrupts(); // mengaktifkan semua interrupts
data=16;
digitalWrite(merah,HIGH);digitalWrite(kuning,LOW);digitalWrite(hijau,LOW);
}
void loop() {
data--;delay(500);
//jika counter sudah sampai hitungan 5 dan lampu hijau yang menyala
//nyalakan lampu kuning
if (data==5&&digitalRead(hijau)==HIGH){
digitalWrite(merah,LOW);digitalWrite(kuning,HIGH);digitalWrite(hijau,LOW);
}
//jika counter sudah mencapai 0 dan lampu kuning yang menyala
//nyalakan lampu hijau
if (data==0&&digitalRead(kuning)==HIGH){
digitalWrite(merah,HIGH);digitalWrite(kuning,LOW);digitalWrite(hijau,LOW);
data=9;
}
//jika counter sudah mencapai 0 dan lampu hijau yang menyala
//nyalakan lampu merah
if (data==0&&digitalRead(merah)==HIGH){
digitalWrite(merah,LOW);digitalWrite(kuning,LOW);digitalWrite(hijau,HIGH);
data=16;
}
}
///////////////////////////////////////////////////////////////////
ISR(TIMER1_COMPA_vect) // timer compare interrupt service routine
{
segmenSatuan=data%10;
segmenPuluhan=data/10;
if (segmenSatuan==0){angka0();}
if (segmenSatuan==1){angka1();}
if (segmenSatuan==2){angka2();}
if (segmenSatuan==3){angka3();}
if (segmenSatuan==4){angka4();}
if (segmenSatuan==5){angka5();}
if (segmenSatuan==6){angka6();}
if (segmenSatuan==7){angka7();}
if (segmenSatuan==8){angka8();}
if (segmenSatuan==9){angka9();}
digitalWrite(segmen1,LOW);digitalWrite(segmen0,HIGH);
delay(10);segmenMati();digitalWrite(segmen1,HIGH);
if (segmenPuluhan==0){angka0();}
if (segmenPuluhan==1){angka1();}
if (segmenPuluhan==2){angka2();}
if (segmenPuluhan==3){angka3();}
if (segmenPuluhan==4){angka4();}
if (segmenPuluhan==5){angka5();}
if (segmenPuluhan==6){angka6();}
if (segmenPuluhan==7){angka7();}
if (segmenPuluhan==8){angka8();}
if (segmenPuluhan==9){angka9();}
digitalWrite(segmen1,HIGH);digitalWrite(segmen0,LOW);
delay(10);segmenMati();digitalWrite(segmen0,HIGH);
}
void segmenMati() {
// mematikan semua LED
digitalWrite(a,LOW);digitalWrite(b,LOW);digitalWrite(c,LOW);
digitalWrite(d,LOW);digitalWrite(e,LOW);digitalWrite(f,LOW);
digitalWrite(g,LOW);
}
void angka0() {
// angka 0
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
}
void angka1() {
// angka 1
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
}
void angka2() {
// angka 2
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(g,HIGH);
}
void angka3(){
// angka 3
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(g,HIGH);
}
void angka4(){
// angka 4
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
void angka5(){
// angka 5
digitalWrite(a,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
void angka6(){
// angka 6
digitalWrite(a,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
void angka7(){
// angka 7
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
}
void angka8(){
// angka 8
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
void angka9(){
// angka 9
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
//////////////////////////////////////////////////////////////////////////////////////////
Pembahasan 1. Hardware dan software yang digunakan
Untuk membuat project traffic light seperti diatas kita akan menggunakan arduino nano kemudian software yang digunakan bisa menggunakan Arduino IDE pada komputer atau BluinoLoader pada smart phone Android.
gambar 3 arduino nano
jual Arduino Nano Clone
jual USB OTG
Arduino nano clone dipilih karena cukup mudah dipakai dan dengan harga yang murah. Untuk membuat/menulis program kita gunakan Bluino IDE yang bisa di jalankan pada SmartPhone Android.

Jika menggungakn komputer/laptop bisa menggunakan software Arduino IDE, link download ada dibawah ini:
download Arduino IDE
download Driver CH340
Instal Arduino IDE dari link diatas atau bisa dari microsoft store, kemudian instal juga driver CH340.
//////////////////////////////////////////////////////////////////////////////////////////
Pembahasan 2. Led Berjalan
dasar pertama dalam pemrograman arduino adalah bisa menghidupkan dan mematikan LED. disini kita akan mencoba membuat LED menyala seperti pada gambar 3.

const int a = 8;
const int b = 7;
const int c = 6;
const int d = 5;
const int e = 4;
const int f = 3;
const int g = 2;
void setup() {
// put your setup code here, to run once:
pinMode(a,OUTPUT);
pinMode(b,OUTPUT);
pinMode(c,OUTPUT);
pinMode(d,OUTPUT);
pinMode(e,OUTPUT);
pinMode(f,OUTPUT);
pinMode(g,OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(a,HIGH);
delay(500);
digitalWrite(a,LOW);
digitalWrite(b,HIGH);
delay(500);
digitalWrite(b,LOW);
digitalWrite(c,HIGH);
delay(500);
digitalWrite(c,LOW);
digitalWrite(d,HIGH);
delay(500);
digitalWrite(d,LOW);
digitalWrite(e,HIGH);
delay(500);
digitalWrite(e,LOW);
digitalWrite(f,HIGH);
delay(500);
digitalWrite(f,LOW);
digitalWrite(g,HIGH);
delay(500);
digitalWrite(g,LOW);
}
const int a = 8; maksudnya menamai pin 8 pada arduino dengan nama a.
pinMode(a,OUTPUT); maksudnya a(yaitu pin 8 arduino) di seting sebagai output(keluaran).
digitalWrite(a,HIGH); maksudnya menyalakan LED yang tersambung dengan a.
digitalWrite(a,LOW); maksudnya mematikan LED yang tersambung dengan a.
delay(500); maksudnya tunda selama 500ms(1/2 detik)
//////////////////////////////////////////////////////////////////////////////////////////
Pembahasan 3. 7 Segmen

const int a = 8;const int b = 7;const int c = 6;
const int d = 5;const int e = 4;const int f = 3;
const int g = 2;
void setup() {
// put your setup code here, to run once:
pinMode(a,OUTPUT);pinMode(d,OUTPUT);pinMode(f,OUTPUT);
pinMode(b,OUTPUT);pinMode(e,OUTPUT);pinMode(g,OUTPUT);
pinMode(c,OUTPUT);
}
void loop() {
angka0();delay(500);segmenMati();
angka1();delay(500);segmenMati();
angka2();delay(500);segmenMati();
angka3();delay(500);segmenMati();
angka4();delay(500);segmenMati();
angka5();delay(500);segmenMati();
angka6();delay(500);segmenMati();
angka7();delay(500);segmenMati();
angka8();delay(500);segmenMati();
angka9();delay(500);segmenMati();
}
void segmenMati() {
// mematikan semua LED
digitalWrite(a,LOW);digitalWrite(b,LOW);digitalWrite(c,LOW);
digitalWrite(d,LOW);digitalWrite(e,LOW);digitalWrite(f,LOW);
digitalWrite(g,LOW);
}
void angka0() {
// angka 0
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
}
void angka1() {
// angka 1
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
}
void angka2() {
// angka 2
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(g,HIGH);
}
void angka3(){
// angka 3
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(g,HIGH);
}
void angka4(){
// angka 4
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
void angka5(){
// angka 5
digitalWrite(a,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
void angka6(){
// angka 6
digitalWrite(a,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
void angka7(){
// angka 7
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
}
void angka8(){
// angka 8
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
void angka9(){
// angka 9
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
Untuk menyalakan angka 1 maka LED b dan LED c yang menyala. Perintahnya digitalWrite(b,HIGH); dan digitalWrite(c,HIGH);. setelahnya ditambah delay supaya angka tertampil beberapa saat pada LED. Setelahnya perlu mematikan semua LED dan siap untuk menampilkan angka selanjutnya, perintah programnya adalah digitalWrite(a,LOW); hingga digitalWrite(g,LOW); .
void setup() digunakan sebagai pengaturan awal mikrokontroler(Arduino Nano). Setelah perintah void setup() akan diikuti tanda baca kurung kurawal “{” dan diakhiri dengan tanda baca kurung kurawal tutup “}”. Pengaturan awal harus berada diantara kurung kurawal buka dan tutup supaya dijalankan dengan baik. Pengaturan pada void setup() biasanya diisi dengan: 1)pengaturan PIN sebagai INPUT, PIN sebagai INPUT PULLUP atau PIN sebagai OUTPUT, 2) memberi nilai awal pada variabel. Selama aarduino menyala, void setup() hanya akan dijalankan selama sekali.
void loop() merupakan program utama yang akan dijalankan arduino menyala atau bekerja. Sama seperti void setup, setelah perintah void loop() terdapat tanda baca kurung kurawal “{” dan diakhiri dengan tanda baca kurung kurawal tutup “}”. Program didalam void loop() akan dilakukan berurutan dari awal(setelah tanda “{“) hingga akhir (sebelum tanda “}”). Setelah sampai diakhir program makan akan diulang kebali ke awal program. Jadi selama arduino bekerja semua program yang berada didalam void loop() akan di ulang terus menerus.
Selain void loop() dan void setup(), kita bisa membuat void …() buatan kita sendiri sendiri. void buatan sendiri disebut function, tidak dijelaskan secara terperinci aturan membuat function dalam pemrograman arduino tetapi biasanya di tulis dengan nama sesingkat mungkin(menggunakan huruf besar atau kecil bisa ditambah angka) dan tidak menggunakan tanda baca atau karakter kecuali underscore( _ ). Contoh membuat fuction dalam program diatas adalah void angka1(). Untuk memanggil function adalah menulis nama function didalam void loop() atau void setup() dan diahiri dengan tanda baca titik koma, contoh angka1();
//////////////////////////////////////////////////////////////////////////////////////////
Pembahsan 4. 7 segmen , variabel dan if

const int a = 8;const int b = 7;const int c = 6;
const int d = 5;const int e = 4;const int f = 3;
const int g = 2;
int data;
void setup() {
// put your setup code here, to run once:
pinMode(a,OUTPUT);pinMode(d,OUTPUT);pinMode(f,OUTPUT);
pinMode(b,OUTPUT);pinMode(e,OUTPUT);pinMode(g,OUTPUT);
pinMode(c,OUTPUT);
data=0;
}
void loop() {
if (data==0){angka0();}
if (data==1){angka1();}
if (data==2){angka2();}
if (data==3){angka3();}
if (data==4){angka4();}
if (data==5){angka5();}
if (data==6){angka6();}
if (data==7){angka7();}
if (data==8){angka8();}
if (data==9){angka9();}
data=data+1;
delay(500);segmenMati();
if (data==10){data=0;}
}
void segmenMati() {
// mematikan semua LED
digitalWrite(a,LOW);digitalWrite(b,LOW);digitalWrite(c,LOW);
digitalWrite(d,LOW);digitalWrite(e,LOW);digitalWrite(f,LOW);
digitalWrite(g,LOW);
}
void angka0() {
// angka 0
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
}
void angka1() {
// angka 1
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
}
void angka2() {
// angka 2
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(g,HIGH);
}
void angka3(){
// angka 3
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(g,HIGH);
}
void angka4(){
// angka 4
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
void angka5(){
// angka 5
digitalWrite(a,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
void angka6(){
// angka 6
digitalWrite(a,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
void angka7(){
// angka 7
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
}
void angka8(){
// angka 8
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
void angka9(){
// angka 9
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
int data; (baris no 5) perintah ini adalah membuat variabel dengan nama “data”. nama variabel bebas menggunakan kombinasi huruf besar, huruf kecil dan angka. int adalah tipe data, data bisa menyimpan angka -32.768 hingga 32.767. Usahakan lakukan operasi didalam rentang angka tersebut jika tidak menghasilkan data yang salah. selain itu integer tidak bisa menghitung angka dibelakang koma misal: 0,3. angka tersebut akan dibulatkan menjadi nol (0).
data=0; (baris 13) perintah ini akan mengisi variabel data dengan nilai nol (0).
data=data+1; (baris 28) maksudnya setiap kali menjalankan perintah ini nilai variabel “data” akan di tambah satu. awalnya nilai “data” 0 dikarenakan perintah baris 13, kemudian akan ditambah satu menjadi 1, ditambah lagi menjadi 2, ditambah lagi menjadi 3 … dan seterusnya.
if (data==10){data=0;} (baris 31) maksunya setiap kali variabel “data” bernilai 10 akan di reset, variabel “data” akan bernilai 0 lagi.
//////////////////////////////////////////////////////////////////////////////////////////
Pembahsan 5. 7 segmen x2

const int a = 8;const int b = 7;const int c = 6;
const int d = 5;const int e = 4;const int f = 3;
const int g = 2;
const int segmen0 = A0;
const int segmen1 = A1;
int data;
int segmenPuluhan;
int segmenSatuan;
void setup() {
// put your setup code here, to run once:
pinMode(a,OUTPUT);pinMode(d,OUTPUT);pinMode(f,OUTPUT);
pinMode(b,OUTPUT);pinMode(e,OUTPUT);pinMode(g,OUTPUT);
pinMode(c,OUTPUT);
pinMode(A0,OUTPUT);pinMode(A1,OUTPUT);
}
void loop() {
data = 27;
if (data==100){data=0;}
segmenSatuan=data%10;
segmenPuluhan=data/10;
if (segmenSatuan==0){angka0();}
if (segmenSatuan==1){angka1();}
if (segmenSatuan==2){angka2();}
if (segmenSatuan==3){angka3();}
if (segmenSatuan==4){angka4();}
if (segmenSatuan==5){angka5();}
if (segmenSatuan==6){angka6();}
if (segmenSatuan==7){angka7();}
if (segmenSatuan==8){angka8();}
if (segmenSatuan==9){angka9();}
digitalWrite(segmen1,LOW);digitalWrite(segmen0,HIGH);
delay(10);segmenMati();digitalWrite(segmen1,HIGH);
if (segmenPuluhan==0){angka0();}
if (segmenPuluhan==1){angka1();}
if (segmenPuluhan==2){angka2();}
if (segmenPuluhan==3){angka3();}
if (segmenPuluhan==4){angka4();}
if (segmenPuluhan==5){angka5();}
if (segmenPuluhan==6){angka6();}
if (segmenPuluhan==7){angka7();}
if (segmenPuluhan==8){angka8();}
if (segmenPuluhan==9){angka9();}
digitalWrite(segmen1,HIGH);digitalWrite(segmen0,LOW);
delay(10);segmenMati();delay(1);digitalWrite(segmen0,HIGH);
}
///////////////////////////////////////////////////////////////////
void segmenMati() {
// mematikan semua LED
digitalWrite(a,LOW);digitalWrite(b,LOW);digitalWrite(c,LOW);
digitalWrite(d,LOW);digitalWrite(e,LOW);digitalWrite(f,LOW);
digitalWrite(g,LOW);
}
void angka0() {
// angka 0
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
}
void angka1() {
// angka 1
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
}
void angka2() {
// angka 2
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(g,HIGH);
}
void angka3(){
// angka 3
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(g,HIGH);
}
void angka4(){
// angka 4
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
void angka5(){
// angka 5
digitalWrite(a,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
void angka6(){
// angka 6
digitalWrite(a,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
void angka7(){
// angka 7
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
}
void angka8(){
// angka 8
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
void angka9(){
// angka 9
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
Dengan sambungan satu PIN untuk mengendalikan satu LED, maka maksimal hanya bisa mengendalikan 2 buah 7segmen saja(menggunakan 14 PIN arduino). kesempatan kali ini akan mencoba menghidupkan 2 buah 7segmen sekaligus hanya dengan 9 PIN kaki dari arduino nano. Dengan cara ini kita bisa leluasa menambahkan 7segmen menjadi 3 bahkan lebih.
const int segmen0 = A0; (baris 5) maksudnya menamai pin A0 pada arduino dengan nama segmen0. segmen0 digunakan untuk menyalakan/mematikan 7segmen puluhan
const int segmen1 = A1; (baris 6) maksudnya menamai pin A1 pada arduino dengan nama segmen1. segmen1 digunakan untuk menyalakan/mematikan 7segmen satuan
int segmenPuluhan; (baris 9) variabel untuk menyimpan nilai puluhan pada 7segmen
int segmenSatuan; (baris 10) variabel untuk menyimpan nilai satuan pada 7segmen
data = 27; (baris 22) nilai data angka yang akan ditampilkan ke 7segmen
segmenSatuan=data%10; (baris 25) data bernilai 27, % perintah sisa bagi. perhitungan 27%10 hasilnya adalah 7. intinya adalah mengambil data satuan dari nilai 27.
segmenPuluhan=data/10; (baris 26 ) data bernilai 27, “/” perintah pembagian. perhitungan 27/10 hasilnya adalah “2,7” dibulatkan ke bawah menjadi 2. intinya adalah mengambil data puluhan dari nilai 27.
digitalWrite(segmen1,LOW);digitalWrite(segmen0,HIGH); (baris 38) disini ada 2 perintah program. yang pertanya menyalakan segmen1(7segmen satuan). Program ke-dua mematikan senmen0(7segmen puluhan)
digitalWrite(segmen1,HIGH);digitalWrite(segmen0,LOW); (baris 51) mirip program pada baris 38. yang pertanya mematikan segmen1(7segmen satuan). Program ke-dua menyalakan senmen0(7segmen puluhan)
program pada baris 38 dan 51 ini yang bertanggung jawab melakukan pergantian nyala pada 7segmen. segmen0 dan segmen1 menyala secara bergantian, pergantian nyala sangat cepat sehingga terlihat menyala bersamaan.
//////////////////////////////////////////////////////////////////////////////////////////
Pembahasan 6. Timer

const int a = 8;const int b = 7;const int c = 6;
const int d = 5;const int e = 4;const int f = 3;
const int g = 2;
const int segmen0 = A0;
const int segmen1 = A1;
int data;
int segmenPuluhan;
int segmenSatuan;
void setup() {
// put your setup code here, to run once:
pinMode(a,OUTPUT);pinMode(d,OUTPUT);pinMode(f,OUTPUT);
pinMode(b,OUTPUT);pinMode(e,OUTPUT);pinMode(g,OUTPUT);
pinMode(c,OUTPUT);
pinMode(A0,OUTPUT);pinMode(A1,OUTPUT);
noInterrupts(); // disable all interrupts
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
OCR1A = 312; // compare match register 16MHz/256/2Hz
TCCR1B |= (1 << WGM12); // CTC mode
TCCR1B |= (1 << CS12); // 256 prescaler
TIMSK1 |= (1 << OCIE1A); // enable timer compare interrupt
interrupts(); // enable all interrupts
data=16;
}
void loop() {
data=data-1;
delay(500);
if (data==0){data=16;}
}
///////////////////////////////////////////////////////////////////
ISR(TIMER1_COMPA_vect) // timer compare interrupt service routine
{
segmenSatuan=data%10;
segmenPuluhan=data/10;
if (segmenSatuan==0){angka0();}
if (segmenSatuan==1){angka1();}
if (segmenSatuan==2){angka2();}
if (segmenSatuan==3){angka3();}
if (segmenSatuan==4){angka4();}
if (segmenSatuan==5){angka5();}
if (segmenSatuan==6){angka6();}
if (segmenSatuan==7){angka7();}
if (segmenSatuan==8){angka8();}
if (segmenSatuan==9){angka9();}
digitalWrite(segmen1,LOW);digitalWrite(segmen0,HIGH);
delay(10);segmenMati();digitalWrite(segmen1,HIGH);
if (segmenPuluhan==0){angka0();}
if (segmenPuluhan==1){angka1();}
if (segmenPuluhan==2){angka2();}
if (segmenPuluhan==3){angka3();}
if (segmenPuluhan==4){angka4();}
if (segmenPuluhan==5){angka5();}
if (segmenPuluhan==6){angka6();}
if (segmenPuluhan==7){angka7();}
if (segmenPuluhan==8){angka8();}
if (segmenPuluhan==9){angka9();}
digitalWrite(segmen1,HIGH);digitalWrite(segmen0,LOW);
delay(10);segmenMati();digitalWrite(segmen0,HIGH);
}
void segmenMati() {
// mematikan semua LED
digitalWrite(a,LOW);digitalWrite(b,LOW);digitalWrite(c,LOW);
digitalWrite(d,LOW);digitalWrite(e,LOW);digitalWrite(f,LOW);
digitalWrite(g,LOW);
}
void angka0() {
// angka 0
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
}
void angka1() {
// angka 1
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
}
void angka2() {
// angka 2
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(g,HIGH);
}
void angka3(){
// angka 3
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(g,HIGH);
}
void angka4(){
// angka 4
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
void angka5(){
// angka 5
digitalWrite(a,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
void angka6(){
// angka 6
digitalWrite(a,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
void angka7(){
// angka 7
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
}
void angka8(){
// angka 8
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
void angka9(){
// angka 9
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
Timer digunakan untuk otomatis memanggil program untuk menampilkan 7segmen secara otomatis. Pada program sebelumnya untuk menampilkan 7segmen kita menuliskan program pada program utama “void loop()“. Jika didalam program utama terdapat program untuk menampilkan 7segmen kemudain ditambah program lain seperti pencacah mundur seperti pada gambar 9, maka akan mengalami kesulitan menghasilkan program yang di inginkan. Maka dari itu dibutuhkan penampil 7segmen secara otomatis supaya pada program utama kita bisa manfaatkan untuk keperluan yang lain. Disini kita akan menggunakan timer 1, timer bisa di seting berapa kecepatannya. Mata manusia bisa mengamati benda berkedip kurang dari 20/detik. Jika benda itu berkedip diatas 20 setiap detiknya, maka manusia tidak begitu jelas bahwa benda itu berkedip. Pada program timer ini kita gunakan untuk menyalakan 7segemn sebanyak 200 kali setiap detik.
noInterrupts(); (baris 20) perintah ini digunakan untuk mematika semua interupsi pada arduino
OCR1A = 312; (baris 24) perintah ini sebagai pengaturan seberapa cepat intrupsi timer. 16.000.000/256/200 hasilnya 312,5. dibulatkan saja menjadi 312
interrrupts(); (baris 28) perintah ini untuk mengaktifkan interup yang kita seting tadi
data=16; (baris 30) perintah ini untuk mengisi data awal variabel “data”. idenya nanti akan membuat hitung mundur dari angka 15 hingga 0, jadi variabel “data” harus di isi dulu dengan nilai 16.
data=data-1; (baris 34) perintah ini untuk mengurangi variabel “data” dengan angka 1. nantinya program ini akan menghasilkan hitung mundur.
if (data==0){data=16;} (baris 36) perintah ini untuk setiap kali variabel “data” sudah mencapai 0, variabel “data” akan diisi lagi dengan nilai 16 kembali.
ISR(TIMER1_COMPA_vect){ … } (baris 42 hingga 72)disinilah kita meletakan perintah program menyalakan 7segmen.
//////////////////////////////////////////////////////////////////////////////////////////
Pembahasan 7. Parallel LED

const int a = 8;const int b = 7;const int c = 6;
const int d = 5;const int e = 4;const int f = 3;
const int g = 2;
const int segmen0 = A0;
const int segmen1 = A1;
const int merah = 12;
const int kuning = 11;
const int hijau = 10;
int data;
int segmenPuluhan;
int segmenSatuan;
void setup() {
// put your setup code here, to run once:
pinMode(a,OUTPUT);pinMode(d,OUTPUT);pinMode(f,OUTPUT);
pinMode(b,OUTPUT);pinMode(e,OUTPUT);pinMode(g,OUTPUT);
pinMode(c,OUTPUT);
pinMode(segmen0,OUTPUT);pinMode(segmen1,OUTPUT);
pinMode(merah,OUTPUT);pinMode(kuning,OUTPUT);pinMode(hijau,OUTPUT);
noInterrupts(); // mematikan semua interrupts
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
OCR1A = 312; // compare match register 16MHz/256/2Hz
TCCR1B |= (1 << WGM12); // CTC mode
TCCR1B |= (1 << CS12); // pembagi 256
TIMSK1 |= (1 << OCIE1A); // enable timer compare interrupt
interrupts(); // mengaktifkan semua interrupts
data=16;
digitalWrite(merah,HIGH);digitalWrite(kuning,LOW);digitalWrite(hijau,LOW);
}
void loop() {
//lampu LED merah menyala
digitalWrite(merah,HIGH);digitalWrite(kuning,LOW);digitalWrite(hijau,LOW);
delay(500);
//lampu LED hijau menyala
digitalWrite(merah,LOW);digitalWrite(kuning,LOW);digitalWrite(hijau,HIGH);
delay(500);
//lampu LED kuning menyala
digitalWrite(merah,LOW);digitalWrite(kuning,HIGH);digitalWrite(hijau,LOW);
}
///////////////////////////////////////////////////////////////////
ISR(TIMER1_COMPA_vect) // timer compare interrupt service routine
{
segmenSatuan=data%10;
segmenPuluhan=data/10;
if (segmenSatuan==0){angka0();}
if (segmenSatuan==1){angka1();}
if (segmenSatuan==2){angka2();}
if (segmenSatuan==3){angka3();}
if (segmenSatuan==4){angka4();}
if (segmenSatuan==5){angka5();}
if (segmenSatuan==6){angka6();}
if (segmenSatuan==7){angka7();}
if (segmenSatuan==8){angka8();}
if (segmenSatuan==9){angka9();}
digitalWrite(segmen1,LOW);digitalWrite(segmen0,HIGH);
delay(10);segmenMati();digitalWrite(segmen1,HIGH);
if (segmenPuluhan==0){angka0();}
if (segmenPuluhan==1){angka1();}
if (segmenPuluhan==2){angka2();}
if (segmenPuluhan==3){angka3();}
if (segmenPuluhan==4){angka4();}
if (segmenPuluhan==5){angka5();}
if (segmenPuluhan==6){angka6();}
if (segmenPuluhan==7){angka7();}
if (segmenPuluhan==8){angka8();}
if (segmenPuluhan==9){angka9();}
digitalWrite(segmen1,HIGH);digitalWrite(segmen0,LOW);
delay(10);segmenMati();digitalWrite(segmen0,HIGH);
}
void segmenMati() {
// mematikan semua LED
digitalWrite(a,LOW);digitalWrite(b,LOW);digitalWrite(c,LOW);
digitalWrite(d,LOW);digitalWrite(e,LOW);digitalWrite(f,LOW);
digitalWrite(g,LOW);
}
void angka0() {
// angka 0
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
}
void angka1() {
// angka 1
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
}
void angka2() {
// angka 2
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(g,HIGH);
}
void angka3(){
// angka 3
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(g,HIGH);
}
void angka4(){
// angka 4
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
void angka5(){
// angka 5
digitalWrite(a,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
void angka6(){
// angka 6
digitalWrite(a,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
void angka7(){
// angka 7
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
}
void angka8(){
// angka 8
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
void angka9(){
// angka 9
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
Untuk lampu merah, hijau dan kuning kita akan menggunakan 7 buah lampu setiap warnanya. satu buah LED 3mm membutuhkan tegangan 2,2V dan 20mA. jika 7 buah lampu LED di parallel maka dibutuhkan 2,2V dan 140mA. Sedangkan setiap PIN arduino bisa mengeluarkan 5V dan 20mA. untuk tegangan PIN arduino cukup untuk memenuhi kebutuhan tegangan LED tetapi Arus PIN arduino kurang untuk memenuhi kebutuhan Arus LED. Tetapi saat saat dicoba 1 buah PIN untuk menyalakan 7 LED sekaligus, LED bisa menyala cukup baik. Jadi untuk sementara kita abaikan dulu kebutuhan Arus LED.
const int merah = 12; (baris 8) menamai PIN 12 pada arduino dengan nama merah. Nantinya PIN 12 ini akan di sambungkan ke LED warna merah
const int kuning = 11; (baris 9) menamai PIN 11 pada arduino dengan nama kuning. Nantinya PIN 11 ini akan di sambungkan ke LED warna kuning
const int kuning = 10; (baris 10) menamai PIN 10 pada arduino dengan nama hijau. Nantinya PIN 10 ini akan di sambungkan ke LED warna hijau
digitalWrite(merah,HIGH);digitalWrite(kuning,LOW);digitalWrite(hijau,LOW); (baris 42) perintah ini untuk menyalakan lampu LED merah
digitalWrite(merah,LOW);digitalWrite(kuning,LOW);digitalWrite(hijau,HIGH); (baris 46) perintah ini untuk menyalakan lampu LED hijau
digitalWrite(merah,HIGH);digitalWrite(kuning,HIGH);digitalWrite(hijau,LOW); (baris 50) perintah ini untuk menyalakan lampu LED kuning
//////////////////////////////////////////////////////////////////////////////////////////
Pembahasan 8. Final
Potongan Program Full diatas
...
void loop() {
data--;delay(500);
//jika counter sudah sampai hitungan 5 dan lampu hijau yang menyala
//nyalakan lampu kuning
if (data==5&&digitalRead(hijau)==HIGH){
digitalWrite(merah,LOW);digitalWrite(kuning,HIGH);digitalWrite(hijau,LOW);
}
//jika counter sudah mencapai 0 dan lampu kuning yang menyala
//nyalakan lampu hijau
if (data==0&&digitalRead(kuning)==HIGH){
digitalWrite(merah,HIGH);digitalWrite(kuning,LOW);digitalWrite(hijau,LOW);
data=9;
}
//jika counter sudah mencapai 0 dan lampu hijau yang menyala
//nyalakan lampu merah
if (data==0&&digitalRead(merah)==HIGH){
digitalWrite(merah,LOW);digitalWrite(kuning,LOW);digitalWrite(hijau,HIGH);
data=16;
}
}
...
Program telah siap, kita tinggal memodifikasi sedikit pada program utama(void loop). berikut pembahasannya.
data–; (baris 3) perintah ini untuk mengurangi variabel “data” dengan satu. Program ini sama fungsinya dengan data=data-1;
if (data==5&&digitalRead(hijau)==HIGH){ … } (baris 5) program ini jika diartikan jika variabel “data” sudah bernilai 5 dan LED warna hijau sedang menyala. Didalam program ini kemudian masukkan program untuk LED warna kuning menyala , sedang LED warna lain mati.
If (data==0&&digitalRead(kuning)==HIGH){…} (baris 13) program ini jika diartikan jika variabel “data” sudah bernilai 0 dan LED warna kuning menyala. didalam program ini kemudian masukkan program untuk LED warna merah menyala, sedang LED warna lain mati.
If (data==0&&digitalRead(merah)==HIGH){…} (baris 13) program ini jika diartikan jika variabel “data” sudah bernilai 0 dan LED warna merah menyala. didalam program ini kemudian masukkan program untuk LED warna hijau menyala, sedang LED warna lain mati.
//////////////////////////////////////////////////////////////////////////////////////////
Saya rasa penjelasan minimal untuk membuat traffic light cukup sampai disini. Terimakasih sudah menyempatkan waktu untuk berkunjung.
