Witam, jestem Artur.
To mój pierwszy projekt na majsterkowo.pl i mam nadzieję, że będzie się podobał.
Z okazji świąt w grudniowe popołudnie postanowiłem przygotować wyświetlacz LED 8×8 wyświetlający “Wesołych Świąt” i inne komunikaty. Jest połączony z Arduino i ma dołączony moduł HC-05 (HC-06 też spokojnie wystarczy) dzięki czemu możemy przesyłać dowolne komunikaty z urządzenia mobilnego obsługującego technologię Bluetooth.
Aby nie pisać całości od początku, wykorzystałem rozwiązanie z http://embedded-lab.com/blog/portable-bluetooth-enabled-scrolling-led-matrix-display-part-1/
Okazało się, że projekt z wymienionej strony nie uwzględnia polskich znaków diakrytycznych (ą, ć, ę, ł, ń, ó, ś, ż, ź).
Dokonałem drobnych przeróbek w kodzie biblioteki Adafruit GFX oraz w kodzie programu Arduino.
Moduł Bluetooth umożliwia umieszczenie wyświetlacza wraz z Arduino w dowolnym miejscu i przesyłanie komunikatów bezprzewodowo.
Potrzebne części:
- wyświetlacz 8×8 z kontrolerem MAX7219 (ja wykorzystałem 3 moduły)
- opornik 10K
- Arduino UNO
- Moduł HC-05 lub HC-06
- przejściówka UART<->USB
Konfiguracja modułu Bluetooth:
Moduł Bluetooth na ustawieniach domyślnych jest już wprawdzie gotowy do pracy, ale przydało by się zmienić jego nazwę oraz hasło wymagane do połączenia. Aby to zrobić, podłączamy moduł do komputera przez dowolną przejściówkę UART<->USB.
Połączenia:
RXD(BT)<->TXD(USB)
TXD(BT)<->RXD(USB)
GND(BT)<->GND(USB)
VCC(BT)<->+5V(USB)
UWAGA! Najpierw podłączamy masę!
Następnie przytrzymujemy czymś przycisk znajdujący się na module, a jeżeli go nie ma zwieramy pin KEY modułu do pinu 3V3 na przejściówce.
Podłączamy USB. Układ powinien stabilnie migać diodą co jedną lub dwie sekundy. Teoretycznie możemy już puścić przycisk, ale nie jest to zalecane.
Łączymy się z układem poprzez znany już pewnie wszystkim program PuTTY.
Ustawienia połączenia:
Serial line: Port, na którym macie przejściówkę. Możecie to sprawdzić w panelu sterowania. U mnie jest to akurat COM3.
Speed: 38400
Connection type: Serial
Klikamy Open.
Po połączeniu wysyłamy następujące komendy:
AT
AT+ROLE=0(wymagane tylko dla HC-05)
AT+NAME=MODUL(lub inna nazwa)
AT+PSWD=1234(czterocyfrowy kod wymagany przy parowaniu)
Układ na wszystkie komendy powienien odpowiadać OK.
Jeżeli moduł po wysłaniu komendy wysyła nam OK bez przerwy, to wciskamy drugi raz enter.
Jeżeli zaś otrzymujemy ERROR(0), oznacza to, że mamy jakiś błąd w komendzie.
Teraz puszczamy przycisk i wydajemy komendę AT+RESET. Doprowadzi to do zresetowania układu i wyjścia z tybu komend.
Teraz pora sprawdzić komunikację między modułem, a urządzeniem.
W tym celu instalujemy na urządzeniu aplikację Bluetooth spp tools pro dostępną ze sklepu Play – w przypadku, gdy dysponujemy urządzeniem z systemem Android.
W przypadku innych urządzeń instalujemy dowolną aplikację umożliwiającą komunikację Bluetooth.
Po zakończeniu skanowania klikamy w nazwę naszego modułu.
Klikamy Pair.
Wpisujemy wcześniej ustalony kod i klikamy OK.
Następnie klikamy Byte stream mode.
Jesteśmy gotowi do wysyłania komend i ich odbierania przez komputer i aplikację.
Podłączanie wyświetlaczy
Wyświetlacze należy połączyć tak jak zaprezentowano to na stronie http://blog.hobbycomponents.com/?p=377
Jeśli mamy kilka wyświetlaczy, łączymy piny DIN i DOUT razem, a resztę po ich nazwach.
UWAGA! Nie łączymy wyświetlaczy w koło! Zawsze musi zostać jedno wyjście i wejście.
Podłączanie wejścia:
VCC(8×8) <=> 5V(Arduino)
GND(8×8) <=> GND(Arduino)
DIN(8×8) <=> Pin11(Arduino)
CS(8×8) <=> Pin10(Arduino)
CLK(8×8) <=> Pin13(Arduino)
Na wyjściu ostatniego wyświetlacza podłączamy zasilanie modułu Bluetooth:
VCC(8×8) <=> VCC(BT)
GND(8×8) <=> GND(BT)
Podczas normalnego działania programu przycisk powinien być zwolniony, a pin KEY luźny.
Teraz czas na podłączenie pinów modułu Bluetooth. Zanim to jednak zrobimy, musimy podpiać Pin0(RX) Arduino do Pinu 2 przez opornik 10K.
Gdy już to zrobiliśmy, podpinamy pin TXD modułu BT do pinu 0 Arduino, a pin RXD modułu BT wpinamy w pin 1(TX) Arduino.
Program
Aby wgrać program musimy pobrać bibliotekę Max72xxPanel
Została nam jeszcze biblioteka Adafruit GFX
Aby mieć możliwość wyświetlania polskich znaków, zmieniamy plik glcdfont.c na następujący:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 |
#ifndef FONT5X7_H #define FONT5X7_H #ifdef __AVR__ #include <avr/io.h> #include <avr/pgmspace.h> #elif defined(ESP8266) #include <pgmspace.h> #else #define PROGMEM #endif // Standard ASCII 5x7 font static const unsigned char font[] PROGMEM = { 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000,// 0b00111110, 0b01011011, 0b01001111, 0b01011011, 0b00111110,// 0b00111110, 0b01101011, 0b01001111, 0b01101011, 0b00111110,// 0b00011100, 0b00111110, 0b01111100, 0b00111110, 0b00011100,// 0b00011000, 0b00111100, 0b01111110, 0b00111100, 0b00011000,// 0b00011100, 0b01010111, 0b01111101, 0b01010111, 0b00011100,// 0b00011100, 0b01011110, 0b01111111, 0b01011110, 0b00011100,// 0b00000000, 0b00011000, 0b00111100, 0b00011000, 0b00000000,// 0b11111111, 0b11100111, 0b11000011, 0b11100111, 0b11111111,// 0b00000000, 0b00011000, 0b00100100, 0b00011000, 0b00000000,// 0b11111111, 0b11100111, 0b11011011, 0b11100111, 0b11111111,// 0b00110000, 0b01001000, 0b00111010, 0b00000110, 0b00001110,// 0b00100110, 0b00101001, 0b01111001, 0b00101001, 0b00100110,// 0b01000000, 0b01111111, 0b00000101, 0b00000101, 0b00000111,// 0b01000000, 0b01111111, 0b00000101, 0b00100101, 0b00111111,// 0b01011010, 0b00111100, 0b11100111, 0b00111100, 0b01011010,// 0b01111111, 0b00111110, 0b00011100, 0b00011100, 0b00001000,// 0b00001000, 0b00011100, 0b00011100, 0b00111110, 0b01111111,// 0b00010100, 0b00100010, 0b01111111, 0b00100010, 0b00010100,// 0b01011111, 0b01011111, 0b00000000, 0b01011111, 0b01011111,// 0b00000110, 0b00001001, 0b01111111, 0b00000001, 0b01111111,// 0b00000000, 0b01100110, 0b10001001, 0b10010101, 0b01101010,// 0b01100000, 0b01100000, 0b01100000, 0b01100000, 0b01100000,// 0b10010100, 0b10100010, 0b11111111, 0b10100010, 0b10010100,// 0b00001000, 0b00000100, 0b01111110, 0b00000100, 0b00001000,// 0b00010000, 0b00100000, 0b01111110, 0b00100000, 0b00010000,// 0b00001000, 0b00001000, 0b00101010, 0b00011100, 0b00001000,// 0b00001000, 0b00011100, 0b00101010, 0b00001000, 0b00001000,// 0b00011110, 0b00010000, 0b00010000, 0b00010000, 0b00010000,// 0b00001100, 0b00011110, 0b00001100, 0b00011110, 0b00001100,// 0b00110000, 0b00111000, 0b00111110, 0b00111000, 0b00110000,// 0b00000110, 0b00001110, 0b00111110, 0b00001110, 0b00000110,// 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000,// 0b00000000, 0b00000000, 0b01011111, 0b00000000, 0b00000000,//! 0b00000000, 0b00000111, 0b00000000, 0b00000111, 0b00000000,// 0b00010100, 0b01111111, 0b00010100, 0b01111111, 0b00010100,// 0b00100100, 0b00101010, 0b01111111, 0b00101010, 0b00010010,// 0b00100011, 0b00010011, 0b00001000, 0b01100100, 0b01100010,// 0b00110110, 0b01001001, 0b01010110, 0b00100000, 0b01010000,// 0b00000000, 0b00001000, 0b00000111, 0b00000011, 0b00000000,// 0b00000000, 0b00011100, 0b00100010, 0b01000001, 0b00000000,// 0b00000000, 0b01000001, 0b00100010, 0b00011100, 0b00000000,// 0b00101010, 0b00011100, 0b01111111, 0b00011100, 0b00101010,// 0b00001000, 0b00001000, 0b00111110, 0b00001000, 0b00001000,//+ 0b00000000, 0b10000000, 0b01110000, 0b00110000, 0b00000000,// 0b00001000, 0b00001000, 0b00001000, 0b00001000, 0b00001000,// 0b00000000, 0b00000000, 0b01100000, 0b01100000, 0b00000000,// 0b00100000, 0b00010000, 0b00001000, 0b00000100, 0b00000010,// 0b00111110, 0b01010001, 0b01001001, 0b01000101, 0b00111110,//0 0b00000000, 0b01000010, 0b01111111, 0b01000000, 0b00000000,//1 0b01110010, 0b01001001, 0b01001001, 0b01001001, 0b01000110,//2 0b00100001, 0b01000001, 0b01001001, 0b01001101, 0b00110011,//3 0b00011000, 0b00010100, 0b00010010, 0b01111111, 0b00010000,//4 0b00100111, 0b01000101, 0b01000101, 0b01000101, 0b00111001,//5 0b00111100, 0b01001010, 0b01001001, 0b01001001, 0b00110001,//6 0b01000001, 0b00100001, 0b00010001, 0b00001001, 0b00000111,//7 0b00110110, 0b01001001, 0b01001001, 0b01001001, 0b00110110,//8 0b01000110, 0b01001001, 0b01001001, 0b00101001, 0b00011110,//9 0b00000000, 0b00000000, 0b00010100, 0b00000000, 0b00000000,//: 0b00000000, 0b01000000, 0b00110100, 0b00000000, 0b00000000,//; 0b00000000, 0b00001000, 0b00010100, 0b00100010, 0b01000001,//< 0b00010100, 0b00010100, 0b00010100, 0b00010100, 0b00010100,//= 0b00000000, 0b01000001, 0b00100010, 0b00010100, 0b00001000,//> 0b00000010, 0b00000001, 0b01011001, 0b00001001, 0b00000110,//? 0b00111110, 0b01000001, 0b01011101, 0b01011001, 0b01001110,//@ 0b01111100, 0b00010010, 0b00010001, 0b00010010, 0b01111100,//A 0b01111111, 0b01001001, 0b01001001, 0b01001001, 0b00110110,//B 0b00111110, 0b01000001, 0b01000001, 0b01000001, 0b00100010,//C 0b01111111, 0b01000001, 0b01000001, 0b01000001, 0b00111110,//D 0b01111111, 0b01001001, 0b01001001, 0b01001001, 0b01000001,//E 0b01111111, 0b00001001, 0b00001001, 0b00001001, 0b00000001,//F 0b00111110, 0b01000001, 0b01000001, 0b01010001, 0b01110011,//G 0b01111111, 0b00001000, 0b00001000, 0b00001000, 0b01111111,//H 0b00000000, 0b01000001, 0b01111111, 0b01000001, 0b00000000,//I 0b00100000, 0b01000000, 0b01000001, 0b00111111, 0b00000001,//J 0b01111111, 0b00001000, 0b00010100, 0b00100010, 0b01000001,//K 0b01111111, 0b01000000, 0b01000000, 0b01000000, 0b01000000,//L 0b01111111, 0b00000010, 0b00011100, 0b00000010, 0b01111111,//M 0b01111111, 0b00000100, 0b00001000, 0b00010000, 0b01111111,//N 0b00111110, 0b01000001, 0b01000001, 0b01000001, 0b00111110,//O 0b01111111, 0b00001001, 0b00001001, 0b00001001, 0b00000110,//P 0b00111110, 0b01000001, 0b01010001, 0b00100001, 0b01011110,//Q 0b01111111, 0b00001001, 0b00011001, 0b00101001, 0b01000110,//R 0b00100110, 0b01001001, 0b01001001, 0b01001001, 0b00110010,//S 0b00000011, 0b00000001, 0b01111111, 0b00000001, 0b00000011,//T 0b00111111, 0b01000000, 0b01000000, 0b01000000, 0b00111111,//U 0b00011111, 0b00100000, 0b01000000, 0b00100000, 0b00011111,//V 0b00111111, 0b01000000, 0b00111000, 0b01000000, 0b00111111,//W 0b01100011, 0b00010100, 0b00001000, 0b00010100, 0b01100011,//X 0b00000011, 0b00000100, 0b01111000, 0b00000100, 0b00000011,//Y 0b01100001, 0b01011001, 0b01001001, 0b01001101, 0b01000011,//Z 0b00000000, 0b01111111, 0b01000001, 0b01000001, 0b01000001,//[ 0b00000010, 0b00000100, 0b00001000, 0b00010000, 0b00100000,//slash 0b00000000, 0b01000001, 0b01000001, 0b01000001, 0b01111111,//] 0b00000100, 0b00000010, 0b00000001, 0b00000010, 0b00000100,//^ 0b01000000, 0b01000000, 0b01000000, 0b01000000, 0b01000000,//_ 0b00000000, 0b00000011, 0b00000111, 0b00001000, 0b00000000,//apostrof 0b00100000, 0b01010100, 0b01010100, 0b01111000, 0b01000000,//a 0b01111111, 0b00101000, 0b01000100, 0b01000100, 0b00111000,//b 0b00111000, 0b01000100, 0b01000100, 0b01000100, 0b00101000,//c 0b00111000, 0b01000100, 0b01000100, 0b00101000, 0b01111111,//d 0b00111000, 0b01010100, 0b01010100, 0b01010100, 0b00011000,//e 0b00000000, 0b00001000, 0b01111110, 0b00001001, 0b00000010,//f 0b00011000, 0b10100100, 0b10100100, 0b10011100, 0b01111000,//g 0b01111111, 0b00001000, 0b00000100, 0b00000100, 0b01111000,//h 0b00000000, 0b01000100, 0b01111101, 0b01000000, 0b00000000,//i 0b00100000, 0b01000000, 0b01000000, 0b00111101, 0b00000000,//j 0b01111111, 0b00010000, 0b00101000, 0b01000100, 0b00000000,//k 0b00000000, 0b01000001, 0b01111111, 0b01000000, 0b00000000,//l 0b01111100, 0b00000100, 0b01111000, 0b00000100, 0b01111000,//m 0b01111100, 0b00001000, 0b00000100, 0b00000100, 0b01111000,//n 0b00111000, 0b01000100, 0b01000100, 0b01000100, 0b00111000,//o 0b11111100, 0b00011000, 0b00100100, 0b00100100, 0b00011000,//p 0b00011000, 0b00100100, 0b00100100, 0b00011000, 0b11111100,//q 0b01111100, 0b00001000, 0b00000100, 0b00000100, 0b00001000,//r 0b01001000, 0b01010100, 0b01010100, 0b01010100, 0b00100100,//s 0b00000100, 0b00000100, 0b00111111, 0b01000100, 0b00100100,//t 0b00111100, 0b01000000, 0b01000000, 0b00100000, 0b01111100,//u 0b00011100, 0b00100000, 0b01000000, 0b00100000, 0b00011100,//v 0b00111100, 0b01000000, 0b00110000, 0b01000000, 0b00111100,//w 0b01000100, 0b00101000, 0b00010000, 0b00101000, 0b01000100,//x 0b01001100, 0b10010000, 0b10010000, 0b10010000, 0b01111100,//y 0b01000100, 0b01100100, 0b01010100, 0b01001100, 0b01000100,//z 0b00000000, 0b00001000, 0b00110110, 0b01000001, 0b00000000,//{ 0b00000000, 0b00000000, 0b01110111, 0b00000000, 0b00000000,//| dzielona 0b00000000, 0b01000001, 0b00110110, 0b00001000, 0b00000000,//} 0b00000010, 0b00000001, 0b00000010, 0b00000100, 0b00000010,//~ 0b01000100, 0b01100100, 0b01010101, 0b01001100, 0b01000100,//ż 0b01100001, 0b01011011, 0b01001001, 0b01001101, 0b01000011,//Ż 0b01000100, 0b01100100, 0b01010110, 0b01001101, 0b01000100,//ź 0b01100101, 0b01011001, 0b01001001, 0b01001101, 0b01010011,//Ź 0b11111111, 0b00000001, 0b00000111, 0b00000001, 0b11111111,// 0b11111111, 0b00000001, 0b00000111, 0b00000011, 0b11111111,// 0b11111111, 0b00000001, 0b00000111, 0b00000111, 0b11111111,// 0b11111111, 0b00000001, 0b00000111, 0b00001111, 0b11111111,// 0b11111111, 0b00000001, 0b00000111, 0b00011111, 0b11111111,// 0b11111111, 0b00000001, 0b00000111, 0b00111111, 0b11111111,// 0b11111111, 0b00000001, 0b00000111, 0b01111111, 0b11111111,// 0b00111000, 0b01000100, 0b01000110, 0b01000101, 0b00111000,//ó 0b11111111, 0b00000001, 0b00000111, 0b10111111, 0b11111111,// 0b11111111, 0b00000001, 0b00001111, 0b00000000, 0b11111111,// 0b11111111, 0b00000001, 0b00001111, 0b00000001, 0b11111111,// 0b11111111, 0b00000001, 0b00001111, 0b00000011, 0b11111111,// 0b11111111, 0b00000001, 0b00001111, 0b00000111, 0b11111111,// 0b11111111, 0b00000001, 0b00001111, 0b00001111, 0b11111111,// 0b11111111, 0b00000001, 0b00001111, 0b00011111, 0b11111111,// 0b11111111, 0b00000001, 0b00001111, 0b00111111, 0b11111111,// 0b11111111, 0b00000001, 0b00001111, 0b01111111, 0b11111111,// 0b11111111, 0b00000001, 0b00001111, 0b11111111, 0b11111111,// 0b11111111, 0b00000001, 0b00001111, 0b10111111, 0b11111111,// 0b11111111, 0b00000001, 0b00011111, 0b00000000, 0b11111111,// 0b11111111, 0b00000001, 0b00011111, 0b00000001, 0b11111111,// 0b11111111, 0b00000001, 0b00011111, 0b00000011, 0b11111111,// 0b11111111, 0b00000001, 0b00011111, 0b00000111, 0b11111111,// 0b11111111, 0b00000001, 0b00011111, 0b00001111, 0b11111111,// 0b11111111, 0b00000001, 0b00011111, 0b00011111, 0b11111111,// 0b11111111, 0b00000001, 0b00011111, 0b00111111, 0b11111111,// 0b11111111, 0b00000001, 0b00011111, 0b01111111, 0b11111111,// 0b00100100, 0b00110110, 0b01111111, 0b00110110, 0b00100100,//choinka 0b11111111, 0b00000001, 0b00011111, 0b10111111, 0b11111111,// 0b01001000, 0b01010100, 0b01010110, 0b01010101, 0b00100100,//ś 0b00100110, 0b01001001, 0b01001011, 0b01001001, 0b00110010,//Ś 0b11111111, 0b00000001, 0b00111111, 0b00000011, 0b11111111,// 0b00111000, 0b01010100, 0b01010100, 0b11010100, 0b00011000,//ę 0b01111111, 0b01001001, 0b01001001, 0b11001001, 0b01000001,//Ę 0b11111111, 0b00000001, 0b00111111, 0b00011111, 0b11111111,// 0b11111111, 0b00000001, 0b00111111, 0b00111111, 0b11111111,// 0b11111111, 0b00000001, 0b00111111, 0b01111111, 0b11111111,// 0b11111111, 0b00000001, 0b00111111, 0b11111111, 0b11111111,// 0b11111111, 0b00000001, 0b00111111, 0b10111111, 0b11111111,// 0b00111110, 0b01000001, 0b01000011, 0b01000001, 0b00111110,//Ó 0b11111111, 0b00000001, 0b01111111, 0b00000001, 0b11111111,// 0b11111111, 0b00000001, 0b01111111, 0b00000011, 0b11111111,// 0b11111111, 0b00000001, 0b01111111, 0b00000111, 0b11111111,// 0b11111111, 0b00000001, 0b01111111, 0b00001111, 0b11111111,// 0b11111111, 0b00000001, 0b01111111, 0b00011111, 0b11111111,// 0b11111111, 0b00000001, 0b01111111, 0b00111111, 0b11111111,// 0b11111111, 0b00000001, 0b01111111, 0b01111111, 0b11111111,// 0b11111111, 0b00000001, 0b01111111, 0b11111111, 0b11111111,// 0b11111111, 0b00000001, 0b01111111, 0b10111111, 0b11111111,// 0b11111111, 0b00000001, 0b11111111, 0b00000000, 0b11111111,// 0b00111110, 0b01000001, 0b01000011, 0b01000001, 0b00100010,//Ć 0b00111000, 0b01000100, 0b01000110, 0b01000101, 0b00101000,//ć 0b00100000, 0b01010100, 0b01010100, 0b11111000, 0b01000000,//ą 0b01111100, 0b00001000, 0b00000110, 0b00000101, 0b01111000,//ń 0b01111100, 0b00010010, 0b00010001, 0b10010010, 0b01111100,//Ą 0b00000000, 0b01010001, 0b01111111, 0b01000100, 0b00000000,//ł 0b01111111, 0b01001000, 0b01000100, 0b01000000, 0b01000000,//Ł 0b01111111, 0b00000100, 0b00001011, 0b00010000, 0b01111111,//Ń 0b11111111, 0b00000001, 0b11111111, 0b10111111, 0b11111111,// 0b11111111, 0b00000001, 0b10111111, 0b00000000, 0b11111111,// 0b11111111, 0b00000001, 0b10111111, 0b00000001, 0b11111111,// 0b11111111, 0b00000001, 0b10111111, 0b00000011, 0b11111111,// 0b11111111, 0b00000001, 0b10111111, 0b00000111, 0b11111111,// 0b11111111, 0b00000001, 0b10111111, 0b00001111, 0b11111111,// 0b11111111, 0b00000001, 0b10111111, 0b00011111, 0b11111111,// 0b11111111, 0b00000001, 0b10111111, 0b00111111, 0b11111111,// 0b11111111, 0b00000001, 0b10111111, 0b01111111, 0b11111111,// 0b11111111, 0b00000001, 0b10111111, 0b11111111, 0b11111111,// 0b11111111, 0b00000001, 0b10111111, 0b10111111, 0b11111111,// 0b11111111, 0b00000011, 0b00000000, 0b00000000, 0b11111111,// 0b11111111, 0b00000011, 0b00000000, 0b00000001, 0b11111111,// 0b11111111, 0b00000011, 0b00000000, 0b00000011, 0b11111111,// 0b11111111, 0b00000011, 0b00000000, 0b00000111, 0b11111111,// 0b11111111, 0b00000011, 0b00000000, 0b00001111, 0b11111111,// 0b11111111, 0b00000011, 0b00000000, 0b00011111, 0b11111111,// 0b11111111, 0b00000011, 0b00000000, 0b00111111, 0b11111111,// 0b11111111, 0b00000011, 0b00000000, 0b01111111, 0b11111111,// 0b11111111, 0b00000011, 0b00000000, 0b11111111, 0b11111111,// 0b11111111, 0b00000011, 0b00000000, 0b10111111, 0b11111111,// 0b11111111, 0b00000011, 0b00000001, 0b00000000, 0b11111111,// 0b11111111, 0b00000011, 0b00000001, 0b00000001, 0b11111111,// 0b11111111, 0b00000011, 0b00000001, 0b00000011, 0b11111111,// 0b11111111, 0b00000011, 0b00000001, 0b00000111, 0b11111111,// 0b11111111, 0b00000011, 0b00000001, 0b00001111, 0b11111111,// 0b11111111, 0b00000011, 0b00000001, 0b00011111, 0b11111111,// 0b11111111, 0b00000011, 0b00000001, 0b00111111, 0b11111111,// 0b11111111, 0b00000011, 0b00000001, 0b01111111, 0b11111111,// 0b11111111, 0b00000011, 0b00000001, 0b11111111, 0b11111111,// 0b11111111, 0b00000011, 0b00000001, 0b10111111, 0b11111111,// 0b11111111, 0b00000011, 0b00000011, 0b00000000, 0b11111111,// 0b11111111, 0b00000011, 0b00000011, 0b00000001, 0b11111111,// 0b11111111, 0b00000011, 0b00000011, 0b00000011, 0b11111111,// 0b11111111, 0b00000011, 0b00000011, 0b00000111, 0b11111111,// 0b11111111, 0b00000011, 0b00000011, 0b00001111, 0b11111111,// 0b11111111, 0b00000011, 0b00000011, 0b00011111, 0b11111111,// 0b11111111, 0b00000011, 0b00000011, 0b00111111, 0b11111111,// 0b11111111, 0b00000011, 0b00000011, 0b01111111, 0b11111111,// 0b11111111, 0b00000011, 0b00000011, 0b11111111, 0b11111111,// 0b11111111, 0b00000011, 0b00000011, 0b10111111, 0b11111111,// 0b11111111, 0b00000011, 0b00000111, 0b00000000, 0b11111111,// 0b11111111, 0b00000011, 0b00000111, 0b00000001, 0b11111111,// 0b11111111, 0b00000011, 0b00000111, 0b00000011, 0b11111111,// 0b11111111, 0b00000011, 0b00000111, 0b00000111, 0b11111111,// 0b11111111, 0b00000011, 0b00000111, 0b00001111, 0b11111111,// 0b11111111, 0b00000011, 0b00000111, 0b00011111, 0b11111111,// 0b11111111, 0b00000011, 0b00000111, 0b00111111, 0b11111111,// 0b11111111, 0b00000011, 0b00000111, 0b01111111, 0b11111111,// 0b11111111, 0b00000011, 0b00000111, 0b11111111, 0b11111111,// 0b11111111, 0b00000011, 0b00000111, 0b10111111, 0b11111111,// 0b11111111, 0b00000011, 0b00001111, 0b00000000, 0b11111111,// 0b11111111, 0b00000011, 0b00001111, 0b00000001, 0b11111111,// 0b11111111, 0b00000011, 0b00001111, 0b00000011, 0b11111111,// 0b11111111, 0b00000011, 0b00001111, 0b00000111, 0b11111111,// 0b11111111, 0b00000011, 0b00001111, 0b00001111, 0b11111111,// 0b11111111, 0b00000011, 0b00001111, 0b00011111, 0b11111111,// 0b11111111, 0b00000011, 0b00001111, 0b00111111, 0b11111111,// 0b11111111, 0b00000011, 0b00001111, 0b01111111, 0b11111111,// 0b11111111, 0b00000011, 0b00001111, 0b11111111, 0b11111111,// 0b11111111, 0b00000011, 0b00001111, 0b10111111, 0b11111111,// 0b11111111, 0b00000011, 0b00011111, 0b00000000, 0b11111111,// 0b11111111, 0b00000011, 0b00011111, 0b00000001, 0b11111111,// 0b11111111, 0b00000011, 0b00011111, 0b00000011, 0b11111111,// 0b11111111, 0b00000011, 0b00011111, 0b00000111, 0b11111111,// 0b11111111, 0b00000011, 0b00011111, 0b00001111, 0b11111111,// 0b11111111, 0b00000011, 0b00011111, 0b00011111, 0b11111111,// }; #endif // FONT5X7_H |
Obie biblioteki wgrywamy przez Arduino IDE w zakładce Szkic->Include Library->Add .ZIP library…
Na koniec wgrywamy następujący kod:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 |
/* Połączenia Wyświetlacz Arduino UNO VCC +5V DIN MOSI (Pin 11) LOAD(CS) (Pin 10) CLK SCK (Pin 13) GND Gnd */ #include <SPI.h> #include <Adafruit_GFX.h> #include <Max72xxPanel.h> int pinCS = 10; int numberOfHorizontalDisplays = 3;// ilość wyświetlaczy 8x8 int numberOfVerticalDisplays = 1; Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); int scrollspeed = 30; //Domyślna prędkość wyświetlania - czym mniejsza, tym szybciej tekst się przewija int spacer = 1; // Spacja int width = 5 + spacer; // szerokość czcionki boolean inChar = false, NewData = false, pause = false, dataAvailable = false;//zmienne potrzebne do funkcjonowania programu char inputString[512];//napis, do którego wpisujemy wszystkie wyświetlane znaki int count = 0, BTvalue = 5;//definiujemy wskaźnik indeksu i jasność char zmienna = 0;//zmienna potrzebna do prawidłowego wyświetlania polskich znaków diakrytycznych void(* resetFunc) (void) = 0; //funkcja resetu programowego void setup() { matrix.setIntensity(1);//domyślna jasność //tą sekcję ustawiamy w zależności od ilości posiadanych wyświetlaczy: (nrWyswietlacza, liczba wyświetlaczy - 1 - aktualnie definiowany wyświetlacz, 0) for(int i = 0;i<numberOfHorizontalDisplays;i++) { matrix.setPosition(i, numberOfHorizontalDisplays-i-1, 0); } matrix.fillScreen(0);//wygaszenie ekranu matrix.write(); Serial.begin(9600);//inicjalizacja pracy bluetooth //program używa przerwania na pinie 2, który powinien być podłączony do pinu 0(RX) przez opornik 10K pinMode(2, INPUT); pinMode(13, OUTPUT); digitalWrite(13, LOW); digitalWrite(2, LOW); attachInterrupt(0, serialInterrupt, CHANGE); } void loop(){ if(dataAvailable){ display_data(); } } void display_data(){ for ( int i = 0 ; i < width * count + matrix.width() - 1 - spacer; i++ ) { matrix.fillScreen(0); int letter = i / width; int x = (matrix.width() - 1) - i % width; int y = (matrix.height() - 8) / 2; // wyśrodkowanie tekstu while ( x + width - spacer >= 0 && letter >= 0 ) { if ( letter < count ) { matrix.drawChar(x, y, inputString[letter], HIGH, LOW, 1); } letter--; x -= width; } matrix.write(); // Wyślij do wyświetlenia if(!dataAvailable){ i = width * count + matrix.width() - 1 - spacer; matrix.fillScreen(LOW); matrix.write(); } if(NewData){ i = 0; matrix.fillScreen(LOW); matrix.write(); NewData = false; } while(pause == true){ delay(0); } //Zatrzymaj program jeżeli pauza jest włączona delay(scrollspeed); } } volatile boolean inService = false; //przerwanie void serialInterrupt(){ if (inService) return; inService = true; // Włącz przerwania, aby komunikacja szeregowa mogła działać. interrupts(); while(!Serial.available()); while (Serial.available()) { char ch = Serial.read(); if(ch =='('){ count = 0; inChar = true; while(inChar){ if (Serial.available()) { ch = Serial.read(); if(ch == ')'){ inChar = false; dataAvailable = true; } else{ if(ch<0) { if(zmienna<0) { //tutaj znajduje się część kodu eliminująca konflikt występujący przy odbieraniu polskich znaków diakrytycznych if(zmienna == -60 && ch == -123) inputString[count] = 182;//ą else if(zmienna == -59 && ch == -125) inputString[count] = 187;//Ń else if(zmienna == -60 && ch == -122) inputString[count] = 180;//Ć else{ int dod = abs(zmienna + ch); inputString[count] = dod; } count++; zmienna = 0; } else zmienna = ch; } else { inputString[count] = ch; count++; } } if(count > 0) { NewData = true; } } } } if(ch =='/'){ //Tryb komend inChar = true; while(inChar){ if (Serial.available()) { ch = Serial.read(); if(ch == 'r'){ resetFunc(); break; } //jasność ++ if(ch == '+'){ if(BTvalue < 15) { BTvalue ++; matrix.setIntensity(BTvalue); } break; } //jasność -- if(ch == '-'){ if(BTvalue > 0){ BTvalue --; matrix.setIntensity(BTvalue); } break; } //Zwalnianie if(ch == '>'){ if(scrollspeed < 500) { scrollspeed = scrollspeed + 50; } break; } //Przyspieszanie if(ch == '<'){ if(scrollspeed > 50){ scrollspeed=scrollspeed-50; } break; } //Czyszczenie ekranu if(ch == 'e'){ dataAvailable = false; break; } //Pauza if(ch == 'p'){ if(pause == false){ pause = true; } else { pause = false; } break; } else { break; //Nierozpoznana komenda } } } } } inService = false; } |
Komendy:
(Żółw) – Na wyświetlaczy jest przewijany cyklicznie wyraz Żółw
/p – pauza
/< – przyspiesz przewijanie
/> – zwolnij przewijanie
/+ – jaśniej
/- – ciemniej
/e – czyszczenie
Uwagi końcowe:
Maksymalna długość przesyłanego tekstu wynosi 512 znaków.
Ilość wyświetlaczy definiujemy w linijce kodu “int numberOfHorizontalDisplays = 3;”. W tym przypadku ustawione są trzy moduły.
W przypadku dużej ilości wyświetlaczy wskazane jest zasilanie z zewnętrznego źródła.
W razie wygenerowania znaków niezdefiniowanych w zmodyfikowanej bibliotece możecie zmienić istniejące znaki na swoje własne. Numery kodów ASCII znaków są wyświetlane na wyświetlaczu według następującego klucza:
8 diod zapalonych|Setka kodu ASCII|Dziesiątka kodu ASCII|Jedność kodu ASCII|8 diod zapalonych
Liczba 9 jest wyświetlana jako 6 zapalonych diod, jedna zgaszona a następnie znowu jedna zapalona.
Gdy wpiszecie znak ß zostanie wyświetlona choinka.
A√2√
Mam takie dwa zegarki . Czcionka niedobrana do rozmiaru matrycy, fajne połączenie z Bluetooth . Ja planuje połączyć z modułem wifi.
Ten pasek na dole jest po to, aby litery takie jak y wyglądały ładnie i czytelnie. Czcionki można edytować w pliku glcdfont.c (Po wczytaniu bibliotek do Arduino IDE można je znaleźć w ścieżce Dokumenty/Arduino/libraries). Są w formacie 5×8, a czytać je należy od tyłu.
mam taką p10 wyświetlająca po bluetooth, teraz czekam na drugą i robię arkanoida po bluetooth ;)
Co to za wersja hc06? Mam kilka takich modułów i opisane są jako operujące na 5v jako poziom logiczny teraz robią na 3.3?
Moduły HC-05 i HC-06 zrobione są na 3.3V, ale w sprzedaży dostępne są wersje z adapterami (to te, gdzie moduł jest wlutowany na nieco większą od siebie płytkę). Adapter zawiera stabilizator LDO dzięki czemu układ można zasilać w przedziale 3.6V – 6V. Poziomy logiczne RX i TX są w standardzie 3.3V. Nie ma jednak obawy o linię TX, ponieważ wychodzący stan wysoki 3.3V i tak zostanie potraktowany przez standard 5V jako stan wysoki. Podłączyłem RX bezpośrednio do Arduino (bez konwertera), ponieważ wiele źródeł dopuszcza takie rozwiązanie, ale jak chcesz być pewny, że moduł Bluetooth nie ulegnie uszkodzeniu, to zastosuj dzielnik napięcia (tak jak na załączonym obrazku).
wersja którą ja mam dzielnik na płytce już stąd Pytanie.
inna sprawa że nie trzeba tego podpinać pod usb, by zmienić nazwę i PIN w sieci są gotowe projektu do arduino ide w które wpisuje się odpowiednie dane ładuje na chwile na płytkę i mamy zmienioną nazwę i pin (ja dysponuj hc-06 w nim nie trzeba zwierać pinu key do programowania – wystarczy wydać komendę AT przy odpowiednim bitrate
inputString.reserve(200);
Serial.begin(9600);
mySerial.begin(9600);
Serial.println(“start1”);
delay(500);
mySerial.print(“AT+BAUD4”);
delay(100);
mySerial.println(“”);
delay(100);
mySerial.println(“AT+BAUD4”);
delay(100);
mySerial.println(“AT+NAMETermometr”);
delay(100);
mySerial.println(“AT+PIN1111”);
delay(100);
czy mogę projekt zaimplementować do arduino nano?
Przy wgrywaniu bardzo długo mieli i wkoncu wywala bląd że problem z komunikacją. Zaznaczę że inne programy działają :)
Musiałem odłączyć TX i RX żeby program się wgrał (dziwna sprawa)
Jest to spowodowane tym, że występuje konflikt komunikacji USB z modułem bluetooth (RX i TX są wykorzystywane do wgrywania programu).
Witam ! Zwracam sie z pytaniem do autora artykułu. Czy byłaby możliwość stworzenia czegoś takiego na większym wyświetlaczu np coś typu 10×20 ? Proszę o odpowiedź. Pozdrawiam i Gratuluję świetnego artykułu.
Nie miałem możliwości tego sprawdzić (mam tylko 3 wyświetlacze), ale biblioteka jest na tyle uniwersalna, że pozwala definiować ilość wyświetlaczy w pionie, poziomie oraz ewentualną rotację.
Witam.Jak można uzyskać rotację??
W moim modelu jaki zamówiłem napisy przebiegają od góry do dołu na każdym z 4 wyświetlaczy niezależnie.Jak moge uzyskać efekt jak na zdjęciu czyli 4 wyswietlacze działają jako jeden
Aby uzyskać rotację zmodyfikuj funkcję definiującą wyświetlacze:
aby wyglądała tak:
Ostatni argument funkcji setRotation ustawiłem na 1, aby uzyskać obrót o 90 stopni zgodnie z ruchem wskazówek zegara.
Inne opcje to:
0 – brak rotacji
2 – 180 stopni zgodnie z ruchem wskazówek zegara
3 – 270 stopni zgodnie z ruchem wskazówek zegara
Spróbuj podłączyć tylko 3 wyświetlacze. Jeżeli wszystko będzie ok, dla 4 wyświetlaczy musisz zastąpić ten fragment w kodzie:
Tym:
Pięknie dziękuje,z rotacją śmiga doskonale.
Dodatkowo musiałem zmienić tą linijkę aby cztery wyświetlacze współpracowały
matrix.setPosition(i, numberOfHorizontalDisplays-i-1, 0);
zamiast -1 zamieniłem na -4
Pięknie dziękuje,z rotacją śmiga doskonale.
Dodatkowo musiałem zmienić tą linijkę aby cztery wyświetlacze współpracowały
matrix.setPosition(i, numberOfHorizontalDisplays-i-1, 0);
zamiast -1 zamieniłem na -4
Witam, gdzie najlepiej zakupić moduły takich wyświetlaczy z zaimplementowanymi kontrolerami?
Polecam zajrzeć na allegro (wyszukaj “max7219 8×8”). Trzeba jednak zwrócić uwagę na napis “zestaw do samodzielnego montażu” (dostajesz płytkę i elementy, a polutować musisz sam – jest taniej ale trzeba się napracować). Ciekawą ofertą jest moduł, w którym płytka jest wielkości wyświetlacza.
Witam, jak dostosować kod do Leonardo?
Hey. Może przeoczyłem ale jeśli mamy bluetoot to w jaki sposób wysyłać text z telefonu. Jest jakaś apka czy trzeba stworzyć coś samemu
Ja użyłem tutaj tego:
Bluetooth spp tools pro
Łukasz na alliexpress kupiłem 4 segmenty za 15zł free przesyłka.
Witam panowie na tym forum i proszę o pomoc w adaptacji polskich czcionek w innych projektach ARDUINO np. przy scrollu w matrixie ZIGZAG 32×8 z diod WS2812b… jak np. tutaj w filmie:
https://www.youtube.com/watch?v=qgPfZLdZ1mY
Materiały i kod jest tutaj:
http://www.elektroda.pl/rtvforum/viewtopic.php?t=3331125&highlight=
A w ogóle jak się skontaktować w tej sprawie z autorem tej publikacji, czy tylko w tej formie co teraz? Pozdrawiam: cepilek@tlen.pl
Spróbuj wywalić bibliotekę i zrobić od początku według mojego poradnika.
Witam Panowie i Panie….
Czy może mi ktoś podpowiedzieć jak w załączonym kodzie dot. MAX7219 zmienić o 90 stopni kierunek przewijania tekstu, albowiem podłączyłem 4 gotowe moduły MAX7219 a przewijanie tekstu odbywa się pionowo jednocześnie na 4 modułach zamiast poziomo od prawej do lewej?
//działa ale pasowałoby jeszcze obrócić bo działa w pionie przy MAX7219
#include “MaxMatrix.h”
#include “avr/pgmspace.h”
PROGMEM const unsigned char CH[] = {
3, 8, B00000000, B00000000, B00000000, B00000000, B00000000, // space
1, 8, B01011111, B00000000, B00000000, B00000000, B00000000, // !
3, 8, B00000011, B00000000, B00000011, B00000000, B00000000, // ”
5, 8, B00010100, B00111110, B00010100, B00111110, B00010100, // #
4, 8, B00100100, B01101010, B00101011, B00010010, B00000000, // $
5, 8, B01100011, B00010011, B00001000, B01100100, B01100011, // %
5, 8, B00110110, B01001001, B01010110, B00100000, B01010000, // &
1, 8, B00000011, B00000000, B00000000, B00000000, B00000000, // ‘
3, 8, B00011100, B00100010, B01000001, B00000000, B00000000, // (
3, 8, B01000001, B00100010, B00011100, B00000000, B00000000, // )
5, 8, B00101000, B00011000, B00001110, B00011000, B00101000, // *
5, 8, B00001000, B00001000, B00111110, B00001000, B00001000, // +
2, 8, B10110000, B01110000, B00000000, B00000000, B00000000, // ,
4, 8, B00001000, B00001000, B00001000, B00001000, B00000000, // –
2, 8, B01100000, B01100000, B00000000, B00000000, B00000000, // .
4, 8, B01100000, B00011000, B00000110, B00000001, B00000000, // /
4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // 0
3, 8, B01000010, B01111111, B01000000, B00000000, B00000000, // 1
4, 8, B01100010, B01010001, B01001001, B01000110, B00000000, // 2
4, 8, B00100010, B01000001, B01001001, B00110110, B00000000, // 3
4, 8, B00011000, B00010100, B00010010, B01111111, B00000000, // 4
4, 8, B00100111, B01000101, B01000101, B00111001, B00000000, // 5
4, 8, B00111110, B01001001, B01001001, B00110000, B00000000, // 6
4, 8, B01100001, B00010001, B00001001, B00000111, B00000000, // 7
4, 8, B00110110, B01001001, B01001001, B00110110, B00000000, // 8
4, 8, B00000110, B01001001, B01001001, B00111110, B00000000, // 9
2, 8, B01010000, B00000000, B00000000, B00000000, B00000000, // :
2, 8, B10000000, B01010000, B00000000, B00000000, B00000000, // ;
3, 8, B00010000, B00101000, B01000100, B00000000, B00000000, //
4, 8, B00000010, B01011001, B00001001, B00000110, B00000000, // ?
5, 8, B00111110, B01001001, B01010101, B01011101, B00001110, // @
4, 8, B01111110, B00010001, B00010001, B01111110, B00000000, // A
4, 8, B01111111, B01001001, B01001001, B00110110, B00000000, // B
4, 8, B00111110, B01000001, B01000001, B00100010, B00000000, // C
4, 8, B01111111, B01000001, B01000001, B00111110, B00000000, // D
4, 8, B01111111, B01001001, B01001001, B01000001, B00000000, // E
4, 8, B01111111, B00001001, B00001001, B00000001, B00000000, // F
4, 8, B00111110, B01000001, B01001001, B01111010, B00000000, // G
4, 8, B01111111, B00001000, B00001000, B01111111, B00000000, // H
3, 8, B01000001, B01111111, B01000001, B00000000, B00000000, // I
4, 8, B00110000, B01000000, B01000001, B00111111, B00000000, // J
4, 8, B01111111, B00001000, B00010100, B01100011, B00000000, // K
4, 8, B01111111, B01000000, B01000000, B01000000, B00000000, // L
5, 8, B01111111, B00000010, B00001100, B00000010, B01111111, // M
5, 8, B01111111, B00000100, B00001000, B00010000, B01111111, // N
4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // O
4, 8, B01111111, B00001001, B00001001, B00000110, B00000000, // P
4, 8, B00111110, B01000001, B01000001, B10111110, B00000000, // Q
4, 8, B01111111, B00001001, B00001001, B01110110, B00000000, // R
4, 8, B01000110, B01001001, B01001001, B00110010, B00000000, // S
5, 8, B00000001, B00000001, B01111111, B00000001, B00000001, // T
4, 8, B00111111, B01000000, B01000000, B00111111, B00000000, // U
5, 8, B00001111, B00110000, B01000000, B00110000, B00001111, // V
5, 8, B00111111, B01000000, B00111000, B01000000, B00111111, // W
5, 8, B01100011, B00010100, B00001000, B00010100, B01100011, // X
5, 8, B00000111, B00001000, B01110000, B00001000, B00000111, // Y
4, 8, B01100001, B01010001, B01001001, B01000111, B00000000, // Z
2, 8, B01111111, B01000001, B00000000, B00000000, B00000000, // [
4, 8, B00000001, B00000110, B00011000, B01100000, B00000000, // \ backslash
2, 8, B01000001, B01111111, B00000000, B00000000, B00000000, // ]
3, 8, B00000010, B00000001, B00000010, B00000000, B00000000, // hat
4, 8, B01000000, B01000000, B01000000, B01000000, B00000000, // _
2, 8, B00000001, B00000010, B00000000, B00000000, B00000000, // `
4, 8, B00100000, B01010100, B01010100, B01111000, B00000000, // a
4, 8, B01111111, B01000100, B01000100, B00111000, B00000000, // b
4, 8, B00111000, B01000100, B01000100, B00101000, B00000000, // c
4, 8, B00111000, B01000100, B01000100, B01111111, B00000000, // d
4, 8, B00111000, B01010100, B01010100, B00011000, B00000000, // e
3, 8, B00000100, B01111110, B00000101, B00000000, B00000000, // f
4, 8, B10011000, B10100100, B10100100, B01111000, B00000000, // g
4, 8, B01111111, B00000100, B00000100, B01111000, B00000000, // h
3, 8, B01000100, B01111101, B01000000, B00000000, B00000000, // i
4, 8, B01000000, B10000000, B10000100, B01111101, B00000000, // j
4, 8, B01111111, B00010000, B00101000, B01000100, B00000000, // k
3, 8, B01000001, B01111111, B01000000, B00000000, B00000000, // l
5, 8, B01111100, B00000100, B01111100, B00000100, B01111000, // m
4, 8, B01111100, B00000100, B00000100, B01111000, B00000000, // n
4, 8, B00111000, B01000100, B01000100, B00111000, B00000000, // o
4, 8, B11111100, B00100100, B00100100, B00011000, B00000000, // p
4, 8, B00011000, B00100100, B00100100, B11111100, B00000000, // q
4, 8, B01111100, B00001000, B00000100, B00000100, B00000000, // r
4, 8, B01001000, B01010100, B01010100, B00100100, B00000000, // s
3, 8, B00000100, B00111111, B01000100, B00000000, B00000000, // t
4, 8, B00111100, B01000000, B01000000, B01111100, B00000000, // u
5, 8, B00011100, B00100000, B01000000, B00100000, B00011100, // v
5, 8, B00111100, B01000000, B00111100, B01000000, B00111100, // w
5, 8, B01000100, B00101000, B00010000, B00101000, B01000100, // x
4, 8, B10011100, B10100000, B10100000, B01111100, B00000000, // y
3, 8, B01100100, B01010100, B01001100, B00000000, B00000000, // z
3, 8, B00001000, B00110110, B01000001, B00000000, B00000000, // {
1, 8, B01111111, B00000000, B00000000, B00000000, B00000000, // |
3, 8, B01000001, B00110110, B00001000, B00000000, B00000000, // }
4, 8, B00001000, B00000100, B00001000, B00000100, B00000000, // ~
};
int data = 11; // DIN pin of MAX7219 module bylo 8
int load = 10; // CS pin of MAX7219 module bylo 9
int clock = 13; // CLK pin of MAX7219 module bylo 10
int maxInUse = 4; //how many MAX7219 are connected było 2
MaxMatrix m(data, load, clock, maxInUse); // define Library
byte buffer[10];
char string1[] = ” Brainy-Bits.com “; // Scrolling Text
void setup(){
m.init(); // module MAX7219
m.setIntensity(5); // LED Intensity 0-15
}
void loop(){
byte c;
delay(100);
m.shiftLeft(false, true);
printStringWithShift(string1, 100); // Send scrolling Text
}
// Put extracted character on Display
void printCharWithShift(char c, int shift_speed){
if (c < 32) return;
c -= 32;
memcpy_P(buffer, CH + 7*c, 7);
m.writeSprite(maxInUse*8, 0, buffer);
m.setColumn(maxInUse*8 + buffer[0], 0);
for (int i = 0; i < buffer[0]+1; i++)
{
delay(shift_speed);
m.shiftLeft(false, false);
}
}
// Extract characters from Scrolling text
void printStringWithShift(char* s, int shift_speed){
while (*s != 0){
printCharWithShift(*s, shift_speed);
s++;
}
}
Odsyłam do dokumentacji biblioteki Adafruit GFX.
Podpowiem, że jest to ładnie opisane na szesnastej stronie.
A tu jak odwrócić scroll o 90 stopni?
Pozdrawiam i dziękuję z góry….
/*Też pasowałoby odwrócić kierunek scrolla o 90 stopni
*
/*
################################################################################
# File Name: MAX7219_5.ino
# Board: Arduino UNO
# Programming Language: Wiring / C /Processing /Fritzing / Arduino IDE
#
# Objective: Scrolling LED dot Matrix
#
# Operation: Scrolls a message over a 16×8 LED dot matrix
#
# Author: Marcelo Moraes
# Date: July 9th, 2013
# Place: Sorocaba – SP – Brazil
#
################################################################################
This code is a public example.
*/
//
// visit this web page for further information about MaxMatrix library
// https://code.google.com/p/arudino-maxmatrix-library/
//
#include
#include
PROGMEM const unsigned char CH[] = {
3, 8, B00000000, B00000000, B00000000, B00000000, B00000000, // space
1, 8, B01011111, B00000000, B00000000, B00000000, B00000000, // !
3, 8, B00000011, B00000000, B00000011, B00000000, B00000000, // ”
5, 8, B00010100, B00111110, B00010100, B00111110, B00010100, // #
4, 8, B00100100, B01101010, B00101011, B00010010, B00000000, // $
5, 8, B01100011, B00010011, B00001000, B01100100, B01100011, // %
5, 8, B00110110, B01001001, B01010110, B00100000, B01010000, // &
1, 8, B00000011, B00000000, B00000000, B00000000, B00000000, // ‘
3, 8, B00011100, B00100010, B01000001, B00000000, B00000000, // (
3, 8, B01000001, B00100010, B00011100, B00000000, B00000000, // )
5, 8, B00101000, B00011000, B00001110, B00011000, B00101000, // *
5, 8, B00001000, B00001000, B00111110, B00001000, B00001000, // +
2, 8, B10110000, B01110000, B00000000, B00000000, B00000000, // ,
4, 8, B00001000, B00001000, B00001000, B00001000, B00000000, // –
2, 8, B01100000, B01100000, B00000000, B00000000, B00000000, // .
4, 8, B01100000, B00011000, B00000110, B00000001, B00000000, // /
4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // 0
3, 8, B01000010, B01111111, B01000000, B00000000, B00000000, // 1
4, 8, B01100010, B01010001, B01001001, B01000110, B00000000, // 2
4, 8, B00100010, B01000001, B01001001, B00110110, B00000000, // 3
4, 8, B00011000, B00010100, B00010010, B01111111, B00000000, // 4
4, 8, B00100111, B01000101, B01000101, B00111001, B00000000, // 5
4, 8, B00111110, B01001001, B01001001, B00110000, B00000000, // 6
4, 8, B01100001, B00010001, B00001001, B00000111, B00000000, // 7
4, 8, B00110110, B01001001, B01001001, B00110110, B00000000, // 8
4, 8, B00000110, B01001001, B01001001, B00111110, B00000000, // 9
2, 8, B01010000, B00000000, B00000000, B00000000, B00000000, // :
2, 8, B10000000, B01010000, B00000000, B00000000, B00000000, // ;
3, 8, B00010000, B00101000, B01000100, B00000000, B00000000, //
4, 8, B00000010, B01011001, B00001001, B00000110, B00000000, // ?
5, 8, B00111110, B01001001, B01010101, B01011101, B00001110, // @
4, 8, B01111110, B00010001, B00010001, B01111110, B00000000, // A
4, 8, B01111111, B01001001, B01001001, B00110110, B00000000, // B
4, 8, B00111110, B01000001, B01000001, B00100010, B00000000, // C
4, 8, B01111111, B01000001, B01000001, B00111110, B00000000, // D
4, 8, B01111111, B01001001, B01001001, B01000001, B00000000, // E
4, 8, B01111111, B00001001, B00001001, B00000001, B00000000, // F
4, 8, B00111110, B01000001, B01001001, B01111010, B00000000, // G
4, 8, B01111111, B00001000, B00001000, B01111111, B00000000, // H
3, 8, B01000001, B01111111, B01000001, B00000000, B00000000, // I
4, 8, B00110000, B01000000, B01000001, B00111111, B00000000, // J
4, 8, B01111111, B00001000, B00010100, B01100011, B00000000, // K
4, 8, B01111111, B01000000, B01000000, B01000000, B00000000, // L
5, 8, B01111111, B00000010, B00001100, B00000010, B01111111, // M
5, 8, B01111111, B00000100, B00001000, B00010000, B01111111, // N
4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // O
4, 8, B01111111, B00001001, B00001001, B00000110, B00000000, // P
4, 8, B00111110, B01000001, B01000001, B10111110, B00000000, // Q
4, 8, B01111111, B00001001, B00001001, B01110110, B00000000, // R
4, 8, B01000110, B01001001, B01001001, B00110010, B00000000, // S
5, 8, B00000001, B00000001, B01111111, B00000001, B00000001, // T
4, 8, B00111111, B01000000, B01000000, B00111111, B00000000, // U
5, 8, B00001111, B00110000, B01000000, B00110000, B00001111, // V
5, 8, B00111111, B01000000, B00111000, B01000000, B00111111, // W
5, 8, B01100011, B00010100, B00001000, B00010100, B01100011, // X
5, 8, B00000111, B00001000, B01110000, B00001000, B00000111, // Y
4, 8, B01100001, B01010001, B01001001, B01000111, B00000000, // Z
2, 8, B01111111, B01000001, B00000000, B00000000, B00000000, // [
4, 8, B00000001, B00000110, B00011000, B01100000, B00000000, // \ backslash
2, 8, B01000001, B01111111, B00000000, B00000000, B00000000, // ]
3, 8, B00000010, B00000001, B00000010, B00000000, B00000000, // hat
4, 8, B01000000, B01000000, B01000000, B01000000, B00000000, // _
2, 8, B00000001, B00000010, B00000000, B00000000, B00000000, //
4, 8, B00100000, B01010100, B01010100, B01111000, B00000000, // a
4, 8, B01111111, B01000100, B01000100, B00111000, B00000000, // b
4, 8, B00111000, B01000100, B01000100, B00101000, B00000000, // c
4, 8, B00111000, B01000100, B01000100, B01111111, B00000000, // d
4, 8, B00111000, B01010100, B01010100, B00011000, B00000000, // e
3, 8, B00000100, B01111110, B00000101, B00000000, B00000000, // f
4, 8, B10011000, B10100100, B10100100, B01111000, B00000000, // g
4, 8, B01111111, B00000100, B00000100, B01111000, B00000000, // h
3, 8, B01000100, B01111101, B01000000, B00000000, B00000000, // i
4, 8, B01000000, B10000000, B10000100, B01111101, B00000000, // j
4, 8, B01111111, B00010000, B00101000, B01000100, B00000000, // k
3, 8, B01000001, B01111111, B01000000, B00000000, B00000000, // l
5, 8, B01111100, B00000100, B01111100, B00000100, B01111000, // m
4, 8, B01111100, B00000100, B00000100, B01111000, B00000000, // n
4, 8, B00111000, B01000100, B01000100, B00111000, B00000000, // o
4, 8, B11111100, B00100100, B00100100, B00011000, B00000000, // p
4, 8, B00011000, B00100100, B00100100, B11111100, B00000000, // q
4, 8, B01111100, B00001000, B00000100, B00000100, B00000000, // r
4, 8, B01001000, B01010100, B01010100, B00100100, B00000000, // s
3, 8, B00000100, B00111111, B01000100, B00000000, B00000000, // t
4, 8, B00111100, B01000000, B01000000, B01111100, B00000000, // u
5, 8, B00011100, B00100000, B01000000, B00100000, B00011100, // v
5, 8, B00111100, B01000000, B00111100, B01000000, B00111100, // w
5, 8, B01000100, B00101000, B00010000, B00101000, B01000100, // x
4, 8, B10011100, B10100000, B10100000, B01111100, B00000000, // y
3, 8, B01100100, B01010100, B01001100, B00000000, B00000000, // z
3, 8, B00001000, B00110110, B01000001, B00000000, B00000000, // {
1, 8, B01111111, B00000000, B00000000, B00000000, B00000000, // |
3, 8, B01000001, B00110110, B00001000, B00000000, B00000000, // }
4, 8, B00001000, B00000100, B00001000, B00000100, B00000000, // ~
};
int data = 11; // DIN pin of MAX7219 module bylo 8
int load = 10; // CS pin of MAX7219 module bylo 9
int clock = 13; // CLK pin of MAX7219 module bylo 10
int maxInUse = 4; //change this variable to set how many MAX7219's you'll use
MaxMatrix m(data, load, clock, maxInUse); // define module
byte buffer[10];
char string1[] = " A B C D E F G H I J K L M N O P Q R S T U V X W Y Z ";
char string2[] = " a b c d e f g h i j k l m n o p q r s t u v x w y z ";
char string3[] = " 1 2 3 4 5 6 7 8 9 0 - = ";
char string4[] = " ! @ # $ % ¨ & * ( ) _ + ";
char string5[] = " ' , . ; ~ ] ´ [ | : ^ } { / ? “;
void setup(){
m.init(); // module initialize
m.setIntensity(0); // dot matix intensity 0-15
Serial.begin(9600); // serial communication initialize
}
void loop(){
/*
// this is the code if you want to entering a message via serial console
while (Serial.available() > 0){
byte c = Serial.read();
Serial.println(c, DEC);
printCharWithShift(c, 100);
}
delay(100);
m.shiftLeft(false, true);
*/
// print the active sentences
printStringWithShift(string1, 100);
printStringWithShift(string2, 100);
printStringWithShift(string3, 100);
printStringWithShift(string4, 100);
printStringWithShift(string5, 100);
}
void printCharWithShift(char c, int shift_speed){
if (c < 32) return;
c -= 32;
memcpy_P(buffer, CH + 7*c, 7);
m.writeSprite(32, 0, buffer);
m.setColumn(32 + buffer[0], 0);
for (int i=0; i<buffer[0]+1; i++)
{
delay(shift_speed);
m.shiftLeft(false, false);
}
}
void printStringWithShift(char* s, int shift_speed){
while (*s != 0){
printCharWithShift(*s, shift_speed);
s++;
}
}
void printString(char* s)
{
int col = 0;
while (*s != 0)
{
if (*s < 32) continue;
char c = *s – 32;
memcpy_P(buffer, CH + 7*c, 7);
m.writeSprite(col, 0, buffer);
m.setColumn(col + buffer[0], 0);
col += buffer[0] + 1;
s++;
}
}
Odsyłam do dokumentacji biblioteki Adafruit GFX.
Podpowiem, że jest to ładnie opisane na szesnastej stronie.
Przecież w kodach wyżej nie ma w ogóle biblioteki Adafruit GFX ?
zrobiłem wszytko tak samo podczas kompilacji ma taki błąd:
In file included from C:\Users\domowy\Desktop\arduino\sketch_dec01a\sketch_dec01a.ino:3:0:
C:\Users\domowy\Documents\Arduino\libraries\arduino-Max72xxPanel-master/Max72xxPanel.h:31:42: error: expected class-name before ‘{‘ token
class Max72xxPanel : public Adafruit_GFX {
^
C:\Users\domowy\Desktop\arduino\sketch_dec01a\sketch_dec01a.ino: In function ‘void display_data()’:
sketch_dec01a:65: error: ‘class Max72xxPanel’ has no member named ‘width’
for ( int i = 0 ; i < width * count + matrix.width() – 1 – spacer; i++ ) {
^
sketch_dec01a:70: error: 'class Max72xxPanel' has no member named 'width'
int x = (matrix.width() – 1) – i % width;
^
sketch_dec01a:71: error: 'class Max72xxPanel' has no member named 'height'
int y = (matrix.height() – 8) / 2; // wyĹ›rodkowanie tekstu
^
sketch_dec01a:75: error: 'class Max72xxPanel' has no member named 'drawChar'
matrix.drawChar(x, y, inputString[letter], HIGH, LOW, 1);
^
sketch_dec01a:83: error: 'class Max72xxPanel' has no member named 'width'
i = width * count + matrix.width() – 1 – spacer;
^
exit status 1
'class Max72xxPanel' has no member named 'width'
Wszystko ładnie pięknie działa ale nie rozumiem kodowania własnych znaków wg numerów kodów ASCII (opisane w uwagach) . Nie umiem zrozumieć jak to sprawdzić
Wg tego klucza. Wytłumaczysz jaśniej ?: :) dzięki.
Witam. Pięknie wszystko działa, ale napis rusza dopiero po przesłaniu go bluetooth’em. Jak zmienić kod, aby po włączeniu urządzenia przewijało tekst startowy?? Z góry dziękuję za pomoc.