Oui, ces SSD1306 sur bus i2C on la même adresse, ce qui rend impossible leur coexistence sur ce bus.
Pour "contourner" ça il existe le multiplexeur de bus le TCA9458 qui te permettrai d'en avoir jusqu'à 8 avec chaque multiplexeur.
Alors je n'ai pas vraiment compris selon le tuto ces afficheurs donnent deux possibilités d'adresse et j'ai déplacé la résistance de 4,7k pour transformer une adresse de 0x3C en 0x3D.!
Si, surement. Mais as-tu bien précisé les adresses des 2 écrans dans les begin() respectifs?
Le plus simple serait que tu colles ton code dans un message.
Bon voici,
j'ai essayé toute la matinée sans succés
je met un code de travail qui présente les même symptômes que mon autre programme.
Auparavant je met mes précautions et constations.
1/ Pour chaque display (display1 et display2) j'ai mis ce que j'appelle des blocs de traitement (ils y en a en chaque section "setup" et en "loop")
2/ Bizarrement, si les blocs de traitement sont dans le même ordre par exemple Display1 avant Display2, alors Display1 est bien affiché sur l'ecran1.
2.1/ Si j'inverse dans les deux sections l'ordre Display2 avant Display1 alors display2 s'affiche sur l'écran2
2.2/ Si dans les sections "Setup" et "Loop" les blocs Display1 et Display2 ne sont pas dans le même ordre alors rien ne s'affiche.
Mes conclusions/
1/ le câblage et l'adressage des écrans Oled sont bons car je peux afficher séparément sur un écran ou l'autre.
2/ l'ordre de traitement des blocs a une influence alors même qu'ils sont semblables, seul les nominations Display1 ou Display2 sont interchangées.
Probleme de beug software?
toute aide sera la bienvenue, car étant assez novice je dois louper qlq chose
Oh la, je n'avais pas fait attention avant. La carte, c'est une UNO?
Il n'y a pas suffisamment de mémoire pour 2 écrans.
1 écran nécessite d'avoir un buffer de taille 128 * 64 /8 = 1024 octets.
Donc lorsque tu déclares un second écran il ne peut pas allouer de buffer car il n'y a plus assez de mémoire libre. begin() doit retourner False, je suppose, mais comme tu ne le testes pas tu n'en sais rien.
Il y a des librairies qui permettent de travailler sans buffer mais il n'y a alors plus de fonctions graphique, donc uniquement du texte.
Il y en a une qui permet de faire du graphique avec un buffer de petite taille mais alors le tracé se fait en plusieurs fois ce qui ralenti le rafraîchissement des écrans. Voir ici
Program size: 15264 bytes (used 47% of a 32256 byte maximum) (0,85 secs)
Minimum Memory Usage: 476 bytes (23% of a 2048 byte maximum)
Ca laisse un peu de place pour du code.
Je n'ai pas fait l'essai en vrai, en déplaçant la résistance, je n'en suis pas capable
Par contre, en croisant les adresses dans le programme, je me rends compte que les 2 écrans fonctionnent.
Le buffer n'est pas alloué à la compilation mais lorsqu'on appelle begin() dans le setup(). Donc il y a suffisamment de mémoire pour allouer le buffer du premier écran mais begin() échoue pour le second. Il suffit de tester ce que retourne begin() pour s'en convaincre.