Bonjour,
super tuto comme on aimerait en voir encore plus, bravo
j’ai reçu un Arduino UNO (mon 4ème) et 2 afficheurs OLED pour la fete des pères…
en effet mon fils était avec moi a Dreux lors de l’expo de novembre 2021 et on avait vu ce montage en demo sur un stand, qui m’avait plu
j’avais oublié mais lui avait gardé ca comme idée cadeau : sympa
mon fils n’étant pas electronicien il a commandé des afficheurs OLED un peu différents (AZDelivery) , notamment le chipset qui est un SH1106 (au lieu du SSD1306 du montage).
Deux soucis : une seule ligne s’affichait et pas de réglage de l’adresse…
1er souci résolu avec la bibliothèque OLED SSD1306 - SH1106 de Fabio Durigon
2eme souci en ajoutant un Mux TCA9548A, qui dédouble en plusieurs bus I2C
Cela fonctionne nickel et m’a donné des idées pour ajouter d’autres afficheurs, en gare ou pas !
Le source requiert peu de modifications, voici le code modifié:
/*********************************************************************
Programme de gestion d'un ecran monochrome OLEDs sur une base SSD1306 drivers
**** adapté pour => SH1106
pour l'affichage de la gare d'Aurillac.
*********************************************************************/
// Ce qui suit sert a initialiser le compilateur et à definir les applications a utiliser
#include <avr/pgmspace.h>
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_SH1106.h> // edit 2022
#define OLED_RESET 4
// ajout OC juin 2022 => MUX I2C
void TCA9548A(uint8_t bus)
{
Wire.beginTransmission(0x70); // TCA9548A address is 0x70
Wire.write(1 << bus); // send byte to select bus
Wire.endTransmission();
}
// creation de deux afficheurs
Adafruit_SH1106 display1(OLED_RESET);// edit 2022 appel biblio différent
Adafruit_SH1106 display2(OLED_RESET);
// génération des tables de variables (c'est ici que vous devrez modifier vos écrans
// tables des départs
const char depart_0[]PROGMEM = "HEURE DEPART V---------------------O5h15 BRIVE 3";
const char depart_1[]PROGMEM = "HEURE DEPART V---------------------O5h15 BRIVE 305h54 CLERMONT FR 2";
const char depart_2[]PROGMEM = "HEURE DEPART V---------------------O5h15 BRIVE 3O5h54 CLERMONT FR 2O6h45 TOULOUSE 1";
const char depart_3[]PROGMEM = "HEURE DEPART V---------------------O5h15 BRIVE 3O5h54 CLERMONT FR 2O6h45 TOULOUSE 1O7h55 CLERMONT FR 2";
const char depart_4[]PROGMEM = "HEURE DEPART V---------------------O5h15 BRIVE 3O5h54 CLERMONT FR 2O6h45 TOULOUSE 1O7h55 CLERMONT FR 2O8h46 TOULOUSE 1";
const char depart_5[]PROGMEM = "HEURE DEPART V---------------------O5h15 BRIVE 3O5h54 CLERMONT FR 2O6h45 TOULOUSE 1O7h55 CLERMONT FR 2O8h46 TOULOUSE 1O9h13 NEUSSARGUES 3";
const char depart_6[]PROGMEM = "HEURE DEPART V---------------------O7h55 CLERMONT FR 2";
const char depart_7[]PROGMEM = "HEURE DEPART V---------------------O7h55 CLERMONT FR 2O8h46 TOULOUSE 1";
const char depart_8[]PROGMEM = "HEURE DEPART V---------------------O7h55 CLERMONT FR 2O8h46 TOULOUSE 1O9h13 NEUSSARGUES 3";
const char depart_9[]PROGMEM = "HEURE DEPART V---------------------O7h55 CLERMONT FR 2O8h46 TOULOUSE 1O9h13 NEUSSARGUES 31Oh27 CLERMONT FR 2";
const char depart_10[]PROGMEM = "HEURE DEPART V---------------------O7h55 CLERMONT FR 2O8h46 TOULOUSE 1O9h13 NEUSSARGUES 31Oh27 CLERMONT FR 21Oh49 BRIVE 3";
const char depart_11[]PROGMEM = "HEURE DEPART V---------------------O7h55 CLERMONT FR 2O8h46 TOULOUSE 1O9h13 NEUSSARGUES 31Oh27 CLERMONT FR 21Oh49 BRIVE 311h22 PARIS AUSTER 5";
const char depart_12[]PROGMEM = "HEURE DEPART V---------------------1Oh27 CLERMONT FR 2";
const char depart_13[]PROGMEM = "HEURE DEPART V---------------------1Oh27 CLERMONT FR 21Oh49 BRIVE 3";
const char depart_14[]PROGMEM = "HEURE DEPART V---------------------1Oh27 CLERMONT FR 21Oh49 BRIVE 311h22 PARIS AUSTER 5";
const char depart_15[]PROGMEM = "HEURE DEPART V---------------------1Oh27 CLERMONT FR 21Oh49 BRIVE 311h22 PARIS AUSTER 512h55 TOULOUSE 1";
const char depart_16[]PROGMEM = "HEURE DEPART V---------------------1Oh27 CLERMONT FR 21Oh49 BRIVE 311h22 PARIS AUSTER 512h55 TOULOUSE 113h28 NEUSSARGUES 3";
const char depart_17[]PROGMEM = "HEURE DEPART V---------------------1Oh27 CLERMONT FR 21Oh49 BRIVE 311h22 PARIS AUSTER 512h55 TOULOUSE 113h28 NEUSSARGUES 316h39 CLERMONT FR 2";
const char depart_18[]PROGMEM = "HEURE DEPART V---------------------12h55 TOULOUSE 1";
const char depart_19[]PROGMEM = "HEURE DEPART V---------------------12h55 TOULOUSE 113h28 NEUSSARGUES 3";
const char depart_20[]PROGMEM = "HEURE DEPART V---------------------12h55 TOULOUSE 113h28 NEUSSARGUES 316h39 CLERMONT FR 2";
const char depart_21[]PROGMEM = "HEURE DEPART V---------------------12h55 TOULOUSE 113h28 NEUSSARGUES 316h39 CLERMONT FR 216h53 TOULOUSE 1";
const char depart_22[]PROGMEM = "HEURE DEPART V---------------------12h55 TOULOUSE 113h28 NEUSSARGUES 316h39 CLERMONT FR 216h53 TOULOUSE 117h1O BRIVE 3";
const char depart_23[]PROGMEM = "HEURE DEPART V---------------------12h55 TOULOUSE 113h28 NEUSSARGUES 316h39 CLERMONT FR 216h53 TOULOUSE 117h1O BRIVE 317h44 CLERMONT FR 2";
const char depart_24[]PROGMEM = "HEURE DEPART V---------------------16h53 TOULOUSE 1";
const char depart_25[]PROGMEM = "HEURE DEPART V---------------------16h53 TOULOUSE 117h1O BRIVE 3";
const char depart_26[]PROGMEM = "HEURE DEPART V---------------------16h53 TOULOUSE 117h1O BRIVE 317h44 CLERMONT FR 2";
const char depart_27[]PROGMEM = "HEURE DEPART V---------------------16h53 TOULOUSE 117h1O BRIVE 317h44 CLERMONT FR 218h32 FIGEAC 3";
const char depart_28[]PROGMEM = "HEURE DEPART V---------------------16h53 TOULOUSE 117h1O BRIVE 317h44 CLERMONT FR 218h32 FIGEAC 319h18 NEUSSARGUES 2";
const char depart_29[]PROGMEM = "HEURE DEPART V---------------------16h53 TOULOUSE 117h1O BRIVE 317h44 CLERMONT FR 218h32 FIGEAC 319h18 NEUSSARGUES 221h17 FIGEAC 3";
const char depart_30[]PROGMEM = "HEURE DEPART V---------------------18h32 FIGEAC 3";
const char depart_31[]PROGMEM = "HEURE DEPART V---------------------18h32 FIGEAC 319h18 NEUSSARGUES 2";
const char depart_32[]PROGMEM = "HEURE DEPART V---------------------18h32 FIGEAC 319h18 NEUSSARGUES 221h17 FIGEAC 3";
const char depart_33[]PROGMEM = "HEURE DEPART V---------------------18h32 FIGEAC 319h18 NEUSSARGUES 221h17 FIGEAC 321h46 BRIVE 1";
// Initialisation de la table (attention il doit y avoir le même nombre de départ que dans les lignes au-dessus en faisant bien attention à la syntaxe)
const char*const depart_table[]PROGMEM = {depart_0, depart_1, depart_2, depart_3, depart_4, depart_5, depart_6, depart_7, depart_8, depart_9, depart_10, depart_11, depart_12\
, depart_13, depart_14, depart_15, depart_16, depart_17, depart_18, depart_19, depart_20, depart_21, depart_22, depart_23, depart_24, depart_25, depart_26, depart_27, depart_28\
, depart_29, depart_30, depart_31, depart_32, depart_33
};
// table des arrivées
const char arrivee_0[]PROGMEM = "HEURE ARRIVEE V---------------------O5h45 TOULOUSE 2";
const char arrivee_1[]PROGMEM = "HEURE ARRIVEE V---------------------O5h45 TOULOUSE 2O6h15 PARIS AUSTER 5";
const char arrivee_2[]PROGMEM = "HEURE ARRIVEE V---------------------O5h45 TOULOUSE 2O6h15 PARIS AUSTER 5O6h45 BRIVE 3";
const char arrivee_3[]PROGMEM = "HEURE ARRIVEE V---------------------O5h45 TOULOUSE 2O6h15 PARIS AUSTER 5O6h45 BRIVE 3O7h26 CAPDENAC 2";
const char arrivee_4[]PROGMEM = "HEURE ARRIVEE V---------------------O5h45 TOULOUSE 2O6h15 PARIS AUSTER 5O6h45 BRIVE 3O7h26 CAPDENAC 2O8h23 CLERMONT FR 1";
const char arrivee_5[]PROGMEM = "HEURE ARRIVEE V---------------------O5h45 TOULOUSE 2O6h15 PARIS AUSTER 5O6h45 BRIVE 3O7h26 CAPDENAC 2O8h23 CLERMONT FR 1O9h47 FIGEAC 3";
const char arrivee_6[]PROGMEM = "HEURE ARRIVEE V---------------------O7h26 CAPDENAC 2";
const char arrivee_7[]PROGMEM = "HEURE ARRIVEE V---------------------O7h26 CAPDENAC 2O8h23 CLERMONT FR 1";
const char arrivee_8[]PROGMEM = "HEURE ARRIVEE V---------------------O7h26 CAPDENAC 2O8h23 CLERMONT FR 1O9h47 FIGEAC 3";
const char arrivee_9[]PROGMEM = "HEURE ARRIVEE V---------------------O7h26 CAPDENAC 2O8h23 CLERMONT FR 1O9h47 FIGEAC 31Oh32 NEUSSARGUES 2";
const char arrivee_10[]PROGMEM = "HEURE ARRIVEE V---------------------O7h26 CAPDENAC 2O8h23 CLERMONT FR 1O9h47 FIGEAC 31Oh32 NEUSSARGUES 21Oh45 BRIVE 3";
const char arrivee_11[]PROGMEM = "HEURE ARRIVEE V---------------------O7h26 CAPDENAC 2O8h23 CLERMONT FR 1O9h47 FIGEAC 31Oh32 NEUSSARGUES 21Oh45 BRIVE 311h55 CLERMONT FER 1";
const char arrivee_12[]PROGMEM = "HEURE ARRIVEE V---------------------1Oh32 NEUSSARGUES 2";
const char arrivee_13[]PROGMEM = "HEURE ARRIVEE V---------------------1Oh32 NEUSSARGUES 21Oh45 BRIVE 3";
const char arrivee_14[]PROGMEM = "HEURE ARRIVEE V---------------------1Oh32 NEUSSARGUES 21Oh45 BRIVE 311h55 CLERMONT FER 1";
const char arrivee_15[]PROGMEM = "HEURE ARRIVEE V---------------------1Oh32 NEUSSARGUES 21Oh45 BRIVE 311h55 CLERMONT FER 112h29 TOULOUSE 2";
const char arrivee_16[]PROGMEM = "HEURE ARRIVEE V---------------------1Oh32 NEUSSARGUES 21Oh45 BRIVE 311h55 CLERMONT FER 112h29 TOULOUSE 214hO6 BRIVE 3";
const char arrivee_17[]PROGMEM = "HEURE ARRIVEE V---------------------1Oh32 NEUSSARGUES 21Oh45 BRIVE 311h55 CLERMONT FER 112h29 TOULOUSE 214hO6 BRIVE 315h28 NEUSSARGUES 2";
const char arrivee_18[]PROGMEM = "HEURE ARRIVEE V---------------------12h29 TOULOUSE 2";
const char arrivee_19[]PROGMEM = "HEURE ARRIVEE V---------------------12h29 TOULOUSE 214hO6 BRIVE 3";
const char arrivee_20[]PROGMEM = "HEURE ARRIVEE V---------------------12h29 TOULOUSE 214hO6 BRIVE 315h28 NEUSSARGUES 2";
const char arrivee_21[]PROGMEM = "HEURE ARRIVEE V---------------------12h29 TOULOUSE 214hO6 BRIVE 315h28 NEUSSARGUES 215h33 BRIVE 3";
const char arrivee_22[]PROGMEM = "HEURE ARRIVEE V---------------------12h29 TOULOUSE 214hO6 BRIVE 315h28 NEUSSARGUES 215h33 BRIVE 316h32 TOULOUSE 2";
const char arrivee_23[]PROGMEM = "HEURE ARRIVEE V---------------------12h29 TOULOUSE 214hO6 BRIVE 315h28 NEUSSARGUES 215h33 BRIVE 316h32 TOULOUSE 217hO7 NEUSSARGUES 1";
const char arrivee_24[]PROGMEM = "HEURE ARRIVEE V---------------------15h33 BRIVE 3";
const char arrivee_25[]PROGMEM = "HEURE ARRIVEE V---------------------15h33 BRIVE 316h32 TOULOUSE 2";
const char arrivee_26[]PROGMEM = "HEURE ARRIVEE V---------------------15h33 BRIVE 316h32 TOULOUSE 217hO7 NEUSSARGUES 1";
const char arrivee_27[]PROGMEM = "HEURE ARRIVEE V---------------------15h33 BRIVE 316h32 TOULOUSE 217hO7 NEUSSARGUES 118h32 FIGEAC 3";
const char arrivee_28[]PROGMEM = "HEURE ARRIVEE V---------------------15h33 BRIVE 316h32 TOULOUSE 217hO7 NEUSSARGUES 118h32 FIGEAC 319hO8 CLERMONT FER 2";
const char arrivee_29[]PROGMEM = "HEURE ARRIVEE V---------------------15h33 BRIVE 316h32 TOULOUSE 217hO7 NEUSSARGUES 118h32 FIGEAC 319hO8 CLERMONT FER 22OhO1 BRIVE 3";
const char arrivee_30[]PROGMEM = "HEURE ARRIVEE V---------------------19hO8 CLERMONT FER 2";
const char arrivee_31[]PROGMEM = "HEURE ARRIVEE V---------------------19hO8 CLERMONT FER 22OhO1 BRIVE 3";
const char arrivee_32[]PROGMEM = "HEURE ARRIVEE V---------------------19hO8 CLERMONT FER 22OhO1 BRIVE 321h17 FIGEAC 3";
const char arrivee_33[]PROGMEM = "HEURE ARRIVEE V---------------------19hO8 CLERMONT FER 22OhO1 BRIVE 321h17 FIGEAC 321h4O TOULOUSE 1";
// Initialisation de la table (attention il doit y avoir le meme nombre d'arrivees que dans les lignes au-dessus en faisant bien attention a la syntaxe)
const char*const arrivee_table[]PROGMEM = {arrivee_0, arrivee_1, arrivee_2, arrivee_3, arrivee_4, arrivee_5, arrivee_6, arrivee_7, arrivee_8, arrivee_9, arrivee_10, arrivee_11, arrivee_12\
, arrivee_13, arrivee_14, arrivee_15, arrivee_16, arrivee_17, arrivee_18, arrivee_19, arrivee_20, arrivee_21, arrivee_22, arrivee_23, arrivee_24, arrivee_25, arrivee_26, arrivee_27, arrivee_28\
, arrivee_29, arrivee_30, arrivee_31, arrivee_32, arrivee_33
};
//Definition du buffer
char buffer[170];
//Creation d'un sous-programme d'initialisation des afficheurs
void initaffichage()
{
// Initialisation de l'afficheur 1
// Vider le buffer.
display1.clearDisplay();
// choix de la taille
display1.setTextSize(1);
// choix de la couleur
display1.setTextColor(WHITE);
// initialisation du début d'affichage
display1.setCursor(0, 0);
// Initialisation de l'afficheur 2
// Vider le buffer.
display2.clearDisplay();
// choix de la taille
display2.setTextSize(1);
// choix de la couleur
display2.setTextColor(WHITE);
// initialisation du début d'affichage
display2.setCursor(0, 0);
}
//fin du sous-programme d'initialisation des afficheurs
void setup()
{
// initialisation de la vitesse de la liaison serie
Serial.begin(9600);
Wire.begin();
// par défaut nous allons générer une tension de 3.3v
// initialisation de la liaison ID2C avec l'adresse 0x3D (Mux = 0x3C)
TCA9548A(1); // edit 2022
display1.begin(SSD1306_SWITCHCAPVCC, 0x3C);
// initialisation de la liaison ID2C avec l'adresse 0x3C
TCA9548A(2);// edit 2022
display2.begin(SSD1306_SWITCHCAPVCC, 0x3C);
// fin de l'initialisation
}
void loop()
{
int tempo; //creation d'une variable tempo
// creation d'une boucle for
for (int i = 0; i < 34; i++)
{
initaffichage();
strcpy_P(buffer, (char*)pgm_read_word(&(depart_table[i])));
display1.println(buffer);
TCA9548A(2);// edit 2022
display1.display();
Serial.println(String("i:") + i );// edit 2022
if (i == 5 || i == 11 || i == 17 || i == 23 || i == 29 || i == 33)
tempo = 4000;
else tempo = 20;
initaffichage();
strcpy_P(buffer, (char*)pgm_read_word(&(arrivee_table[i])));
display2.println(buffer);
TCA9548A(1);// edit 2022
display2.display();
delay(tempo);
}
}
en savoir plus sur le multiplexeur:
https://riton-duino.blogspot.com/2021/02/tca9548a-multiplexer-le-bus-i2c.htmlOlivier