Belajar arduino saya mulai dengan membuat jam 7 segment kayaknya biasa banget hehehehe..
ini skemanya..
dalam prakteknya saya menggunakan Arduino Nano, ditambah 6 buah display 7 segment, dan 1 RTC 1302
dan berikut ini codenya..
#include <DS1302RTC.h> #include <Time.h> #include <TimeLib.h> DS1302RTC RTC(A0, A1, A2); int stime = 200; byte angka[] = { 0b11000000, 0b11111001, 0b10100100, 0b10110000, 0b10011001, 0b10010010, 0b10000010, 0b11111000, 0b10000000, 0b10010000, 0b11111111 }; byte blok[][2] = { {0b000001, 0b000010}, {0b000100, 0b001000}, {0b010000, 0b100000} }; void dwA(byte b){ for(int i =0 ; i < 8;i++){ if( (b & ( 1 << i )) != 0b0){ digitalWrite(i,HIGH); } else { digitalWrite(i,LOW); } } } void dwB(byte b){ int startB = 8; for(int i =0 ; i < 8;i++){ if( (b & ( 1 << i )) != 0b0){ digitalWrite(i + startB,HIGH); } else { digitalWrite(i + startB,LOW); } } } /* Bisa juga begini: void dwA(byte b){ PORTD = b; } void dwB(byte b){ PORTB = b; } */ void setup() { for(int i =0;i < 14;i++){ pinMode(i,OUTPUT); } setSyncProvider(RTC.get); setSyncInterval(10); int s = 0; while(timeStatus()== timeNotSet && s < 30){ s++; delay(100); } /* setTime(06,38,0,8,11,2016); RTC.set(now()); */ } void displayAngka(int angkanya, int mblok) { int satuan = angkanya; int puluhan = 0; if (angkanya > 9) { satuan = angkanya % 10; puluhan = (angkanya - satuan) / 10; } dwA(angka[10]); dwB(blok[mblok][0]); delayMicroseconds(stime); dwA(angka[satuan]); delayMicroseconds(stime); dwA(angka[10]); dwB(blok[mblok][1]); delayMicroseconds(stime); dwA(angka[puluhan]); delayMicroseconds(stime); } void loop() { displayAngka(second(),0); displayAngka(minute(),1); displayAngka(hour(),2); delayMicroseconds(stime); }
Leave a Reply