#include "Sevseg.h" //import library Sevseg.h
int digit[10][7] = {{LOW,LOW,LOW,LOW,LOW,LOW,HIGH},
{HIGH,LOW,LOW,HIGH,HIGH,HIGH,HIGH},
{LOW,LOW,HIGH,LOW,LOW,HIGH,LOW},
{LOW,LOW,LOW,LOW,HIGH,HIGH,LOW},
{HIGH,LOW,LOW,HIGH,HIGH,LOW,LOW},
{LOW,HIGH,LOW,LOW,HIGH,LOW,LOW},
{LOW,HIGH,LOW,LOW,LOW,LOW,LOW},
{LOW,LOW,LOW,HIGH,HIGH,HIGH,HIGH},
{LOW,LOW,LOW,LOW,LOW,LOW,LOW},
{LOW,LOW,LOW,LOW,HIGH,LOW,LOW}
}; //untuk menampilkan angka 0-9
int pinName[7] = {2,3,4,5,6,7,8}; //deklarasi pin segmen A-G
int pinDigit[4] = {9,10,11,12}; //deklarasi pin digit 1-4
int pinDigitControl[4][4] = {{HIGH,LOW,LOW,LOW},
{LOW,HIGH,LOW,LOW},
{LOW,LOW,HIGH,LOW},
{LOW,LOW,LOW,HIGH}};
//untuk mengaktifkan digit 1-4
const int buttonPin[2] = {18,19}; //deklarasi pin pushbutton
int count = 0; //variabel untuk menyimpan jumlah orang
//variabel untuk menyimpan waktu terjadinya antar interupsi
unsigned long button_time = 0;
unsigned long last_button_time = 0;
int jumlah[4] = {0,0,0,0}; //variabel untuk menampilkan jumlah orang pada seven segmen
//memanggil konstruktor
Sevseg sevsegku = Sevseg(digit, pinName, pinDigit, pinDigitControl);
void setup(){
for (int i=0;i<2;i++){
pinMode(buttonPin[i], INPUT_PULLUP); //mengatur push button interupsi sebagai input_pullup
}
Serial.begin(9600);
//memanggil fungsi attachInterrupt() untuk push button 1 dan 2
attachInterrupt(digitalPinToInterrupt(buttonPin[0]), button_ISR_1, CHANGE); //sensor masuk
attachInterrupt(digitalPinToInterrupt(buttonPin[1]), button_ISR_2, CHANGE); //sensor keluar
}
void loop(){
sevsegku.scan7Seg(jumlah); //untuk mencetak jumlah orang pada seven segmen
}
//fungsi ISR untuk interupsi pertama (sensor masuk)
void button_ISR_1(){
button_time = millis(); //untuk mendapatkan timestamp
if (button_time - last_button_time > 250){
count = count + 1; //increment jumlah orang
//konversi jumlah orang dalam variabel count ke bentuk matriks jumlah[4]
jumlah[3] = count % 10;
if (count >= 10 and count < 100){
jumlah[2] = count/10;
} else if (count >= 100 and count < 1000){
jumlah[2] = (count/10)%10;
jumlah[1] = count/100;
} else{
jumlah[2] = (count/10)%10;
jumlah[1] = (count/100)%10;
jumlah[0] = count/1000;
}
//menampilkan pada port serial
Serial.print("Jumlah orang dalam ruangan: ");
Serial.println(count);
last_button_time = button_time;
}
}
//fungsi ISR untuk interupsi kedua (sensor keluar)
void button_ISR_2(){
button_time = millis(); //untuk mendapatkan timestamp
if (button_time - last_button_time > 250){
count = count - 1; //decrement jumlah orang
//konversi jumlah orang dalam variabel count ke bentuk matriks jumlah[4]
jumlah[3] = count % 10;
if (count < 10){
jumlah[2] = 0;
} else if (count >= 10 and count < 100){
jumlah[2] = count/10;
jumlah[1] = 0;
} else if (count >= 100 and count < 1000){
jumlah[2] = (count/10)%10;
jumlah[1] = count/100;
jumlah[0] = 0;
} else{
jumlah[2] = (count/10)%10;
jumlah[1] = (count/100)%10;
jumlah[0] = count/1000;
}
//menampilkan pada port serial
Serial.print("Jumlah orang dalam ruangan: ");
Serial.println(count);
last_button_time = button_time;
}
}