#define MAX7219_Data_IN 8
#define MAX7219_Chip_Select 10
#define MAX7219_Clock 9
#define OP_NOOP 0x00
#define OP_DIGIT0 0x01
#define OP_DIGIT1 0x02
#define OP_DIGIT2 0x03
#define OP_DIGIT3 0x04
#define OP_DIGIT4 0x05
#define OP_DIGIT5 0x06
#define OP_DIGIT6 0x07
#define OP_DIGIT7 0x08
#define OP_DECODEMODE 0x09
#define OP_INTENSITY 0x0a
#define OP_SCANLIMIT 0x0b
#define OP_SHUTDOWN 0x0c
#define OP_DISPLAYTEST 0x0f
int sensorPin = A0; // select the input pin for the potentiometer
int ledPin = 13; // select the pin for the LED
int sensorValue = 0;
void shift(byte send_to_address, byte send_this_data)
{
digitalWrite(MAX7219_Chip_Select, LOW);
shiftOut(MAX7219_Data_IN, MAX7219_Clock, MSBFIRST, send_to_address);
shiftOut(MAX7219_Data_IN, MAX7219_Clock, MSBFIRST, send_this_data);
digitalWrite(MAX7219_Chip_Select, HIGH);
}
const byte interruptPin = 2;
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
Serial.println("PolinemaJaya");
pinMode(MAX7219_Data_IN, OUTPUT);
pinMode(MAX7219_Chip_Select, OUTPUT);
pinMode(MAX7219_Clock, OUTPUT);
digitalWrite(MAX7219_Clock, HIGH);
delay(200);
//Setup of MAX7219 chip
shift(OP_DISPLAYTEST, 0x00); //display test register - test mode off
shift(OP_SHUTDOWN, 0x01); //shutdown register - normal operation
shift(OP_SCANLIMIT, 0x07); //scan limit register - display digits 0 thru 7
shift(OP_INTENSITY, 0x0f); //intensity register - max brightness
shift(OP_DECODEMODE, 0xff); //decode mode register - CodeB decode all digits
pinMode(interruptPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin), pertambahan, FALLING);
}
volatile int nilai_naik;
void pertambahan() {
nilai_naik++;
//delay(1000);
}
void tampilan_ss(int ni) {
int satuan, puluhan, ratusan, ribuan;
int nilai = ni; // Menentukan nilai yang ingin ditampilkan (nilai i yang sedang diproses).
ribuan = nilai / 1000;
nilai = nilai % 1000;
ratusan = nilai / 100;
nilai = nilai % 100;
puluhan = nilai / 10;
satuan = nilai % 10;
shift(OP_DIGIT7, 0x0F); //digit 7 (leftmost digit) data
shift(OP_DIGIT6, 0x0F);
shift(OP_DIGIT5, 0x0F);
shift(OP_DIGIT4, 0x0F);
// Mengirimkan nilai ke register - register MAX7219 untuk menampilkan angka.
if (ni >= 1000) shift(OP_DIGIT3, ribuan); else shift(OP_DIGIT3, 0x0F);
if (ni >= 100) shift(OP_DIGIT2, ratusan); else shift(OP_DIGIT2, 0x0F);
if (ni >= 10) shift(OP_DIGIT1, puluhan); else shift(OP_DIGIT1, 0x0F);
shift(OP_DIGIT0, satuan); //digit 0 (rightmost digit) data
}
void loop() {
sensorValue = analogRead(sensorPin);
delay(100);
tampilan_ss(sensorValue);
Serial.print("Potensiometer =");
Serial.println(sensorValue);
}