Mettre .h dans une carte SD

Bonjour;

Je me sers présentement d'un écran TFT d'Adafruit avec une carte SD intégrée utilisant les librairies :

#include <Adafruit_GFX.h>    
#include <Adafruit_TFTLCD.h>

Il est possible de changer le style des caratères en ajoutant d'autres librairies (Voir lien ci-haut)

Mon problème est que le compilateur m'informe que je n'ai plus de place dans mon arduino Uno (J'utilise beaucoup de librairie). Je voudrais donc savoir s'il était possible de mettre sur la carte SD les .h des styles de caratère pour les utiliser dans mon code ?

Voici ce qu'il y a dans un de ces documents (Voir PJ pour le document au complet):

const uint8_t FreeSansBoldOblique24pt7bBitmaps[] PROGMEM = {
  0x01, 0xE0, 0x07, 0xF0, 0x1F, 0xC0, 0xFF, 0x03, 0xF8, 0x0F, 0xE0, 0x3F,
  0x80, 0xFE, 0x07, 0xF0, 0x1F, 0xC0, 0x7F, 0x01, 0xFC, 0x07, 0xE0, 0x1F,
  0x80, 0x7E, 0x01, 0xF0, 0x07, 0xC0, 0x1F, 0x00, 0xF8, 0x03, 0xE0, 0x0F,
  0x80, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x1F,
  0xC0, 0x7F, 0x01, 0xFC, 0x07, 0xF0, 0x1F, 0xC0, 0xFE, 0x03, 0xF8, 0x00,
  0x7E, 0x0F, 0xDF, 0x83, 0xF7, 0xE0, 0xFF, 0xF0, 0x7E, 0xFC, 0x1F, 0xBF,


... Ca continu

const GFXfont FreeSansBoldOblique24pt7b PROGMEM = {
  (uint8_t  *)FreeSansBoldOblique24pt7bBitmaps,
  (GFXglyph *)FreeSansBoldOblique24pt7bGlyphs,
  0x20, 0x7E, 56 };

Pour utiliser les .h des styles de caractère, il faut normalements les déclarers et les ajouter dans le code avant de faire afficher les textes. Par exemple, pour utiliser le style FreeSansBold18pt7b

#include <Fonts/FreeSansBold18pt7b.h> 

...

tft.setFont(&FreeSansBold18pt7b);
ScreenText(20,40,1,"Test");

Est-ce qu'il est possible de lire ces documents dans la carte SD pour ensuite les utiliser ?

Voila, j'espère être clair dans ma demande.

Merci de votre aide

FreeSansBold18pt7b.h (32.4 KB)

Bonsoir,

Directement non, les .h sont utilisés à la compilation, pas après.

Par contre tu peux stocker sur ta carte SD puis mettre en place une routine pour récupérer les infos et les stockées en ram (si tant est qu'il t'en reste assez).

Sinon tu peux te tourner vers une mega qui a plus de mémoire

Bonjour Jambe,

Simplement pour ne pas me tromper.

La RAM que tu me parle, c'est dans celle-ci que mon programme est stocké ? !

Donc, il faudrait que je me garde un peu d'espace dans la ram, je charge 1 style de caractère, je l'utilise et si j'en ai besoin d' un autre, j'efface celle utilisé pour en prendre une autre ?

Pour utiliser les différents styles d'écriture, il y a des pointeurs et je ne suis pas sur de savoir comment les utiliser.

Je vais regarder cela aujourd'hui, je reviendrais sûrement avec des questions.

Merci encore

La place occupée par une police, c'est généralement de l'ordre du kilo-octets donc il ne faut pas trop compter la mettre en RAM sauf à utiliser une carte avec un processeur qui a beaucoup de RAM (ATméga1284 par exemple). C'est pour cette raison que les polices sont placées dans la mémoire programme (FLASH)

Il ne faut par perdre de vue que ces petits micro n'ont rien à voir avec un PC ou même une carte style Raspberry Pi. Les ressources sont très limitées. Il faut apprendre à faire avec.

Bonjour, j'ai un problème avec l’écran LCD qui affiche des touches d'un clavier matriciel et ensuite je souhaite enregistrer la valeur des touches appuyées sur une carte SD. Alors quand je teste l'ensemble ça plante, j'ai vérifier mon câblage en exécutant bout par bout du code et ça fonctionne.

Mais c'est plutot l'ensemble qui ne fonctionne pas.

Voici mon code:

#include <SPI.h>

#include <LiquidCrystal.h> // Inclusion de la librairie pour afficheur LCD

#include <Keypad.h> // inclusion de la librairie pour clavier matriciel

#include <SD.h>

File dataFile;

int chipSelect = 4;//SD CARD

// --- Déclaration des constantes utiles ---

//--- Constantes utilisées avec le clavier matriciel 4x4
const byte LIGNES = 4; // 4 lignes
const byte COLONNES = 4; // 4 colonnes

// --- Déclaration des constantes des broches E/S numériques ---

const uint8_t C4=2; // Constante pour la broche 2
const uint8_t C3=3; // Constante pour la broche 3
const uint8_t C2=6; // Constante pour la broche 6
const uint8_t C1=5; // Constante pour la broche 5

const uint8_t RS=7; // Constante pour la broche 8
const uint8_t E=13; // Constante pour la broche 9
const uint8_t D4=A3; // Constante pour la broche 10
const uint8_t D5=A2; // Constante pour la broche 11
const uint8_t D6=A1; // Constante pour la broche 12
const uint8_t D7=A0; // Constante pour la broche 13

const uint8_t L4=11; // Constante pour la broche 11
const uint8_t L3=12; // Constante pour la broche 10
const uint8_t L2=9; // Constante pour la broche 9
const uint8_t L1=8; // Constante pour la broche 8

// --- Déclaration des constantes des broches analogiques ---

// --- Déclaration des variables globales ---

//--- Définition des touches

char touches[LIGNES][COLONNES] = { // tableau de char à 2 dimensions

{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};

// tableaux de lignes et colonnes

byte BrochesLignes[LIGNES] = {5,6,3,2};//connexions utilisées pour les broches de colonnes du clavier
byte BrochesColonnes[COLONNES] = {8,9,13,11};//connexions utilisées pour les broches de lignes du clavier

volatile char touche; // variable de stockage valeur touche appuyée

// --- Déclaration des objets utiles pour les fonctionnalités utilisées ---

//------------ Création d'un objet afficheur LCD alphanumérique ----
LiquidCrystal lcd(RS, E, D4, D5, D6, D7);// initialisation LCD en mode 4 bits

// création d'un objet keypad = initialisation clavier
Keypad clavier = Keypad( makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );

// les broches de lignes sont automatiquement configurées en ENTREE avec pullup interne activé
// les broches de colonnes sont automatiquement configurées en SORTIE

// ////////////////////////// 2. FONCTION SETUP = Code d'initialisation //////////////////////////
// La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme

void setup() { // debut de la fonction setup()

// --- ici instructions à exécuter 1 seule fois au démarrage du programme ---

// ------- Initialisation fonctionnalités utilisées -------

// Initialisation de l'afficheur LCD
lcd.begin(16,2); // Initialise le LCD avec 16 colonnes x 2 lignes
delay(10); // pause rapide pour laisser temps initialisation

// Test de l'afficheur LCD
lcd.setCursor(0,1); // se positionne en colonne,ligne
lcd.print("LCD OK"); // affiche texte
delay (1000); //pause
lcd.clear(); // efface LCD
delay(10);
lcd.blink(); // active clignotement
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}

// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.print("Initializing SD card...");

// see if the card is present and can be initialized:
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
// don't do anything more:
return;
}
Serial.println("card initialized.");

}

// Créer un nouveau fichier, on les numérote successivement

char affichage(void){

touche = clavier.getKey(); // lecture de la touche appuyée

if ((touche != NO_KEY)){ // si une touche a été frappée -- gestion de la touche appuyée

if (touche=='#'){
lcd.clear();
}
else {
lcd.print(touche); // efface écran si appui # sinon affiche touche

}
delay(300); // pause entre 2 appuis
Serial.println(touche);

} // fin gestion de la touche appuyée
return(touche);
}

void carte(){

char filename[13] = "LOGGER00.txt";

dataFile = SD.open(filename, FILE_WRITE);

if(filename){

for (int i =0; i < 2; i++) {

filename[6] = i/10 + '0';
filename[7] = i%10 + '0';

// === Stocker les mesures en fichier logger

dataFile.println(affichage());

dataFile.close();

// print to the serial port too:
// Serial.println(touche);

}

}

}

void loop(){

affichage();
carte();

}

@olivri
Tu as fais fort là :

  • on ne s'insère pas dans le sujet des autres avec son propre sujet --> on crée un nouveau sujet.
    Figure toi qu'il y a un moteur de recherche que certains utilisent avant de poser une question, oui ça arrive.

  • tu n'as pas lu les messages épinglés : le code se place entre balises codes ( </> icône de droite) qui sont là pour rendre le code lisible.
    Ce que tu as écrit est illisible, cela m'étonnerais que quelqu'un s'abime les yeux à lire.

Premier post donc excusé :grin: mais :
Édite ton message pour tout virer, comme j'y ai répondu je ne sais pas si tu peux le supprimer.
En bas à droite sous le message "Quote Quick edit More
Tu place la souris au dessus de More puis tu clique sur Remove et si cela ne fonctionne pas sur Modify.

Crée un autre sujet en mettant le code entre balise code. --> voir le message épinglé "faire un nouveau sujet avec les balises"

A bientôt

68tjs:
@olivri
Tu as fais fort là :

  • on ne s'insère pas dans le sujet des autres avec son propre sujet --> on crée un nouveau sujet.
    Figure toi qu'il y a un moteur de recherche que certains utilisent avant de poser une question, oui ça arrive.

  • tu n'as pas lu les messages épinglés : le code se place entre balises codes ( </> icône de droite) qui sont là pour rendre le code lisible.
    Ce que tu as écrit est illisible, cela m'étonnerais que quelqu'un s'abime les yeux à lire.
    ....................

J'applaudis à cette remarque des deux mains, des deux pieds, et du reste si je pouvais ...

Serge .D