Auteur Sujet: Aide sur Réalisation d’un affichage de gare ARRIVEE DEPART  (Lu 10806 fois)

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Aide sur Réalisation d’un affichage de gare ARRIVEE DEPART
« le: décembre 09, 2021, 10:19:58 pm »
Bonsoir,

M. Bardiaux pose la question suivante sur le site éditorial : https://www.locoduino.org/spip.php?article9#forum5829

Pour la bibliothèque, j’ai fait le même programme que l’affichage départ et arrivée en gare D’aurillac, mais dans la bibliothèque de SSD 1306 il y a le Nom d’Aurillac que j’aimerais changer si possible.


En fait elle concerne le sujet https://www.locoduino.org/spip.php?article205

La bibliothèque ne cite pas Aurillac, il s'agit simplement du nom du programme Affichage_Gare_Aurillac.ino

Réponse : Il suffit de faire enregistrer sous pour changer le nom du sketch.

Nous vous suggérons de vous familiariser avec l'environnement Arduino avec les articles correspondants.
Il faut commencer par le début et donc par les articles d’initiation de Locoduino. (Toute première fois, La programmation, qu’est ce que c’est, etc …). Et bien sur ceux de Arduino.cc
Cordialement

Bochets34

  • Newbie
  • *
  • Messages: 19
    • Voir le profil
Re : Aide sur Réalisation d’un affichage de gare ARRIVEE DEPART
« Réponse #1 le: juin 23, 2022, 07:38:38 pm »
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.html

Olivier

pierrepv

  • Jr. Member
  • **
  • Messages: 50
    • Voir le profil
Re : Aide sur Réalisation d’un affichage de gare ARRIVEE DEPART
« Réponse #2 le: août 31, 2022, 06:43:59 pm »
   Bonjour,

J'ai réalisé cet afficheur sans problèmes et tout fonctionne, c'est super.

Maintenant je voudrais modifier l'affichage en changeant le nom des gares et les horaires.

Mais la logique du fonctionnement m'échappe, notamment:

- à quoi sert la colonne "V", ainsi que les chiffres qui y sont mentionnés: "2", "1, "3", "5",.
  quelle est la logique de cette numérotation, d'autant que plusieurs gares ont le même chiffre?

- J'ai l'impression que c'est un retour à la ligne, mais je ne comprends pas.

Cordialement

R�seau en N - 70m de voie - R�trosignalisation sur Arduino Mega2560 - RRTC Siver sous Windows10

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Aide sur Réalisation d’un affichage de gare ARRIVEE DEPART
« Réponse #3 le: août 31, 2022, 06:57:46 pm »
Bonsoir,

par hasard, ce ne serait pas le numéro de voie ?
Cordialement

pierrepv

  • Jr. Member
  • **
  • Messages: 50
    • Voir le profil
Re : Aide sur Réalisation d’un affichage de gare ARRIVEE DEPART
« Réponse #4 le: août 31, 2022, 07:23:45 pm »
Bonjour,

Bien Sûr, c'est le numéro de voie.

Je pensais que celà servait au retour à la ligne.

En fait je cherche là où il n'y a rien à chercher.

Merci

Cordialement
R�seau en N - 70m de voie - R�trosignalisation sur Arduino Mega2560 - RRTC Siver sous Windows10

chris_bzg

  • Sr. Member
  • ****
  • Messages: 319
    • Voir le profil
Re : Re : Aide sur Réalisation d’un affichage de gare ARRIVEE DEPART
« Réponse #5 le: septembre 01, 2022, 11:19:43 am »
...

En fait je cherche là où il n'y a rien à chercher.

Merci

Cordialement

C'est souvent comme cela : face à un problème à résoudre, on se rajoute inconsciemment des contraintes qui n'ont pas lieu d'être.
Il faut toujours essayer ce qui parait le plus simple, le plus logique.
Dans le cas présent, si cette colonne existe sur l'écran, c'est qu'elle a une raison d'être. En comparant avec un vrai affichage dans n'importe quelle gare, on en déduit que cela doit être la voie.
Si vous préférez, vous pouvez modifier l'affichage de la première ligne pour que DEPART ou ARRIVEE soit plus près de HEURE, ce qui vous laisse la place pour écrire Voie en toutes lettres et aligné à droite.

Gilbert avait présenté son travail sur le forum de Loco-Revue ; c'était un remarquable travail pédagogique car toutes les étapes étaient décrites. Je l'ai persuadé de nous faire un article où on a simplifié et élagué ce qui était décrit dans d'autres articles de notre site, par exemple comment installer une bibliothèque.

En tout cas, c'est un beau projet à réaliser. Merci à Gilbert de l'avoir partagé avec nous.  :)