Sari la conținut
ELFORUM - Forumul electronistilor

Inserarea unu caracter custom intr-un string, pentru afisare pe MAX7219 matrice LED


XAN77

Postări Recomandate

Lucrez la o aplicatie de ceas cu afișare pe un panel de 4 matrici 8x8 cu MAX7219, cel ce se găsește la chinezi. Afișez un string care conține temperatura și umiditatea și nu reușesc să inserez un caracter custom pentru gradul celsius.

Folosesc bibliotecile Adafruit_GFX și Max72xxPanel.

Link spre comentariu
  • Răspunsuri 22
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

MAX7219 nu are caractere predefinite ca HD44780, decât pentru afișaje cu 7 segmente. Pentru matrici 8x8, toate caracterele sunt definite în librărie. Alege un caracter care nu îl folosești și îl modifici cum vrei direct în librărie.

Editat de cimitavita
Link spre comentariu

Salut!
Incearca acest model:


 

/*
  This code moves a dot over the 8x8 LED Display with 2 pot-meters
  for x- and y-position.
*/

#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Max72xxPanel.h"

const unsigned char smiley [] PROGMEM = {
  0xC3,0xBD,0x5A,0x7E,0x5A,0x66,0xBD,0xC3,
};

// init matrix
int pinCS = 10; // Attach CS to this pin,
// // DIN to MOSI - for UNO MOSI is pin 11
// // - for Mega MOSI is pin 51
// // CLK to SCK - for UNO SCK is pin 13
// // - for Mega SCK is pin 52
// (cf http://arduino.cc/en/Reference/SPI )
int numberOfHorizontalDisplays = 1;
int numberOfVerticalDisplays = 1;

Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);

/*
  const int row[8]={2,7,19,5,13,18,12,16}; // 2-dimensional array of row pin numbers:
  const int col[8]={6,11,10,3,17,4,8,9}; // 2-dimensional array of column pin numbers:
*/
int pixels[8][8]; // 2-dimensional array of pixels:

void setup() {
  // Serial monitoring
  Serial.begin(9600);
  Serial.println("Hello world");

  // Init led matrix
  matrix.setIntensity(2); // Set brightness between 0 and 15
  // clean display
  matrix.fillScreen(LOW);
} // end setup


void loop() {
    matrix.drawBitmap(0, 0,  smiley, 8, 8, 0, 1);
  matrix.write();
} // end loop

 

Link spre comentariu

Așa am reușit și cu drawPixel, dar ceea ce vreau e să am un caracter pe care să-l pot folosi în string-uri.

Practic am 2 moduri posibile de afișare:

1. bufferul ”video” este scris cu matrix.drawChar iar inainte de matrix.write pot face eu diverse modificări cu drawPixel etc. Afișarea se face plină direct, fără efecte de scrolling, defișări de text etc.

2.un mesaj text este trimis unei funcții display_message care îl introduce din dreapta spre stânga prin rulare pe display. Acest mod de afișare durează și ceva cam mult ca timp.

Momentan folosesc doar modul 1 de afișare. Dar în eventualitatea în care anumite info aș vrea pe viitor să le afișez în modul 2, am nevoie să pot insera în acel mesaj text un caracter atipic.

Link spre comentariu

Pare "misiune imposibila" ce vrei tu. Fonturile folosite de Adafruit-GLX sunt generate din fonturile "normale" (ttf) de fontconvert. Default, fontconvert asta converteste de la ' ' la '~' (caracterele ASCII vizibile).

Am incercat sa fac convertorul sa genereze si '°', da' fisierul rezultat e imens, nu cred ca-l poti folosi cu Arduino. Asa ca am generat numai caracterul '°', il gasesti in fisierul atasat. Incearca sa vezi daca poti sa afisezi caracterul respectiv. Daca da, mai sapam sa vedem daca-l putem "adauga" la sfarsitul unui fisier cu caracterele ASCII.

Asa, ca informatie, caracterul e DejaVuSerif, 8 pixeli (?).

 

 

GradCelsius.h

Link spre comentariu

Pentru "Adafruit_GFX " cauta un editor de font (ttf) de exemplu FontForge. Descarci de pe net un font care iti place, il deschizi cu editorul de font si modifici un caracter de acolo care nu iti e de folos ( niste simboluri gen %,^,&, etc..) si iti faci caracterul propriu. Fisierul modificat de ttf il convertesti cu fontconverter cum zicea si Liviu M si il importi in proiect. Eu asa am facut pentru un display Epaper si mi-am facut un singur "font" care are toate caracterele pe care aveam nevoie inclusiv diacriticile. E putin mai dificil de scris textul dupa in cod pentru ca daca ai pus "ă" sa zicem pe locul lui "^" ca sa scrii "Măr" ar trebuii de fapt in cod sa ai "M^r". 

Link spre comentariu
Acum 13 ore, Liviu M a spus:

Uite si un fisier complet...

am încercat să-l folosesc, am adăugat 2 linii în cod cu care s-a compilat fără erori:

#include <Fonts\DejaVuSans8pt7b.h>  aici i-am modificat eu numele că era diferit numele fișierului de al fontului

matrix.setFont(&DejaVuSans8pt7b);

Am făcut o probă cu codul așa ca să văd fontul, dar afișarea e aiurea, se aprind ledurile doar de pe primul rând de sus.

Dacă ai adăugat un caracter în plus, și nu ai modificat unul existent, cum îl accesez/folosesc ?

Mă scuzați dacă sunt bizon.

 

Nu am spus platforma de lucru. Este vorba de un ceas fără RTC, cu ESP8266 (Nodemcu), care ia timpul de pe net și date de la un DHT22. Este și webserver unde pune datele de la DHT. Schimbarea softului se face din browser.

Aceste lucruri sunt funcționale, ceasul îl folosesc în dormitor, doar cu fonturile nu mă pricep.

https://postimg.cc/ftq0n1zJ

Editat de x_dadu
Link spre comentariu

Da, nu merge cum îmi imaginam. 

Când zici că se aprinde doar o linie, e la toate caracterele, sau doar la grad? 

Iar caracterul speram să-l poți accesa cu °, da' m-am mai gândit puțin și cred că n-are cum. 

Așa că nu rămâne decât varianta lui Bandi. Cum eu nu m-am prins cum se poate modifica un caracter, mă retrag din discuție cu scuzele de rigoare că te-am făcut să pierzi timpul. 

Link spre comentariu

Cu fontul tău erau afișate punctele de sus la toate caracterele.

Fontul cu un singur carter nu l-am testat că nu știu cum să îl includ și cum să îl folosesc.

Nu știu ce font este folosit, eu nu declar niciun font. Nu știu ce font folosește în mod default.

Link spre comentariu

Da, presupun ca am folosit dimensiunea "gresita" de caractere. Pentru ca ai matricea pe 8 "pixeli", am generat caracterele cu dimensiunea 8. Probabil conteaza si asta.

Nu te mai chinui cu caracterul singur, e generat la fel, asa ca n-are cum sa mearga nici singur.

 

Link spre comentariu

am încercat cu acest site https://oleddisplay.squix.ch/#/home

am generat font cu Size=7 dar și cu 8. La library version am pus Adafruit_GFX.

Fișierul rezultat l-am pus în folderul fonts al adafruit_gfx l-am inclus în proiectul meu și l-am ”activat”cu setFont. Nu afișează nici un caracter toate punctele sunt stinse. Este afișat doar gradul celsius desenat de mine cu drawPixel ce o fac înainte de a apela matrix.write(), dar caractere ioc. Ce greșesc ?

 

 

Aici e sursa inițială de la care am plecat:

https://www.hackster.io/FilippoOnesti/esp8266-clock-using-max7219-led-matrix-display-b036c7

Editat de x_dadu
Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări