MODUL 1
DIP SWITCH DAN DOT MATRIX
Dalam era revolusi industri 4.0, perkembangan teknologi informasi telah membawa perubahan signifikan di berbagai sektor, termasuk dalam dunia pendidikan. Smart laboratorium menjadi salah satu implementasi teknologi terbaru yang bertujuan meningkatkan efisiensi, keterlibatan siswa, dan pengelolaan informasi. Salah satu elemen kunci dalam smart laboratorium adalah penggunaan DIP switch dan dot matrix pada info board.
DIP switch, atau yang dikenal sebagai Dual Inline Package switch, merupakan perangkat kecil namun sangat berguna yang digunakan untuk mengatur konfigurasi dan pengaturan pada berbagai perangkat elektronik. Sementara itu, dot matrix adalah rangkaian titik-titik kecil yang membentuk sebuah matriks untuk menampilkan teks atau grafik. Integrasi keduanya pada info board di smart laboratorium memberikan kemungkinan untuk menyampaikan informasi dengan lebih efektif dan interaktif.
Penerapan DIP switch dan dot matrix pada info board smart laboratorium membuka peluang untuk meningkatkan efisiensi pengelolaan informasi, interaksi antara pengguna, dan memberikan pengalaman belajar yang lebih baik. Melalui kombinasi teknologi ini, smart laboratorium diharapkan dapat memberikan kontribusi signifikan dalam mendukung pembelajaran berbasis teknologi dan memberikan pengalaman belajar yang lebih dinamis bagi para pemangku kepentingan di lingkungan pendidikan.
- Memahami prinsip dasar input dan output pada mikrokontroler
- Mengetahui komponen yang digunakan dalam membuat rangkaian pada modul 1
- Mampu menangkap dan memproses input dari dip switch
- Mampu mengonfigurasi dan mengendalikan dot matrix sebagai output pada mikrokontroler
Alat :
1. Power Supply
2. Logic state
Bahan :
1. Dip Switch
2. Dot matrix
3. Arduino Uno
Spesifikasi :
4. Resistor
Spesifikasi :
5. Lampu
6. Touch Sensor
Spesifikasi :
- Operating voltage 2.0V~5.5V
- Operating current @VDD=3V, no load
- At low power mode typical 1.5uA, maximum 3.0uA
- The response time max 220mS at low power mode @VDD=3V
- Sensitivity can adjust by the capacitance(0~50pF) outside
- Stable touching detection of human body for replacing traditional direct switch key
- Provides Low Power mode
- Provides direct mode、toggle mode by pad option(TOG pin) Q pin is CMOS output
- All output modes can be selected active high or active low by pad option(AHLB pin)
- After power-on have about 0.5sec stable-time, during the time do not touch the key pad, and the function is disabled
- Auto calibration for life at low power mode the re-calibration period is about 4.0sec normally, when key detected touch and released touch, the auto re-calibration will be redoing after about 16sec from releasing key
- The sensitivity of TTP223N-BA6 is better than TTP223-BA6’s. but the stability of TTP223N-BA6 is worse than TTP223-BA6’s.
7. Sound Sensor
8. Sensor PIR
Spesifikasi :
1. Vin : DC 5V 9V.
2. Radius : 180 derajat.3. Jarak deteksi : 5 7 meter.4. Output : Digital TTL.5. Memiliki setting sensitivitas.6. Memiliki setting time delay.7. Dimensi : 3,2 cm x 2,4 cm x 2,3 cm.8. Berat : 10 gr.
9. IC MAX7219
- Serial Input/Output: MAX7219 memiliki serial input/output yang common-cathode
- Layar LED: IC ini dapat mengendalikan layar LED dengan hingga 8 digit, layar grafik, atau 64 LED terindividu
- BCD-to-7 Segment Decoder: IC ini mencakup dekoder BCD-to-7 segment yang disebut BCD code-B decoder
- Multiplex Scan: IC ini mencakup k circuit multiplex scan yang memungkinkan untuk memanipulasi layar LED dengan efisien
- Segment dan Digit Drivers: IC ini mencakup driver segmen dan digit yang memungkinkan untuk menyediakan sinyal ke layar LED
- Static RAM: IC ini mencakup static RAM 8x8 yang menyimpan setiap digit yang ditampilkan
- Serial Interface: MAX7219 mendukung serial interface dengan maksimal 10 MHz
- Kompatibilitas: IC ini kompatibel dengan SPI™, QSPI™, dan MICROWIRE™
- Slew-Rate Limit: Segment driver MAX7221 memiliki slew-rate terbatas untuk mengurangi EMI
10. Motor DC
- Standard 130 Type DC motor
- Operating Voltage: 4.5V to 9V
- Recommended/Rated Voltage: 6V
- Current at No load: 70mA (max)
- No-load Speed: 9000 rpm
- Loaded current: 250mA (approx)
- Rated Load: 10g*cm
- Motor Size: 27.5mm x 20mm x 15mm
- Weight: 17 grams
DIP switch, atau Dual Inline Package switch, adalah jenis saklar yang terdiri dari beberapa saklar kecil yang terpasang dalam paket berbentuk baris ganda pada rangkaian elektronik terpadu atau modul. Setiap saklar memiliki dua posisi, ON dan OFF, yang digunakan untuk konfigurasi atau pengaturan pada perangkat elektronik, seperti menetapkan alamat atau parameter lainnya. DIP switch umumnya memberikan kemudahan penggunaan tanpa memerlukan keahlian khusus dalam pengaturan, meskipun beberapa pengembang kini beralih ke metode konfigurasi yang lebih canggih.
DIP switch, atau Dual Inline Package switch, bekerja berdasarkan prinsip sederhana saklar elektronik yang dapat berada dalam dua posisi, ON (hidup) atau OFF (mati). Dalam konteks penggunaannya pada rangkaian terpadu atau modul, setiap saklar DIP switch merepresentasikan satu bit informasi. Ketika saklar dalam posisi ON, itu menghubungkan pin terkait, sementara posisi OFF memutuskan hubungan. Pengaturan atau konfigurasi tertentu dapat dicapai dengan mengatur posisi ON atau OFF dari masing-masing saklar DIP switch sesuai dengan kebutuhan aplikasi. DIP switch sering digunakan untuk pengaturan alamat atau parameter lainnya dalam rangkaian elektronik tanpa memerlukan pemrograman atau perangkat lunak tambahan.
3. IC MAX7219
IC MAX7219 adalah IC yang dirancang untuk mengontrol Dot Matrix LED 8×8, 7-segment LED hingga 8 digit atau individual LED 64 titik.Konfigurasi Pin
Deskripsi untuk setiap pin diberikan di bawah ini.
Pin Number | Description |
COMMON CATHODE OF DISPLAY SEGMENTS | |
2 | DIG0- Common ground for all eight segments of DIGIT0 |
11 | DIG1- Common ground for all eight segments of DIGIT1 |
6 | DIG2- Common ground for all eight segments of DIGIT2 |
7 | DIG3- Common ground for all eight segments of DIGIT3 |
3 | DIG4- Common ground for all eight segments of DIGIT4 |
10 | DIG5- Common ground for all eight segments of DIGIT5 |
5 | DIG6- Common ground for all eight segments of DIGIT6 |
8 | DIG7- Common ground for all eight segments of DIGIT7 |
SHARED TERMINALS | |
4 | GND |
19 | V+- Power Supply |
SHARED SEGMENT TERMINAL OF ALL EIGHT DIGITS | |
14 | SEG A – SEGEMTENT A of all DIGITS |
16 | SEG B – SEGEMTENT B of all DIGITS |
20 | SEG C – SEGEMTENT C of all DIGITS |
23 | SEG D – SEGEMTENT D of all DIGITS |
21 | SEG E – SEGEMTENT E of all DIGITS |
15 | SEG F – SEGEMTENT F of all DIGITS |
17 | SEG G – SEGEMTENT G of all DIGITS |
22 | SEG DP – SEGEMTENT DOT of all DIGITS |
FUNCTION PINS | |
1 | DIN – Serial Data Input Pin |
12 | LOAD(CS) – Chip Select or Data shift pin |
13 | CLK – Clock Pin |
24 | DOUT – Pin used to Connect Second chip serially |
18 | ISET – current output adjust pin |
Fitur dan Spesifikasi
- Operating voltage range: +4.0 to +5.5V
- Recommended operating voltage: +5V
- Maximum supply voltage: 6V
- Maximum current allowed to draw through each segment pin: 100mA
- Maximum current allowed to through each DIGIT ground pin: 500mA
- Low power consumption
- Data-to-Segment Delay Time: 2.2mSec
- Operating temperature: 0°C to +70°C
- Storage Temperature: -65°C to +150°C
4. Arduino Uno
Arduino adalah kit elektronik atau papan rangkaian elektronik open source yang didalamnya terdapat utama yaitu sebuah chip mikrokontroler dengan jenis AVR dari perusahaan Atmel. Arduino yang kita gunakan dalam praktikum ini adalah Arduino Uno yang menggungakan chip AVR ATmega 328P. Dalam memprogram Arduino, kita bisa menggunakan komunikasi serial agar Arduino dapat berhubungan dengan komputer ataupun perangkat lain.
Adapun spesifikasi dari Arduino Uno ini adalah sebagai berikut :
Bagian-bagian arduino uno:
-Power USB
Digunakan untuk menghubungkan Papan Arduino dengan komputer lewat koneksi USB.
-Power jack
Supply atau sumber listrik untuk Arduino dengan tipe Jack. Input DC 5 - 12 V.
-Crystal Oscillator
Kristal ini digunakan sebagai layaknya detak jantung pada Arduino. Jumlah cetak menunjukkan 16000 atau 16000 kHz, atau 16 MHz.
-Reset
Digunakan untuk mengulang program Arduino dari awal atau Reset.
-Digital Pins I / O
Papan Arduino UNO memiliki 14 Digital Pin. Berfungsi untuk memberikan nilai logika (0 atau 1). Pin berlabel " ~ " adalah pin-pin PWM ( Pulse Width Modulation ) yang dapat digunakan untuk menghasilkan PWM.
-Analog Pins
Papan Arduino UNO memiliki 6 pin analog A0. Digunakan untuk membaca sinyal atau sensor analog seperti sensor jarak, suhu, dsb, dan mengubahnya menjadi nilai digital.
-LED Power Indicator
Lampu ini akan menyala dan menandakan Papan Arduino mendapatkan supply listrik dengan baik.
Bagian - bagian pendukung:
-RAM
RAM (Random Access Memory) adalah tempat penyimpanan sementara pada komputer yang isinya dapat diakses dalam waktu yang tetap, tidak memperdulikan letak data tersebut dalam memori atau acak. Secara umum ada 2 jenis RAM yaitu SRAM (Static Random Acces Memory) dan DRAM (Dynamic Random Acces Memory).
-ROM
ROM (Read-only Memory) adalah perangkat keras pada computer yang dapat menyimpan data secara permanen tanpa harus memperhatikan adanya sumber listrik. ROM terdiri dari Mask ROM, PROM, EPROM, EEPROM.
Block Diagram Mikrokontroler ATMega 328P pada Arduino UNO
Adapun block diagram mikrokontroler ATMega 328P dapat dilihat pada gambar berikut:
Block diagram dapat digunakan untuk memudahkan / memahami bagaimana kinerja dari mikrokontroler ATMega 328P.
Pin-pin ATMega 328P:
5. Dot Matrix
Dot matrix adalah kumpulan LED yang tersusun secara baris matrix sehingga memiliki posisi x dan y. dengan adanya posisi fix ini maka LED dapat dikontrol nyalanya dengan melakukan pengontrolan posisi pin x dan y. dot matrix dapat menampilkan tampilan dengan variasi lebih banyak tergantung dari jumlah LED pada dot matrix tersebut. Dot matrix terdapat pada integrated output dan dapat digunakan dengan menghubungkan pin ke Arduino.
Skematik
6. Sensor PIR
Sensor PIR atau disebut juga dengan Passive Infra Red merupakan sensor yang digunakan untuk mendeteksi adanya pancaran sinar infra merah dari suatu object.
Konfigurasi PIN
Sensor PIR terdiri dari beberapa bagian yaitu :
a. Lensa Fresnel
Lensa Fresnel pertama kali digunakan pada tahun 1980an. Digunakan sebagai lensa yang memfokuskan sinar pada lampu mercusuar. Penggunaan paling luas pada lensa Fresnel adalah pada lampu depan mobil, di mana mereka membiarkan berkas parallel secara kasar dari pemantul parabola dibentuk untuk memenuhi persyaratan pola sorotan utama. Namun kini, lensa Fresnel pada mobil telah ditiadakan diganti dengan lensa plain polikarbonat. Lensa Fresnel juga berguna dalam pembuatan film, tidak hanya karena kemampuannya untuk memfokuskan sinar terang, tetapi juga karena intensitas cahaya yang relative konstan diseluruh lebar berkas cahaya.
b. IR Filter
IR Filter dimodul sensor PIR ini mampu menyaring panjang gelombang sinar infrared pasif antara 8 sampai 14 mikrometer, sehingga panjang gelombang yang dihasilkan dari tubuh manusia yang berkisar antara 9 sampai 10 mikrometer ini saja yang dapat dideteksi oleh sensor. Sehingga Sensor PIR hanya bereaksi pada tubuh manusia saja.
c. Pyroelectric Sensor
Seperti tubuh manusia yang memiliki suhu tubuh kira-kira 32˚C, yang merupakan suhu panas yang khas yang terdapat pada lingkungan. Pancaran sinar inframerah inilah yang kemudian ditangkap oleh Pyroelectric sensor yang merupakan inti dari sensor PIR ini sehingga menyebabkan Pyroelectic sensor yang terdiri dari galium nitrida, caesium nitrat dan litium tantalate menghasilkan arus listrik. Mengapa bisa menghasilkan arus listrik? Karena pancaran sinar inframerah pasif ini membawa energi panas. Material pyroelectric bereaksi menghasilkan arus listrik karena adanya energi panas yang dibawa oleh infrared pasif tersebut. Prosesnya hampir sama seperti arus listrik yang terbentuk ketika sinar matahari mengenai solar cell.
d. Amplifier
Sebuah sirkuit amplifier yang ada menguatkan arus yang masuk pada material pyroelectric.
e. Komparator
Setelah dikuatkan oleh amplifier kemudian arus dibandingkan oleh komparator sehingga mengahasilkan output.
Pada grafik tersebut ; (a) Arah yang berbeda mengasilkan tegangan yang bermuatan berbeda ; (b) Semakin dekat jarak objek terhadap sensor PIR, maka semakin besar tegangan output yang dihasilkan ; (c) Semakin cepat objek bergerak, maka semakin cepat terdeteksi oleh sensor PIR karena infrared yang ditimbulkan dengan lebih cepat oleh objek semakin mudah dideteksi oleh PIR, namun semakin sedikit juga waktu yang dibutuhkan karena sudah diluar jangkauan sensor PIR.
Dari grafik, didapatkan bahwa suhu juga mempengaruhi seberapa jauh PIR dapat mendeteksi adanya infrared dimana semakin tinggi suhu disekitar maka semakin pendek jarak yang bisa diukur oleh PIR.
Sensor Suara adalah sensor yang memiliki cara kerja merubah besaran suara menjadi besaran listrik. Pada dasarnya prinsip kerja pada alat ini hampir mirip dengan cara kerja sensor sentuh pada perangkat seperti telepon genggam, laptop, dan notebook. Sensor ini bekerja berdasarkan besar kecilnya kekuatan gelombang suara yang mengenai membran sensor yang menyebabkan bergeraknya membran sensor yang memiliki kumparan kecil dibalik membran tersebut naik dan turun. Kecepatan gerak kumparan tersebut menentukan kuat lemahnya gelombang listrik yang dihasilkannya.Spesifikasi :
- Sensitivitas dapat diatur (pengaturan manual pada potensiometer)
- Condeser yang digunakan memiliki sensitivitas yang tinggi
- Tegangan kerja antara 3.3V – 5V
- Terdapat 2 pin keluaran yaitu tegangan analog dan Digital output
- Sudah terdapat lubang baut untuk instalasi
- Sudah terdapat indikator led
Konfigurasi pin:
Grafik:
Touch Sensor atau Sensor Sentuh adalah sensor elektronik yang dapat mendeteksi sentuhan. Sensor Sentuh ini pada dasarnya beroperasi sebagai sakelar apabila disentuh, seperti sakelar pada lampu, layar sentuh ponsel dan lain sebagainya. Sensor Sentuh ini dikenal juga sebagai Sensor Taktil (Tactile Sensor). Seiring dengan perkembangan teknologi, sensor sentuh ini semakin banyak digunakan dan telah menggeser peranan sakelar mekanik pada perangkat-perangkat elektronik.
Berdasarkan fungsinya, Sensor Sentuh dapat dibedakan menjadi dua jenis utama yaitu Sensor Kapasitif dan Sensor Resistif. Sensor Kapasitif atau Capacitive Sensor bekerja dengan mengukur kapasitansi sedangkan sensor Resistif bekerja dengan mengukur tekanan yang diberikan pada permukaannya.
Sensor Kapasitif
Sensor sentuh Kapasitif merupakan sensor sentuh yang sangat populer pada saat ini, hal ini dikarenakan Sensor Kapasitif lebih kuat, tahan lama dan mudah digunakan serta harga yang relatif lebih murah dari sensor resistif. Ponsel-ponsel pintar saat ini telah banyak yang menggunakan teknologi ini karena juga menghasilkan respon yang lebih akurat.
Berbeda dengan Sensor Resistif yang menggunakan tekanan tertentu untuk merasakan perubahan pada permukaan layar, Sensor Kapasitif memanfaatkan sifat konduktif alami pada tubuh manusia untuk mendeteksi perubahan layar sentuhnya. Layar sentuh sensor kapasitif ini terbuat dari bahan konduktif (biasanya Indium Tin Oxide atau disingkat dengan ITO) yang dilapisi oleh kaca tipis dan hanya bisa disentuh oleh jari manusia atau stylus khusus ataupun sarung khusus yang memiliki sifat konduktif.
Pada saat jari menyentuh layar, akan terjadi perubahaan medan listrik pada layar sentuh tersebut dan kemudian di respon oleh processor untuk membaca pergerakan jari tangan tersebut. Jadi perlu diperhatikan bahwa sentuhan kita tidak akan di respon oleh layar sensor kapasitif ini apabila kita menggunakan bahan-bahan non-konduktif sebagai perantara jari tangan dan layar sentuh tersebut.
Sensor Resistif
Tidak seperti sensor sentuh kapasitif, sensor sentuh resistif ini tidak tergantung pada sifat listrik yang terjadi pada konduktivitas pelat logam. Sensor Resistif bekerja dengan mengukur tekanan yang diberikan pada permukaannya. Karena tidak perlu mengukur perbedaan kapasitansi, sensor sentuh resistif ini dapat beroperasi pada bahan non-konduktif seperti pena, stylus atau jari di dalam sarung tangan.
Sensor sentuh resistif terdiri dari dua lapisan konduktif yang dipisahkan oleh jarak atau celah yang sangat kecil. Dua lapisan konduktif (lapisan atas dan lapisan bawah) ini pada dasarnya terbuat dari sebuah film. Film-film umumnya dilapisi oleh Indium Tin Oxide yang merupakan konduktor listrik yang baik dan juga transparan (bening).
Cara kerjanya hampir sama dengan sebuah sakelar, pada saat film lapisan atas mendapatkan tekanan tertentu baik dengan jari maupun stylus, maka film lapisan atas akan bersentuhan dengan film lapisan bawah sehingga menimbulkan aliran listrik pada titik koordinat tertentu layar tersebut dan memberikan signal ke prosesor untuk melakukan proses selanjutnya.
a. Prosedur [Kembali]
- Prosedur percobaan:
- Siapakan komponen yang dibutuhkan
- Susun rangkaian sebagaimana yang
dibutuhkan
- Inputkan codingan Arduino
- Jalankan rangkaian
- Lakukan koreksi jika terjadi error, jika tidak terjadi error maka rangkaian berhasil dan selesai.
b. Hardware dan Diagram Blok [Kembali]
- Hardware
- Arduino Uno
- PIR sensor
- Touch sensor
- Sound sensor
- DIP Switch
- Dot Matrix
- Motor DC
- Lampu
- Diagram Blok
- Rangkaian Simulasi
- Prinsip Kerja
c. Rangkaian Simulasi dan Prinsip Kerja [Kembali]
d. Flowchart dan Listing Program [Kembali]
- Flowchart
- Listing Program
// Program to exercise the MD_MAX72XX library
//
// Uses most of the functions in the library
#include <MD_MAX72xx.h>
//#include <SPI.h>
// Turn on debug statements to the serial output
#define DEBUG 1
#define input1 3
#define input2 4
#define input3 5
#define pir 7
#define touch 8
#define sound 9
#define motor 6
#define led 2
#if DEBUG
#define PRINT(s, x) { Serial.print(F(s)); Serial.print(x); }
#define PRINTS(x) Serial.print(F(x))
#define PRINTD(x) Serial.println(x, DEC)
#else
#define PRINT(s, x)
#define PRINTS(x)
#define PRINTD(x)
#endif
// Define the number of devices we have in the chain and the hardware interface
// NOTE: These pin numbers will probably not work with your hardware and may
// need to be adapted
#define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW
#define MAX_DEVICES 11
#define CLK_PIN 13 // or SCK
#define DATA_PIN 11 // or MOSI
#define CS_PIN 10 // or SS
// SPI hardware interface
MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
// Arbitrary pins
// MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
// We always wait a bit between updates of the display
#define DELAYTIME 100 // in milliseconds
void scrollText(char *p)
{
uint8_t charWidth;
uint8_t cBuf[8]; // this should be ok for all built-in fonts
mx.clear();
while (*p != '\0')
{
charWidth = mx.getChar(*p++, sizeof(cBuf) / sizeof(cBuf[0]), cBuf);
for (uint8_t i=0; i<=charWidth; i++) // allow space between characters
{
mx.transform(MD_MAX72XX::TSL);
if (i < charWidth)
mx.setColumn(0, cBuf[i]);
delay(DELAYTIME);
}
}
}
void spiral()
// setPoint() used to draw a spiral across the whole display
{
PRINTS("\nSpiral in");
int rmin = 0, rmax = ROW_SIZE-1;
int cmin = 0, cmax = (COL_SIZE*MAX_DEVICES)-1;
mx.clear();
while ((rmax > rmin) && (cmax > cmin))
{
// do row
for (int i=cmin; i<=cmax; i++)
{
mx.setPoint(rmin, i, true);
delay(DELAYTIME/MAX_DEVICES);
}
rmin++;
// do column
for (uint8_t i=rmin; i<=rmax; i++)
{
mx.setPoint(i, cmax, true);
delay(DELAYTIME/MAX_DEVICES);
}
cmax--;
// do row
for (int i=cmax; i>=cmin; i--)
{
mx.setPoint(rmax, i, true);
delay(DELAYTIME/MAX_DEVICES);
}
rmax--;
// do column
for (uint8_t i=rmax; i>=rmin; i--)
{
mx.setPoint(i, cmin, true);
delay(DELAYTIME/MAX_DEVICES);
}
cmin++;
}
}
void bounce()
// Animation of a bouncing ball
{
const int minC = 0;
const int maxC = mx.getColumnCount()-1;
const int minR = 0;
const int maxR = ROW_SIZE-1;
int nCounter = 0;
int r = 0, c = 2;
int8_t dR = 1, dC = 1; // delta row and column
PRINTS("\nBouncing ball");
mx.clear();
while (nCounter++ < 200)
{
mx.setPoint(r, c, false);
r += dR;
c += dC;
mx.setPoint(r, c, true);
delay(DELAYTIME/2);
if ((r == minR) || (r == maxR))
dR = -dR;
if ((c == minC) || (c == maxC))
dC = -dC;
}
}
void intensity()
// Demonstrates the control of display intensity (brightness) across
// the full range.
{
uint8_t row;
PRINTS("\nVary intensity ");
mx.clear();
// Grow and get brighter
row = 0;
for (int8_t i=0; i<=MAX_INTENSITY; i++)
{
mx.control(MD_MAX72XX::INTENSITY, i);
if (i%2 == 0)
mx.setRow(row++, 0xff);
delay(DELAYTIME*3);
}
mx.control(MD_MAX72XX::INTENSITY, 8);
}
void blinking()
// Uses the test function of the MAX72xx to blink the display on and off.
{
int nDelay = 500;
PRINTS("\nBlinking");
mx.clear();
while (nDelay > 0)
{
mx.control(MD_MAX72XX::TEST, MD_MAX72XX::ON);
delay(nDelay);
mx.control(MD_MAX72XX::TEST, MD_MAX72XX::OFF);
delay(nDelay);
nDelay -= DELAYTIME;
}
}
void scanLimit(void)
// Uses scan limit function to restrict the number of rows displayed.
{
PRINTS("\nScan Limit");
mx.clear();
mx.control(MD_MAX72XX::UPDATE, MD_MAX72XX::OFF);
for (uint8_t row=0; row<ROW_SIZE; row++)
mx.setRow(row, 0xff);
mx.control(MD_MAX72XX::UPDATE, MD_MAX72XX::ON);
for (int8_t s=MAX_SCANLIMIT; s>=0; s--)
{
mx.control(MD_MAX72XX::SCANLIMIT, s);
delay(DELAYTIME*5);
}
mx.control(MD_MAX72XX::SCANLIMIT, MAX_SCANLIMIT);
}
void transformation1()
// Demonstrates the use of transform() to move bitmaps on the display
// In this case a user defined bitmap is created and animated.
{
uint8_t arrow[COL_SIZE] =
{
0b00001000,
0b00011100,
0b00111110,
0b01111111,
0b00011100,
0b00011100,
0b00111110,
0b00000000
};
MD_MAX72XX::transformType_t t[] =
{
MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL,
MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL,
MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL,
MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL,
MD_MAX72XX::TFLR,
MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR,
MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR,
MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR,
MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR,
MD_MAX72XX::TRC,
MD_MAX72XX::TSD, MD_MAX72XX::TSD, MD_MAX72XX::TSD, MD_MAX72XX::TSD,
MD_MAX72XX::TSD, MD_MAX72XX::TSD, MD_MAX72XX::TSD, MD_MAX72XX::TSD,
MD_MAX72XX::TFUD,
MD_MAX72XX::TSU, MD_MAX72XX::TSU, MD_MAX72XX::TSU, MD_MAX72XX::TSU,
MD_MAX72XX::TSU, MD_MAX72XX::TSU, MD_MAX72XX::TSU, MD_MAX72XX::TSU,
MD_MAX72XX::TINV,
MD_MAX72XX::TRC, MD_MAX72XX::TRC, MD_MAX72XX::TRC, MD_MAX72XX::TRC,
MD_MAX72XX::TINV
};
PRINTS("\nTransformation1");
mx.clear();
// use the arrow bitmap
mx.control(MD_MAX72XX::UPDATE, MD_MAX72XX::OFF);
for (uint8_t j=0; j<mx.getDeviceCount(); j++)
mx.setBuffer(((j+1)*COL_SIZE)-1, COL_SIZE, arrow);
mx.control(MD_MAX72XX::UPDATE, MD_MAX72XX::ON);
delay(DELAYTIME);
// run through the transformations
mx.control(MD_MAX72XX::WRAPAROUND, MD_MAX72XX::ON);
for (uint8_t i=0; i<(sizeof(t)/sizeof(t[0])); i++)
{
mx.transform(t[i]);
delay(DELAYTIME*4);
}
mx.control(MD_MAX72XX::WRAPAROUND, MD_MAX72XX::OFF);
}
void transformation2()
// Demonstrates the use of transform() to move bitmaps on the display
// In this case font characters are loaded into the display for animation.
{
MD_MAX72XX::transformType_t t[] =
{
MD_MAX72XX::TINV,
MD_MAX72XX::TRC, MD_MAX72XX::TRC, MD_MAX72XX::TRC, MD_MAX72XX::TRC,
MD_MAX72XX::TINV,
MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL,
MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR,
MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR,
MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL,
MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR,
MD_MAX72XX::TSD, MD_MAX72XX::TSU, MD_MAX72XX::TSD, MD_MAX72XX::TSU,
MD_MAX72XX::TFLR, MD_MAX72XX::TFLR, MD_MAX72XX::TFUD, MD_MAX72XX::TFUD
};
PRINTS("\nTransformation2");
mx.clear();
mx.control(MD_MAX72XX::WRAPAROUND, MD_MAX72XX::OFF);
// draw something that will show changes
for (uint8_t j=0; j<mx.getDeviceCount(); j++)
{
mx.setChar(((j+1)*COL_SIZE)-1, '0'+j);
}
delay(DELAYTIME*5);
// run thru transformations
for (uint8_t i=0; i<(sizeof(t)/sizeof(t[0])); i++)
{
mx.transform(t[i]);
delay(DELAYTIME*3);
}
}
void wrapText()
// Display text and animate scrolling using auto wraparound of the buffer
{
PRINTS("\nwrapText");
mx.clear();
mx.wraparound(MD_MAX72XX::ON);
// draw something that will show changes
for (uint16_t j=0; j<mx.getDeviceCount(); j++)
{
mx.setChar(((j+1)*COL_SIZE)-1, (j&1 ? 'M' : 'W'));
}
delay(DELAYTIME*5);
// run thru transformations
for (uint16_t i=0; i<3*COL_SIZE*MAX_DEVICES; i++)
{
mx.transform(MD_MAX72XX::TSL);
delay(DELAYTIME/2);
}
for (uint16_t i=0; i<3*COL_SIZE*MAX_DEVICES; i++)
{
mx.transform(MD_MAX72XX::TSR);
delay(DELAYTIME/2);
}
for (uint8_t i=0; i<ROW_SIZE; i++)
{
mx.transform(MD_MAX72XX::TSU);
delay(DELAYTIME*2);
}
for (uint8_t i=0; i<ROW_SIZE; i++)
{
mx.transform(MD_MAX72XX::TSD);
delay(DELAYTIME*2);
}
mx.wraparound(MD_MAX72XX::OFF);
}
void showCharset(void)
// Run through display of the the entire font characters set
{
mx.clear();
mx.update(MD_MAX72XX::OFF);
for (uint16_t i=0; i<256; i++)
{
mx.clear(0);
mx.setChar(COL_SIZE-1, i);
if (MAX_DEVICES >= 3)
{
char hex[3];
sprintf(hex, "%02X", i);
mx.clear(1);
mx.setChar((2*COL_SIZE)-1,hex[1]);
mx.clear(2);
mx.setChar((3*COL_SIZE)-1,hex[0]);
}
mx.update();
delay(DELAYTIME*2);
}
mx.update(MD_MAX72XX::ON);
}
void ssound(){
int in1 = digitalRead(input1);
int in2 = digitalRead(input2);
int in3 = digitalRead(input3);
int s_sound = digitalRead(sound);
if(s_sound == HIGH){
if(in1 == LOW){
scrollText("STAND BY");
}
else if(in2 == LOW){
scrollText("RAPAT");
}
else if(in3 == LOW){
scrollText("PRATIKUM");
}
}
else if(s_sound == LOW){
scrollText(" ");
}
}
void spir(){
int s_pir = digitalRead(pir);
if(s_pir == HIGH){
digitalWrite(led, HIGH);
}
else if(s_pir == LOW){
digitalWrite(led, LOW);
}
}
void stouch(){
int s_touch = digitalRead(touch);
if(s_touch == HIGH){
digitalWrite(motor, HIGH);
}
else if(s_touch == LOW){
digitalWrite(motor, LOW);
}
}
void setup()
{
mx.begin();
#if DEBUG
Serial.begin(57600);
#endif
pinMode(input1, INPUT);
pinMode(input2, INPUT);
pinMode(input3, INPUT);
pinMode(pir, INPUT);
pinMode(touch, INPUT);
pinMode(sound, INPUT);
pinMode(motor, OUTPUT);
pinMode(led, OUTPUT);
}
void loop()
{
spir();
stouch();
ssound();
}