home castoo
chapitre programmation
programmation proc�durale

Librairie "lib_1306_rot"
Arduino , esp8266 et esp32
saisies et menus sur écran oled ssd1306

Février 2021
-
Nov. 2023

Documentation "lib_1306_rot"
  1. Description / Dowload librairie "lib_1306_rot.h"
  2. Utilisation avec un câblage 2 fils
  3. Utilisation avec un câblage 5 fils
  4. Déclaration de la librairie
  5. Sources(.h et .cpp) de la librairie
  6. Exemples de la librairie

Saisir du texte, des chiffres ou créer un menu sur un mini-écran tft.

Exemple d'utilisation de la librairie "lib_1306_rot.h"

Cette librairie est conçue pour fonctionner avec un écran Oled ssd1306 et un encodeur rotatif.
Souvent lors de projet avec des ESP8266 par exemple on manque rapidement de gpio de disponible, ici avec un câblage sur deux fils vous n'utilisez plus que 2 gpios ce qui va vous permettre de libérer trois gpio pour votre projet.

Il est possible d'utiliser cette librairie avec deux types de câblage :
- soit en raccordant les trois fils de l'encodeur directement sur des gpios du processeur, 5 fils seront donc nécessaire (2 pour i2c et 3 pour l'encodeur).
- soit en raccordant les trois fils de l'encodeur derrière une interface I/O PCF85741 sur I2C, dans ce cas seulement deux gpios (2 pour i2c) seront utilisés. Dans ce 2eme cas, il reste des positions disponibles sur l'interface I/O i2c pour d'autres utilisations sans surcharger les gpios du processeur.


Si vous avez utilisé une version plus ancienne de cette librairie, il faut savoir que la version présentée ici est plus puissante et plus simple à utiliser. Les anciennes versions (menu_oled, sai_oled, menu_oled_i2c et sai_oled_i2c) sont disponibles sur le site seulement pour les personnes qui ont commencés à les utiliser.

Plusieurs versions de cette librairie sont en cours de préparation, version directe sans i2c ainsi qu'une version pour les écran ILI9341 (Déjà utilisée sur mon projet de plateforme de développement).
Quelques fonctions ont également été testées sur Raspberry (en python) à suivre....

Télécharger (upload) le zip : lib_1306_rot.zip
Voir ici la doc pour integrer une librairie zip dans l'IDE Arduino.
Voir ici la doc pour integrer une librairie zip dans Visual Vision Code.

Les exemples sont mémorisés et disponibles dans l'IDE Arduino sous "Fichier" "Exemples" "lib_1306_rot"

Les noms de librairie ont été actualisés pour accompagner ce changement de version, toutes les fonctions restent identiques mais il est maintenant possible d'utiliser cette version sans interface I/O PCF85741 I2c.
"util_1306_i2c" devient "lib_1306_rot"
Le nom de l'objet "util_1306" a été conservé par souci de compatibilité.

"Open Source"

Je vous livre ici le code complet en "Open Source".

Si vous utilisez ce code, ce serait cool 😉 de mettre un lien vers le site : https://castoo.fr 😉

Utilisation

Quand on développe sur Arduino où ESP on a souvent besoin d'adapter son montage à un environnement spécifique, réseau wifi, vitesse de l'interface série, nom d'une action... cette librairie va permettre par exemple de saisir, un SSID Wifi et le mot de passe du réseau, ceci évite de connaitre au moment de la création du code ces informations et donc le mot de passe n'apparaitra plus codé en dur dans le code.
Cette librairie est utilisée à plusieurs reprises dans ce site voir les exemples dans le chapitre électronique.

Comment utiliser les menus

Vous pouvez utiliser autant que besoin des menus dans une application...

	// Déclaration des variables du menu  
	int A_menu; // Choix selectionné dans menu
	const int nb_ch_menuA = 3; // choix du menu Principal
	const String ch_menuA[] = {"Saisir votre nom", "Saisir votre prénom", "Afficher Nom Prénom"};
	String _ch_menuA = * ch_menuA;
	
	// Lancement du menu
	A_menu = Uoled.init_menu(nb_ch_menuA, _ch_menuA);
	

Comment utiliser la saisie alphanumérique

Ici, c'est l'écran bicolor qui est le mieux exploité !
Vous pouvez utiliser autant que besoin des saisies dans une application...

String s_nom = Uoled.sai_Alpha("Saisir Nom ?"); 
	

Ecran de saisie sur OLED sd 1306 L'objet permettant la saisie propose 4 types d'écrans :
Chaque écran est divisé en trois parties :
A droite : Un premier menu qui permet de choisir le type de saisie (Majuscule, minuscule, spéciaux ou validation). Si l'on va en bout d'un menu on passe à l'autre menu.
A gauche : Une liste des caractères sélectionnés par le choix du menu de droite. Par exemple la liste des majuscules. A chaque appui sur le bouton le caractère est sélectionné et affiché en partie 3, mais en cas d'erreur, il est possible de corriger avec le menu "val".
En bas (en haut sur cette version) : Le texte issue des sélections effectuées. Il est possible de valider ou d'annuler cette saisie avec le menu "val".
Une option modifiable dans le code permet de passer à l'autre menu par le haut et par le bas : sortie_deb(true) Quand cette option est à true, on gagne du temps dans la saisie car il est possible de passer d'un menu à l'autre beaucoup plus rapidement mais le bouton devient plus difficile à maitriser. Perso je laisse cette option à false, à vous de tester...
Comme on peut le voir sur les photos de l'ancienne version de cette librairie, l'utilisation d'un écran bicolor massacre un peu les affichages, sur la version présentée ici le texte est affiché en haut, cela permet de profiter de la particularité de ce type d'écran bicolor !

Comment utiliser la saisie numérique

Vous pouvez utiliser autant que besoin des saisies de numérique dans une application...
(1er parametre) Il est possible d'afficher de 1 à 3 roolup
(2eme parametre) saisie d'une puissance de 10 (true on affiche, false on masque).
(3eme parametre) String la question.
(des grammes, des kg, des metres, des hertz, des volts, des ...).
Ici aussi, c'est l'écran bicolor qui est le mieux exploité !

int res_rup = Uoled.sai_Num(3, true, "Fréquence Hz ?");
	

Comment utiliser la saisie de déplacements

Vous pouvez utiliser autant que besoin des saisies de déplacement dans une application...
Cette fonction permet une gestion simplifiée des mouvements de l'encodeur rotatif, dés qu'un mouvement de l'encodeur est détecté la fonction retourne un char. 'G' pour Gauche, 'D' pour droite, 'B' pour bouton appuyé.

char sai_dep = Uoled.sai_mov();
	

Exemple du code de la photo ci-contre.

const String m_s[] = {"Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Décembre"};
while(sai_dep != 'B'){
	sai_dep = Uoled.sai_mov();
	if(sai_dep == 'G') cpt = (cpt-1<0)?11:(cpt-1); 
	 else if(sai_dep == 'D') cpt = (cpt+1) %12;
	display.setColor(BLACK);
	display.fillRect(0, 20, 128, 20);
	display.setColor(WHITE);
	display.drawString(64, 22, String(m_s[cpt]));
	display.display();
	delay(30);
}	
	
Voir l'exemple complet livré avec la librairie !

Comment utiliser l'attente du bouton pressé

Cette fonction permet d'attendre pour continuer le programme que l'utilisateur presse le bouton de l'encodeur rotatif.
Vous avez par exemple affiché à l'écran un message d'erreur et vous souhaitez que l'utilisateur puisse lire votre message avant de continuer l'exécution du programme. Vous pouvez utiliser autant que besoin des attentes dans une application...

while(Uoled.li_rot_sw()){delay(10);}
	

Comment utiliser les sorties optionnelles du circuit PCF85741

Evidement cette possibilité n'est accessible que dans le cas
où vous utilisez un PCF85741 !

Des fonctions supplémentaires ont été ajoutées à la librairie pour la gestion en entrée ou en sortie des broches restées disponibles sur le PCF85741 (comme l'encodeur rotatif n'en utilise que 3 il en reste 5 !).
Attention : Une remise dans un état stable de l'encodeur rotatif (nécessaire pour rattraper le timing)

uint8_t bouton = 3; // permet de tester la lecture d'un bouton sur P3 du PCF85741
uint8_t led_1 = 4; // test avec une led de l'écriture sur P4 du PCF85741
if(Uoled.li_eb_rot(bouton)){ // Lecture d'un eb sur une entrée du circuit i2c I/O
	display.drawString(64, 30, "Bouton ok !");
	delay(20);
	Uoled.ecri_eb_rot(led_1, false); // Ecriture d'un eb sur une sortie du circuit i2c I/O
}
Uoled.init_eb_rot(); // Remise dans un état stable de l'encodeur rotatif (nécessaire pour rattraper le timing)
	


Bonne utilisation...

La librairie contient cinq fichiers regroupés dans le zip disponible en haut de cette page que vous allez pouvoir intégrer dans votre IDE arduino :
(Les exemples seront disponibles dans l'IDE Arduino (Fichier/Exemples/lib_1306_rot) quand vous aurez integr� la librairie.)

Haut de page
Bricolage Robotique Informatique Peinture Voyage
Téléc. portail Le robot "mécano" Astuces informatique Henri Bertrou Auvergne
Bat. Iphone 6S Le robot "solaire" Réseau couche app. Jean-Michel Castille Floride
Robot piscine Servo et IR" Réseau Les couches New York
Xiaomi M365 Le robot "thymio" Réseaux Outils L'Ouest américain
Mac Mini Le robot "Rovio" Unités grandeur inf. L'Ile Maurice
Putty SSH Windows L'Italie / Venise
Bases Raspberry Tunisie
Termius IPhone/IPad Grece
Le vieux ZX 81
...
Navigation La Rochelle CNC / Imp3D Electronique Programmation
Rencontre dauphins Les Minimes Construction CNC Alim. TPL 5110 Doc. programme
Analyse NMEA 0183 Le Vieux port CNC du commerce Carte ESP8266 Indent programme
graph. NMEA 0183 L'Ile de Ré Martyr CNC ESP8266 1 relai Prog. objet
Analyse trames AIS A visiter Réa. imp. 3D ESP8266 Alarme Prog. procédurale
Analyse AIS TCP-IP Cura impression 3D ESP8266 MQTT
Sortie en ketch Plateau CR10 ESP8266 Temp.
Echange GPS C80 Anémomètre.
HP Sun-Odyssey CNC / 3D en vrac MCP9808 Librairie
LCD yanmar Saisie Oled
Testeur nmea esp1 i2c