Wyświetlacz 8×8 z kontrolerem MAX7219 wyświetlający polskie znaki

Wyświetlacz 8×8 z kontrolerem MAX7219 wyświetlający polskie znaki

Wyświetlanie tekstu

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.

Konfiguracja PuTTY
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.

Bluetooth spp tools prouruchamiamy aplikację.Skanowanie

 

Po zakończeniu skanowania klikamy w nazwę naszego modułu.

Moduł

Klikamy Pair.

Parowanie

Wpisujemy wcześniej ustalony kod i klikamy OK.

Menu

Następnie klikamy Byte stream mode.

Tryb komend

Jesteśmy gotowi do wysyłania komend i ich odbierania przez komputer i aplikację.

Podłączanie wyświetlaczy

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:

Obie biblioteki wgrywamy przez Arduino IDE w zakładce Szkic->Include Library->Add .ZIP library…

Na koniec wgrywamy następujący kod:

Kompletny układ

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√

Ocena: 4.25/5 (głosów: 20)

Podobne posty

31 komentarzy do “Wyświetlacz 8×8 z kontrolerem MAX7219 wyświetlający polskie znaki

  • Mam takie dwa zegarki . Czcionka niedobrana do rozmiaru matrycy, fajne połączenie z Bluetooth . Ja planuje połączyć z modułem wifi.

    Odpowiedz
    • 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.

      Odpowiedz
    • 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).

      Odpowiedz
      • 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);

        Odpowiedz
  • 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ą :)

    Odpowiedz
  • 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.

    Odpowiedz
    • 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ę.

      Odpowiedz
  • 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

    Odpowiedz
    • 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:

      Odpowiedz
      • 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

        Odpowiedz
  • 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

    Odpowiedz
    • 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.

      Odpowiedz
  • 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

    Odpowiedz
  • 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

    Odpowiedz
  • 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++;
    }
    }

    Odpowiedz
  • 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++;
    }
    }

    Odpowiedz
  • 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'

    Odpowiedz
  • 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.

    Odpowiedz
  • 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.

    Odpowiedz

Odpowiedz

anuluj

Masz uwagi?