Une barre graphique qui va progresser de gauche a droite indéfiniment , ce qui nous permettras de comprendre la librairie utilisée ici la U8Glib
Pour le cablage rien de plus simple, il suffit de relier le SCL de l'afficheur au A5 de l'arduino et le SCA de l'afficheur au A4 , le VCC au 3.3v de l'arduino et surtout pas le 5v, le GND au GND de l'arduino.
Première chose insérer la librairie U8Glib , 2 solutions : la rechercher par le gestionnaires interne de l'ide arduino ou la télécharger ici puis l'installer.
/*
Barre de progression avec bibliothèque U8Glib et afficheur Oled SSD1306 128*64 en I2c
Version 1.0
Arduino uno SCL en A5 et SDA an A4 + oled sur 3,3v arduino
*/
#include "U8glib.h"
// on prends le bon drivers de la lib U8Glib
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST); // Fast I2C / TWI
// initialisation de la variable pour incrémenter la barre
int largPos = 0;
void setup() {
u8g.setFont(u8g_font_tpssb); // on utilise une fonte choisie parmis le tableau de référence : https://github.com/olikraus/u8glib/wiki/fontsize
u8g.setColorIndex(1); // Instruction pourt mettre pixel à on.(affiche le pixel en blanc)
}
void loop() {
//on débute l'affichage ici appel de la procédure
u8g.firstPage();
do {
u8g.drawStr( 0, 50, "Barre de Progression"); // on ecrit le texte aux coordonnées X et Y
u8g.drawFrame(0,10,128,20); // on créer un rectangle vide (frame) avec les valeurs (x,y,largeur,hauteur)
draw(); // on va a la fonction draw
} while( u8g.nextPage() ); // on marque ici la fin de la procédure d'affichage
// si cela est trop rapide ajouté une pause
// delay(5);
//Si la barre n'est pas encore a la position souhaité
if(largPos < 108){
// si cela n'est pas assez rapide incrémenter de plus que 1
largPos++; } // on incrémente de 1
else{ // sinon
largPos = 0; // on remet à 0.
}
}
// fonction draw
void draw(){
u8g.drawBox(10,15,largPos,10); // on créer un rectangle plein de coordonnées et de dimensions (x,y,largeur,hauteur) et on incrémente donc sa largeur (largPos)
}
Nous allons créer une image et la transposer sur l'afficheur grâce a un programme nommer LCD_assistant que vous pouvez télécharger ici : Lcdassistant (433.68 Ko)
**************************************
/*
Utilisation de lcd_assitant et de paint ou autre pour afficher un
graphisme sur Oled ssd1306 en i2c 128*64
créer une image avec votre logiciel de dessin de 128*64 en monochrome (2 couleurs)
Lancer Lcd_assistant charger l'image et mettre en Horizontal puis mettre un nom Dans Table name et faire Save output.
L'image de test affiche le texte 'LG LINUX 3D' en oblique sur l'écran
*/
#include "U8glib.h"
// on prends le bon drivers de la lib U8Glib
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST); // Fast I2C / TWI
void draw(void) {
// on affiche notre image avec pour coordonnées (x,y,largeur*8,hauteur,nom de l'image) ici c'est du plein ecran :) 128*64
u8g.drawBitmapP( 0, 0, 16, 64, lglinux3d_image);
}
Toujours notre librairie u8glib et le ssd1306 oled avec un petit plus le DS3231 qui est une horloge temps réel avec température et même une alarme programmable.
Pour la librairie du DS3231 je vous conseille le gestionnaire de bibliothèque de l'ide arduino et taper ds3231 vous aurez de suite la librairie a installer.
Je mets directement le code que vous pouvez télécharger ici.
J'ai commenté un maximum et j'ai fait le plus simple possible donc ce n'est pas optimiser , mais vous pourrez le faire vous-même après.
Il vous faudra juste quelques notions de fonctions ici.
************************************
/*
DS3231 avec bibliothèque U8Glib et afficheur Oled SSD1306 128*64 en I2c
Version 1.0
Arduino uno SCL en A5 et SDA an A4 ainsi qu'un module ds3231 brancher en paralèlle sur SDA et SCL + oled sur 3,3v arduino
*/
// on inclut ici la bibliothèque du DS3231 et celle de U8glib
#include <DS3231.h>
#include "U8glib.h"
// on prends le bon drivers de la lib U8Glib
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST); // Fast I2C / TWI
// ces 2 variables servent pour le retour des fonctions mois et jour.
char* moisok; // on déclare la valeur de moisok comme une chaine de caractères
char* jourok; // on déclare la valeur de jourok comme une chaine de caractères
// on initialise le ds3231
DS3231 rtc(SDA, SCL);
// Initialisation de la structure de donnée Time (Time-data structure)
Time t;
void setup() {
u8g.setFont(u8g_font_tpssb); // on utilise une fonte choisie parmis le tableau de référence : https://github.com/olikraus/u8glib/wiki/fontsize
u8g.setColorIndex(1); // Instruction pourt mettre pixel à on.(affiche le pixel en blanc)
rtc.begin(); // on communique avec le 3231 et toutes les commandes rtc.(real transmission clock)
}
void loop() {
// on prends les infos de date et heure compris dans le DS3231
t = rtc.getTime();
float temperature = rtc.getTemp(); // on initialise la variable du ds3231 récupérer avec la fonction rtc.getTemp() qui est un float
u8g.firstPage();
do {
u8g.setPrintPos(1, 20);// on indique la position x et y ou sera ecrit la température
u8g.print(temperature);// on ecrit le texte correspondant ici a la temperature relevée dans le module DS231
u8g.println(" C");// on ajoute un espace et un C pour celcuis le caractère n'est pas gérer avec cet afficheur
u8g.setPrintPos(1, 35);// on indique la position x et y ou sera ecrit le jour en lettres et chiffres
// on va chercher le jour (t.dow) avec pour premier jour = lundi
jour(t.dow); //on va la fonction mois avec la valeur t.mon le numéro du jour
u8g.print(jourok); // on affiche le retour de la fonction jour (jourok)
u8g.println(" "); // un espace
u8g.print(t.date, DEC); // on affiche la date du jour 0-31
u8g.setPrintPos(1, 50);// on indique la position x et y ou sera ecrit le mois et l'année
// on affiche le mois
mois(t.mon); //on va la fonction mois avec la valeur t.mon le numéro du mois
u8g.println(moisok); // on affiche le retour de la fonction mois (moisok)
u8g.println(" "); // unespace
// on affiche l'année
u8g.print(t.year, DEC);
u8g.setPrintPos(60, 20);// on indique la position x et y ou sera ecrit l'heure a la suite de la température
// on affiche les heures et on test si inférieur a 10 on met un zéro devant c'est plus beau :)
if (t.hour < 10) {
u8g.print("0");
u8g.print(t.hour, DEC);
} else {
u8g.print(t.hour, DEC);
}
u8g.println(":");// on affichje : entre les heures et minutes
// on affiche les minutes et on test si inférieur a 10 on met un zéro devant c'est plus beau :)
if (t.min < 10) {
u8g.print("0");
u8g.print(t.min, DEC);
} else {
u8g.print(t.min, DEC);
}
u8g.println(":");// on affichje : entre les minutes et seondes
// on affiche les secondes et on test si inférieur a 10 on met un zéro devant c'est plus beau :)
if (t.sec < 10) {
u8g.print("0");
u8g.print(t.sec, DEC);
} else {
u8g.print(t.sec, DEC);
}
} while( u8g.nextPage() ); // on marque ici la fin de la procédure d'affichage
}
// fonction mois
char mois (int m)
{
switch (m)
{
case 1:
moisok="Janvier";
break;
case 2:
moisok="Fevrier";
break;
case 3:
moisok="Mars";
break;
case 4:
moisok="Avril";
break;
case 5:
moisok="Mai";
break;
case 6:
moisok="Juin";
break;
case 7:
moisok="Juillet";
break;
case 8:
moisok="Aout";
break;
case 9:
moisok="Septembre";
break;
case 10:
moisok="Octobre";
break;
case 11:
moisok="Novembre";
break;
case 12:
moisok="Decembre";
break;
}
return moisok;
}
//fonction jour
char jour (int j)
{
switch (j)
{
case 1:
jourok="Lundi";
break;
case 2:
jourok="Mardi";
break;
case 3:
jourok="Mercredi";
break;
case 4:
jourok="Jeudi";
break;
case 5:
jourok="Vendredi";
break;
case 6:
jourok="Samedi";
break;
case 7:
jourok="Dimanche";
break;
}
return jourok;
}
*******************************
Voici donc le résultat en video et en photos.
Voila une base ;)
Je prépare la suite avec les fonctions alarme et la modification de l'heure etc...
This professional deeply cleaning products and services in Dubai on your office besides clean ones workspace correctly. But in addition, they eradicate more dirt in addition to grime to raise the appearance of this office living space. Deep clean-up also means steam cleaning during which your furniture appliances will be cleaned in addition to stain-free to seem pleasant previous to your buyers. There usually are clean practices then you will discover super fresh offices. Deep cleaning your workplace is the sole thing that can certainly greet your prospective customers with a super clean in addition to pleasant glimpse. maid services dubai
2
Ness
Le 05/02/2020
Bonjour
Merci pour ton partage, cela m'est fort utile pour créer mon projet
3
Coinon albert
Le 01/12/2019
Bonjour et merci pour ce tuto, j'apprécie et sa m'aide beaucoup étant tout juste novice dans ce domaine. J'ai à ma disposition des cartes pro mini et je me demande si avec un FTDI pour le programmer il serait possible de réaliser se montage avec ce dernier. Ceci dans le but de réduire considérablement l'ensemble....et de faire un système mobile "en boîte " Si un schéma et son code et disponible pour la réalisation de ce projet j'en suis complètement amateur. Est ce que tu pourrais m'aiguiller.
En te remerciant par avance
Continue ce que tu fais c'est très bien et j'espère passer à un niveau comme le tiens un jour......
Cordialement
Albert
4
Vincent VIDAL
Le 03/10/2019
Bonjour et merci pour les démos, j'ai un afficheur bicolor (Jaune/Bleu) à 7 Pins (GND, VCC, D0 (SCL), D1 (SDA), RES (RESET), DC et CS. si je réduit pour faire simple, DC et CS à la masse, il me reste SCL, SDA et RES à cabler. Pour la Lib u8glib sur un UNO je mets quoi comme pins pour l'I2C ? Merci ! V.V