Go Down

Topic: Oled 168*64 (Read 785 times) previous topic - next topic

waldpest

Bonjour à tous,

Voila je voudrais dans un premier temps afficher l'heure...
Seulement pour cela je suis entrain de faire des test avec une heure fictive, question de tester l'écran et l'affichage.
Mon problème est que je voudrais un affichage fluide...
La pour l'instant l'ecran saute a chaque seconde qui passe....
A cause du clearDisplay de la librairie SSD1306.

Pouvez vous me dire ou m'orienter pour pouvoir afficher du texte sans faire un clear a chaque fois?
Modifier que la parti seconde par exemple mais sans faire sauter l'ecran avec le clear?

Merci beaucoups.

fdufnews

Le plus simple : faire afficher 4 espaces à la place de l'heure et reécrire l'heure par dessus
Plus compliqué faire la même chose en ne l'appliquant qu'aux caractères qui ont changé.

waldpest

Aurait tu un exemple de code car je n'arrive pas a faire fonctionner...
Il écrit a chaque fois au dessus de la valeur afficher ce qui fait que c'est illisible :/

JMe87

Bonjour,
dans un premier temps il faut "ecrire" des espaces pour effacer puis re-positionner le curseur pour ecrire la nouvelle valeur.
Jacques

waldpest

c'est ce que j'ai fait ... par exemple

 
Code: [Select]

//pour initialiser l'ecran
  display.clearDisplay();
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(35,0);
  display.println("Heure");
  display.display();
  display.setTextSize(2);
  display.setCursor(20,30);
  display.print("01");
  display.print(":");
  display.print("00");
  display.print(":");
  display.print("00");
  display.display();
  delay(1000);
  display.setCursor(20,30);
  display.print("01");
  display.print(":");
  display.print("00");
  display.print(":");
  display.print("  ");
  display.display();
  display.setCursor(20,30);
  display.print("01");
  display.print(":");
  display.print("00");
  display.print(":");
  display.print("01");
  display.display();
  delay(1000);



Mais au lieu de me mettre les espaces... il réécrit quand meme par dessus :(

JMe87

Mes excuses, pas fit attention que c'est un afficheur graphique.
Il faut faire le travail a la main c-a-d ecrire un rectangle de la couleur du fond pour effacer le caractere.
C'est ce qu'il fait quand il efface tout l'ecran.
Je termine a l'instant un thermometre avec grand caracteres en matrice 5x8.
Pour chaque afficher un caractere, je dessine 40 cercles remplis de la couleur du fond ou de la couleur contrastante suivant le besoin.
A mon avis, pas possible de faire autrement.
Jacques

B@tto

Salut,

Pour faire du fluide il faut imprimer en noir le caractère "précédent".

Il te faut deux chaines de caractères : une pour l'heure que tu veux afficher (actualisée donc), et une pour servir de mémoire. Ensuite caractère par caractère tu compares : s'il ne sont pas identiques, on ajoute en noir le caractère précédent, on fait revenir en arrière le curseur de 1 caractère et on imprime en blanc le nouveau.

Code: [Select]

#define TAILLE_CARACTERE 5 // je mets au pif, à déterminer, en pixel

char heure[10];
char heure_precedente[10];

...

// je suppose ici une routine qui met à jour heure[]

oled.setCursor(x_depart, y depart);

byte x=0;

for (byte i=0;i<10 ;i++) {

if(heure[i]!=heure_precedente[i]) {

oled.setColor(BLACK);
oled.print(heure_precedente[i]);
oled.setCursor(x-TAILLE_CARACTERE,y_depart);
oled.setColor(WHITE);
oled.print(heure[i]);
heure_precedente[i]=heure[i];
}

x+=TAILLE_CARACTERE;

}


Comme t'as pas donné ta librairie, j'ai utilisé des fonctions un peu au pif mais tu devrais pouvoir transcrire.
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

waldpest

Yes merci à tous :) ça fonctionne très bien :)


Go Up