IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Projet Afficheur: Envoi de messages (texte) avec le C


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Projet Afficheur: Envoi de messages (texte) avec le C
    Bonjour,
    Nous sommes 3 étudiants en BTS système numériques option informatique et réseaux (ancien IRIS) et nous sommes actuellement en projet.
    Nous devons faire fonctionner deux afficheurs hackspark de 32x16 alignés dans le sens de la longueur reliés en USB à un ordinateur: nous devons créer un programme qui puisse transformer du texte (qu'on entrera dans le programme), que l'afficheur affichera tout de suite après.

    Problème:
    L'afficheur ne peut afficher que des images en binaire. La méthode actuellement utilisée pour afficher du texte est l'utilisation de GIMP pour créer une image avec du texte, que nous convertissons en format P6 (brut) puis en binaire (nous possédons déjà un programme pour cela.)

    Nous ne parvenons pas à trouver un moyen pour:

    -Transformer du texte qui serait entré dans un programme en une image en binaire envoyé dans le port USB de l'afficheur.

    -Décaler les lettres pour créer des mots (l'afficheur ne lit que des images en 128x128 et il coupe la moitié du bas (l'afficheur ignore totalement la moitié basse de l'image. Car il considère qu'il y a 4 afficheurs de 32x16 qui forment un grand carré de 128x128 (comportement propre à l'afficheur et impossible à modifier) Pour afficher il faut donc mettre ce que l'on veut dans la partie haute et mettre du vide dans la partie basse.)
    Il nous faut donc rendre notre afficheur capable de décaler les lettres sur une image fixe de 128x128.

    -Créer un effet de défilement pour les messages qui seront affichés. Il faut que l'afficheur puisse décaler le message entré au clavier pour créer un effet de mouvement. Exemple: comme dans les bus, tramways, trains etc..


    Nous avons choisi le C puisqu'il s'agit du langage que nous maîtrisons le mieux, mais nous n'arrivons pas à surmonter ces problèmes. Toute aide est la bien venue, qu'il s'agisse d'un programme ou d'un indice, ou encore d'un algorithme.

    Merci par avance,

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Pour commencer, il faut parvenir à créer une image binaire, ensuite seulement il sera temps de l'envoyer à l'afficheur.

    Regardez la spécification du format d'image et faites dans un premier temps un programme qui crée une telle image contenant une croix.
    Une image "binaire", c'est une image noir et blanc, dont les pixels sont les bits successifs du fichier, passé l'inévitable en-tête.
    Vous aurez donc besoin des opérateurs bits à bits (|= et <<)

    Dans un premier temps, le programme écrit dans un fichier, et vous n'avez qu'a l'ouvrir avec un visionneur d'image)

    Pour un défilement, il suffit de changer à un rythme constant l'image à afficher.
    Essayez de faire une animation du type barre qui tourne (à base de traits: | / - \ | / - \ | )

    Pour faire une image avec du texte, vous pouvez probablement passer par la bibliothèque imagemagik, qui fait a peu près tout dans le domaine de la création d'image.
    Sinon, il faut appliquer une police d'écriture dans une image.
    Une police est assez complexe à manipuler, vous pourriez écrire vous même la fonction qui dessine.
    Cela dit, le gros soucis, c'est qu'une image s'écrit par rangées de pixels, et qu'une ligne de texte fait plusieurs pixels de haut.


    Quand vous arriverez à l'envoi par usb, il suffit (en théorie) d'écrire dans un tableau d'octets plutot qu'un fichier, et de transmettre ce tableau.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Y'a-t-il une contrainte sur les encodages de texte à prendre en charge ou ne vous demande-t-on que de l'ASCII ? S'il existe une telle contrainte alors je ne pense pas qu'on vous demande de rastériser vous-même votre texte, ce serait un peu ardu ; il faudra passer par une bibliothèque qui s'en occupe, comme Freetype (je pense d'ailleurs qu'il s'agit d'une dépendance d'imagemagick cité par leternel).

    Sinon, le nombre de caractères à prendre en charge étant limité, vous avez la possibilité de définir votre propre police bitmap à savoir un système qui associe une valeur de caractère à un glyphe déjà rastérisé dans une morceau d'image. Il vous reste à combiner ces glyphes en fonction de la chaîne en entrée (en gérant kerning et autres règles typographiques si vous êtes très motivés, ce que Freetype fait tout seul si vous choisissez l'option « bibliothèque »).

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci de votre aide, nous avons déjà fait quelques progrès: nous avons déjà réussi à afficher des images, nous pouvons donc afficher des images où se trouve du texte. Nous cherchons donc à créer une "police" en faisant correspondre à chaque lettre une image indentable de celle-ci. On ne nous a rien précisé pour l'encodage de notre texte et on nous a encore moins parlé de "rasterisation".

    Nous avons pu afficher une animation "manuellement" en utilisant un script shell qui rafraîchit l'affichage tous les tant de millisecondes. Il suffisait d'alterner deux images d'un GIF par exemple.
    Ce que nous pouvons faire c'est aller chercher les drivers de l'afficheur qui sont spécifiques au fabricant.

    Cependant, nous ne comprenons pas l'utilisation de la bibliothèque imagemagick, et nous avons toujours une grande difficulté à comprendre les étapes dans la création de notre police, du décalage entre chaque caractère et encore moins dans l'utilisation de kerning.

  5. #5
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Une manière de procéder est de remplir un conteneur associatif qui associe un caractère à son bitmap. On analyse ensuite la chaîne d'entrée caractère par caractère : si le caractère suivant est présent dans la liste des clefs du conteneur, on récupère le bitmap correspondant qu'on blitte (copie) dans l'image finale ; sinon c'est que le caractère n'est pas supporté, on peut prendre ce cas en charge en affichant par exemple un caractère spécial.

    Les bitmaps de caractères individuels peuvent être préalablement fournis (faits sous Gimp, récupérés sur le net, etc... peu importe) ou construits via Freetype ou autre au lancement de l'application, c'est selon.

  6. #6
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Pour simplifier un peu le problème regardez du côté des polices dites monospaces, dont les caractères font tous la même largeur.
    Ces polices ont l'avantage d'être simple à manipuer question positionnement des caractères.
    en gros, vous obtenez la correspondance suivante:

    le pixel affiché en (l,c) de l'afficheur est le pixel (l, c%(taille horizontale de police)) de l'image du caractère en position c/(taille horizontale de la police) du texte actuellement affiché.
    Si en plus, vous avez la chance d'avoir une image contenant la police dans l'ordre alphabétique, et un texte en majuscule, vous pouvez carrément écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    unsigned int const h = taille horizontale de la police;
    pixel[l][c] = police[l][ (texte[c/h] - 'A')*h + c%h ];
    C'est une approximation, car il faut gérer la ponctuation.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

Discussions similaires

  1. afficher des messages texte avec hyperliens dans un carroussel
    Par billybobbonnet dans le forum Windows Presentation Foundation
    Réponses: 8
    Dernier message: 27/08/2014, 15h30
  2. Envoi de mail texte avec pièce jointe quelconque
    Par Heremion dans le forum Langage
    Réponses: 27
    Dernier message: 12/05/2014, 00h48
  3. [Debutant] envoi d'un message POST avec une URL
    Par Yannos94 dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 14/06/2006, 10h22
  4. Problème d'envoie de text avec les sockets
    Par Coussati dans le forum Web & réseau
    Réponses: 6
    Dernier message: 16/09/2005, 10h26
  5. Envoi de messages MS DOS avec le IP
    Par asphp dans le forum Développement
    Réponses: 6
    Dernier message: 07/01/2004, 16h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo