Tentang proyek ini
Setelah beberapa upaya untuk membuat teks bergulir pada matriks 8x8, saya menemukan manual paling lengkap di halaman Lab Tertanam:http://embedded-lab.com/blog/portable-bluetooth-enabled-scrolling-led-matrix-display -part-1/.
Perangkat berisi Arduino nano, modul Bluetooth untuk menerima data dari smartphone dan matriks LED 8x8 yang digerakkan oleh MAX7219.
Tidak seperti di sana, saya menggunakan modul matriks 8x8 siap pakai dengan chip MAX7219 yang dapat dibeli dengan sangat murah di Ebay atau Alexpress. Saat ini, saya hanya memiliki 7 modul, jadi saya membuat sedikit modifikasi kode. Aplikasi android tidak ada lagi di Google Play store, jadi Anda dapat mengunduhnya dari :
https://bluetooth-spp-pro.en.uptodown.com/android
. Itu dapat mengontrol kecepatan pengguliran, kecerahan led, jeda, hapus teks, dan beberapa tombol teks yang telah ditentukan.
Pada akhirnya, saya memasukkan seluruh perangkat ke dalam sebuah kotak, yang saya buat dari bahan PVC yang saya pasang dengan wallpaper hitam.
Perpustakaan Arduino:
https://github.com/markruys/arduino-Max72xxPanel
https://github.com/adafruit/Adafruit-GFX-Library
Kode
kodeArduino
/*Berikut adalah perintah yang dikenali Arduino. 1. Setiap aliran karakter harus dikirim dalam tanda kurung. Contoh:Misalkan jika Anda ingin menampilkan pesan "Halo! Apa kabar?" Anda harus mengirimkannya seperti ini:(Halo! Bagaimana kabarmu?) Ketika Arduino menerima karakter pertama sebagai '(', ia memahami bahwa karakter yang akan datang adalah data tampilan sampai ')' diterima. Pesan ditampilkan sebagai bergulir dari kanan ke kiri. 2. Intensitas tampilan dapat ditambah atau dikurangi dengan mengirimkan /+ atau /- masing-masing. Setiap kali Arduino menerima '/', ia memahami bahwa itu adalah perintah. Ini mendukung 16 tingkat kecerahan. 3. Demikian pula, kecepatan pengguliran dapat ditingkatkan atau diturunkan dengan mengirimkan / masing-masing. 4. /p digunakan untuk menjeda pesan yang sedang bergulir. Mengirim perintah ini lagi akan melanjutkan gulir. 5. /e digunakan untuk menghapus buffer dan mengosongkan tampilan Koneksi:Easy Matrix Arduino VCC +5V DIN MOSI (Pin 11) LOAD pinCS yang didefinisikan dalam program di bawah CLK SCK (Pin 13) GND Gnd Komunikasi UART terjadi pada 9600 baud . Ditulis oleh:Rajendra Bhatt Kontak:[email protected] Tautan produk Easy Matrix:http://embedded-lab.com/blog/?p=9186 */#include #include #include int pinCS =10; // Lampirkan CS ke pin ini, DIN ke MOSI dan CLK ke SCK (cf http://arduino.cc/en/Reference/SPI )int numberOfHorizontalDisplays =7;int numberOfVerticalDisplays =1;Max72xxPanel matrix =Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);int scrollspeed =100; // Kecepatan gulir default (milidetik) int spacer =1; // Spasi antara dua karakterint lebar =5 + spacer; // Lebar font adalah 5 pikselboolean inChar =false, NewData =false, pause =false;boolean dataAvailable =false;char inputString[512];int count =0, BTvalue =5;void setup() { matrix.setIntensity(1 ); // Gunakan nilai antara 0 dan 15 untuk kecerahan// Sesuaikan dengan kebutuhan Anda matrix.setPosition(0, 0, 0); // Tampilan pertama di <0, 7> matrix.setPosition(1, 1, 0); // Tampilan kedua berada di <1, 0> matrix.setPosition(2, 2, 0); // Tampilan ketiga berada di <2, 0> matrix.setPosition(3, 3, 0); // Dan tampilan terakhir ada di <3, 0> matrix.setPosition(4, 4, 0); // Tampilan pertama di <0, 0> matrix.setPosition(5, 5, 0); // Tampilan kedua berada di <1, 0> matrix.setPosition(6, 6, 0); // Tampilan ketiga di <2, 0> // ... // matrix.setRotation(0, 2); // Tampilan pertama adalah posisi terbalik // matrix.setRotation(3, 2); // Penangguhan yang sama untuk tampilan terakhir matrix.fillScreen(0); matriks.tulis(); Serial.begin(9600); // inisialisasi komunikasi serial // Menggunakan interupsi 0 pada pin digital 2. pinMode(2, INPUT); digitalWrite(2, RENDAH); attachInterrupt(0, serialInterrupt, CHANGE); }void loop(){ if(dataTersedia){ display_data(); } }void display_data(){ for ( int i =0; i =0 &&huruf>=0 ) { if ( huruf 0) { Data Baru =benar; } } } } if(ch =='/'){ // Mode perintah inChar =true; while(inChar){ if (Serial.available()) { ch =Serial.read(); // '/+' adalah untuk peningkatan kecerahan if(ch =='+'){ if(BTvalue <15) { BTvalue ++; matrix.setIntensity (nilai BT); } merusak; } // '/-' adalah untuk penurunan kecerahan if(ch =='-'){ if(BTvalue> 0){ BTvalue --; matrix.setIntensity (nilai BT); } merusak; } // '/>' untuk memperlambat scroll if(ch =='>'){ if(scrollspeed <200) { scrollspeed =scrollspeed + 20; } merusak; } // '/<' untuk membuat scroll lebih cepat if(ch =='<'){ if(scrollspeed> 10){ scrollspeed=scrollspeed-10; } merusak; } // '/e' untuk menghapus tampilan if(ch =='e'){ dataAvailable =false; merusak; } // '/p' adalah untuk menjeda tampilan if(ch =='p'){ if(pause ==false){ pause =true; } else { jeda =salah; } merusak; } lain { istirahat; // Perintah tidak dikenal } } } } // if(ch =='!') } // while(serial.available) inService =false;}
Skema