SetCursor permet de positionner un texte par son extrémité gauche
Est-il possible de le faire par son extrémité droite?
La raison de ma demande : mon texte varie en longueur mais je voudrais que son extrémité droite reste fixe
SetCursor permet de positionner un texte par son extrémité gauche
Est-il possible de le faire par son extrémité droite?
La raison de ma demande : mon texte varie en longueur mais je voudrais que son extrémité droite reste fixe
![]()
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. déplacé vers le forum francophone.
Merci de prendre en compte les recommandations listées dans Les bonnes pratiques du Forum Francophone
J'ai encore du mal à comprendre
Il me semble que je suis pourtant bien dans la bonne section International Français .. non? .

Bonjour
Il me semble que je suis pourtant bien dans la bonne section International Français .. non? .
oui, car @UKHeliBob vient de faire le nécessaire après avoir trouvé le message dans la partie anglophone
il écrit qu'il a déplacé le message
Merci au passage à @UKHeliBob pour son travail quotidien de 'relocalisation' ![]()
Ah ok ... je chercherai comment me positionner directement dans cette section
voci le lien d'accès direct à la partie Francophone :
Bonjour jo6466
Voilà une façon de faire:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display
const int lcdMaxPos = 20;
String lcdText = "ARDUINO";
void setup()
{
lcd.init(); // initialize the lcd
lcd.backlight();
lcd.setCursor(lcdMaxPos-lcdText.length(),0);
lcd.print(lcdText);
}
void loop()
{
}
En déduisant la longueur du texte du nombre de colonnes pour trouver la position de départ.
Cordialement
jpbbricole
Je comprends l'idée mais je n'arrive pas à l'appliquer à mon écran oled 128x64
J'obtiens cette erreur de compilation : invalid operands of types 'const int' and 'char [50]' to binary 'operator-'
Mon code adapté est le suivant :
sprintf(BUFFER_H, "%.d:%.2d", hour(Heure_P), minute(Heure_P)); // creation et remplissage de la variable "BUFFER_H"
ecranOLED.setFont(&FreeSansBold16pt7b);
ecranOLED.setTextColor(WHITE);
ecranOLED.setCursor (oledMaxPos-BUFFER_H.lenght(), 0);
ecranOLED.display();
On a qu'une partie du code mais on peut supposer que BUFFER_H est un tableau de char donc ce n'est pas une classe et donc il n'y a pas de méthode length().
Par contre il y a strlen(BUFFER_H)
Il faut que tu précises quelle(s) bibliothèque(s) graphique(s) tu utilises pour ton écran
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Il existe dans cette bibliothèque la méthode getTextBounds :
void Adafruit_GFX::getTextBounds(const char *str, int16_t x, int16_t y,
int16_t *x1, int16_t *y1, uint16_t *w,
uint16_t *h)
@brief Helper to determine size of a string with current font/size. Pass string and a cursor position, returns UL corner and W,H. @param str The ASCII string to measure @param x The current cursor X @param y The current cursor Y @param x1 The boundary X coordinate, returned by function @param y1 The boundary Y coordinate, returned by function @param w The boundary width, returned by function @param h The boundary height, returned by function
Avec ça, tu peux connaitre la largeur d'un texte, c'est à dire le nombre de pixels qu'il va utiliser sur ton écran. Après appel de la fonction, le paramètre w renvoie ce nombre. Il te suffit alors de positionner ton texte à la bonne abscisse de ton écran :
int position = limiteDroite - w;
Merci Lesept ... GetTextBounds fonctionne parfaitement
Autre question ... avec ces instructions j'affiche Les heures et les minutes avec le même jeux de caractères
Serait-il possible d'afficher les heures et les minutes avec des caractères différents?
J'ai essayé ceci mais cela ne marche pas :
sprintf(BUFFER_H1, "%, hour(Heure_P)); // creation et remplissage de la variable "BUFFER_H1"
ecranOLED.setFont(&FreeSansBold16pt7b);
sprintf(BUFFER_H2, "%.2d", minute(Heure_P)); // creation et remplissage de la variable "BUFFER_H2"
ecranOLED.setFont(&FreeSans6pt7b);
sprintf(BUFFER_H,BUFFER_H1,BUFFER_H2); // creation et remplissage de la variable "BUFFER_H"
ecranOLED.setTextColor(WHITE);
ecranOLED.print(BUFFER_H);
L'utilisation des polices est décrite ici :
A priori ton code est bon, il faut en effet utiliser setFont() mais il faut déclarer les polices utilisées au début de ton code :
#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_SSD1306.h> // Hardware-specific library
#include <Fonts/FreeMonoBoldOblique12pt7b.h>
#include <Fonts/FreeSerif9pt7b.h>
Je l'ai déjà fait
#include <Fonts/FreeSans6pt7b.h>
#include <Fonts/FreeSansBold9pt7b.h>
#include <Fonts/FreeSansBold12pt7b.h>
#include <Fonts/FreeSansBold16pt7b.h>
Le résultat est que les heures et les minutes sont affichées avec le petit jeu de caractères
Là tu n'écris pas sur l'écran... mais dans un buffer. Il faut assigner la police juste avant d'écrire sur l'écran.
Je rappelle mon but
Le point 1 marche très bien avec 1 Sprintf pour l'heure et la minute et 1 sprintf pour la seconde
Cela me semble mission impossible
Tu dois écrire les heures dans un premier buffer, puis les minutes dans un second. Ensuite, tu choisis la police des heures et tu affiches le premier buffer. Puis tu choisis la police des minutes et tu affiches le second buffer. Un truc comme ça :
sprintf(BUFFER_H, "%2d", heure(Heure_P));
sprintf(BUFFER_M, "%2d", minute(Heure_P));
ecranOLED.setFont(&FreeSansBold16pt7b);
ecranOLED.setCursor(xheure, yheure);
ecranOLED.print(BUFFER_H);
ecranOLED.setFont(&FreeSans6pt7b);
ecranOLED.setCursor(xminute, yminute);
ecranOLED.print(BUFFER_M);
c'est ce que j'ai fait mais comment utiliser ensuite la fonction getTextBounds si j'ai deux variables?