Bonjour à tous,
Je débute dans la programmation, je n'ai aucune connaissance. Soyez indulgents si ma question peut paraitre stupide.
Je suis sur un projet d'afficheurs pour auto. Pour ce projet, je souhaiteras utiliser un Arduino Uno et afficher sur 2 ou 3 écrans OLED des valeurs lues par des capteurs.
En me documentant il semble que la solution soit de passer par un multiplexer.
Mon souci est que rien ne s'affiche sur mes écrans.
Je vous pose le code. Pourriez vous me dire ce qui ne va pas ? Merci
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// Select I2C BUS
void TCA9548A(uint8_t bus)
{
Wire.beginTransmission(0x70); // TCA9548A address
Wire.write(1 << bus); // send byte to select bus
Wire.endTransmission();
Serial.print(bus);
}
void setup() {
Serial.begin(115200);
// Start I2C communication with the Multiplexer
Wire.begin();
// Init OLED display on bus number 2
TCA9548A(2);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
// Clear the buffer
display.clearDisplay();
// Init OLED display on bus number 3
TCA9548A(3);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
// Clear the buffer
display.clearDisplay();
// Write to OLED on bus number 2
TCA9548A(2);
display.clearDisplay();
display.setTextSize(8);
display.setTextColor(WHITE);
display.setCursor(45, 10);
// Display static text
display.println("1");
display.display();
// Write to OLED on bus number 3
TCA9548A(3);
display.clearDisplay();
display.setTextSize(8);
display.setTextColor(WHITE);
display.setCursor(45, 10);
// Display static text
display.println("2");
display.display();
}
void loop()
{
}
J'ai déjà réalisé les 2 programmes. Ils fonctionnent parfaitement.
J'aimerais les utiliser sur 2 écrans mais avec un seul micro contrôleur.
J'ai voulu essayer avec un programme "simple" pour tester si le multiplexeur fonctionne...et ça ne fonctionne pas malheureusement.
Mon commentaire vise plutôt à te faire comprendre une chose :
La librairie AdaFruit SSD1306 réserve une bonne quantité de mémoire pour son buffer écran. Si tu veux pouvoir contrôler deux écrans sans les effacer intégralement à chaque affichage, il te faut deux instances :
Ce qui double la quantité de mémoire allouée. Or, avec une UNO, cela ne passera pas.
Mon conseil : si tu n'a pas d'objets graphiques à afficher, utilise plutôt la librairie SSD1306Ascii.
Dernier point : utiliser une UNO dans une voiture me paraît hautement hasardeux, compte tenu des vibrations, variations énormes de température, etc. Ce sont surtout les fils DUPONT qui vont te poser problème. Dans un environnement soumis à des contraintes sévères,, la soudure est indispensable.
Merci pour ton retour. Moi aussi je ne comprends pas trop ce qui pourrait clocher.
Penses-tu que ça ne pourrait être qu'une histoire de mémoire ?
Parce que j'ai essayé en ne branchant qu'un écran et j'ai le même problème.
J'ai fait un scan adresse I2C et le scan ne trouve rien.
Je vais essayer avec ta méthode ,merci pour ton conseil.
Quant à l'utilisation d'une Uno dans une voiture, j'ai prevu de faire un montage soudé avec mon propre design de PCB, le tout dans un boîtier en impression 3D. Tu penses que c'est l'Arduino qui pourrait ne pas être fiable ?
Sur ton montage l'écran est sur le canal 7 on dirait
Au passage, si tu n'as que 2 écrans le multiplexeur n'est pas nécessaire car les écrans peuvent être configurés pour répondre sur 2 adresses possibles 0x78 et 0x7A
Oui sur canal 7 parce que depuis la publication du code, j'ai essayé plusieurs sorties et d'autres modules. Mais je modifiais le code pour pointer sur les bonnes sorties pendant les tests
Je sais pour les 2 écrans , et la résistance à changer pour passer de C à D.
Mais comme l'objectif final est d'avoir 3 écrans c'est pour ça que j'avais opté pour cette solution.
Le souci pourrait venir des Microcontrôleurs ? Parce que franchement, le code vient de chez Adafruit et le câblage ça m'étonnerait que je me sois trompé, il y a 4 fils à brancher.