Bonjour à tous, amis Arduiniens, j'ai commencé un projet de mesure de longueur de filament version digitale pour imprimante 3D.
(Equipé d'un encodeur rotatif et une carte SD, je souhaite afficher sur 12 écrans différents les valeurs de longueur de chaque fil.)
Sauf que j'ai un souci concernant les ssd1306.
Souci d'alimentation, tampon etc... je n'en ai aucune idée. Ils sont alimentés en 3.3v sur une Arduino Uno.
J'ai deux écrans qui affiche bien les valeurs, mais dès que je met le troisième en route, les premiers écrans n'écrivent plus que sur une seule ligne en mélangeant les valeurs... bref, fouilli...
Je vous joint des photos et mon code pour avoir votre avis.
Je sais que mon code n'est pas du tout optimisé, je suis encore un peu débutant malgré mes quelques projets réalisés.
Quelle est la résolution des écrans que tu utilises?
Tu utilises un constructeur qui est obsolète.
As-tu bien spécifié la taille de l'écran dans la librairie.
Les constructeurs suggérés maintenant indique la taille de l'écran dans la déclaration
Quelle carte utilises tu? @fdufnews a sans doute raison, la mémoire n'est pas suffisante pour trois instances de Adafruit_SSD1306.
Mais tu n'as pas besoin de trois instances, tu peux utiliser une seule instance
Absolument. Pour une application identique j'avais relevé ceci :
Avec AdaFruit :
Les variables globales utilisent 1544 octets (75%) de mémoire dynamique, ce qui laisse 504 octets pour les variables locales. Le maximum est de 2048 octets.
Avec Greiman :
Les variables globales utilisent 274 octets (13%) de mémoire dynamique, ce qui laisse 1774 octets pour les variables locales. Le maximum est de 2048 octets.
Remarque : pas de routines graphiques pour la librairie Greiman.
Bonjour et merci pour vos réponses. J'avoue être perdu,
Je suis sur une Arduino Uno, et j'utilise des 128 x 64 monté en i2c avec un TCA9548A comme vous l'avez vu pour 6 d'entre eux qui seront à l'adresse 0x70 et 6 autres sur la 0x71 sauf que je ne sais pas comment les déclarer, je pense que c'est un peu pareil que le LCD1206 : LiquidCrystal_I2C lcd(16 , 2 , 0x27); Mais là, c'est un peu du chinois pour les SSD
Je souhaitez afficher les 12 ecrans en même temps, je possède une MEGA si jamais le buffer est plus important. Quelqu'un peut m'expliquer comment ça fonctionne pour les déclarer ?
J'ai téléchargé la libraire SSD ASCII. Je trouve pas d'exemple de cette librairie, c'est normal ?
Mon programme ne compile pas, donc je me doute que ce n'est pas les bonnes déclarations puisque ce n'est plus "ADAFRUIT". Comment je peut trouver les syntaxes ?
Bonsoir a tous, oui, c'est ce que j'ai fait Kamill, je n'ai declarer qu'un seul Adafruit_SSD1306 ecran, j'ai effacé tous les numéros, lancé ma fonction displayd() pour clear a chaque passage dans la loop et a chaque changement de bus TCA. Mais au lieu de ça, seul 4 écrans se sont allumés mais avec des pixels allumés un peu partout aléatoirement. Pas d'image ni de texte. Je pense tester aussi la librairie ascii proposée maintenant que vous m'avez fourni des exemples de code. Moi j'avais cherché dans le logiciel arduino "exemple" pas sur le net.
Merci à vous Bachetti pour ça.
Mon but était vraiment de tous les allumés en même temps, vous pensez que c'est possible ?
Car dans la réalisation, une nano va gérer l'encodeur rotatif, envoyer la valeur à la UNO qui va la transmettre a l'écran sélectionné et l'enregistrer sur une SD à intervalles de 5 minutes ou plus peut-être afin de lire cette valeur et de l'envoyer à la nano à chaque démarrage ou changement de sélection dans le filament.
Sur le papier, ça a l'air de marcher.
Une idée, un discord pour m'aider plus facilement dans mon projet ?
Je cherche à m'améliorer grandement dans l'arduino, c'est devenu ma passion du soir.
Je suis preneur de vos idées afin de trouver des formations ou des cours car avant il y avait Openclassroom mais plus maintenant.
Questions câblage, l'Arduino est-il tout près des TCA9548, sinon quelle qualité de câble utilises-tu?
Quelle est la plus grande distance entre le TCA9548 et l'affichage OLED, Même remarque concernant la qualité de câble.
As-tu mis des résistances de PULL_UP sur les bus i2C "secondaires" du TCA9548, le TCA9548 n'en a pas, regardes ici page 18 figure 14.
Pour ce qui est de la qualité du câble, pour des distances plus grandes que 1 mètre, j'utilise du câble pour installations téléphoniques U72 4 fils, il est torsadé. Ca se trouve facilement dans les GSB.
Bonjour a tous, pour répondre a jpbbricole, le Uno se trouve à environ 70 cm du TCA du haut, et 40 cm de celui du bas.
La distance entre les TCA et les OLED les plus éloignés sont à 25 cm maxi.
Pour ce qui est des résistances sur le TCA j'ai vu que je devais en mettre mais ça m'est sorti de la tête. 4.7 OHM suffisent non puisque c'est du pull up.
Les références de cable je ne l'ai ai pas sous la main mais c'est un simple fil en monobrin.
Pour répondre a kamill, je vais tester le code que vous m'avez envoyé directement pour voir plutôt que d'utiliser celui que j'ai corrigé en me basant à vous. Mes displayd() sont enlevés dans votre partie à vous, cest peut-être ça qui foire tout chez moi.
Je testerai dès que je peut.
Pour ce qui est des Discord ou des formations, quelqu'un a une piste ?
Tout dépend si l'on parle d'un TCA9548A sous forme de chip ou de module. Normalement les résistances de PULL-UP sont présentes sur les modules, ainsi que sur les SSD1306 (en général 10K).
Je suppose 4.7 kOhms?
Pour ce qui est des distances, 70 cm avec du simple fil, ça devient limite mais doit aller. Tu verras assez vite si tu as des perturbations.
Le meilleur à faire, c'est de mettre les pull up et de démarrer les essais avec les fils les plus courts pour assurer, après mets le tout dans son contexte final avec les bonnes longueurs de ils et tu verras assez rapidement s'il y a des perturbations.
L'avantage du câble U72, c'est qu'il est torsadé ce qui permet de plus grandes longueurs.