![]() |
Code OLED 128*64 - Version imprimable +- F1ATB forum (https://f1atb.fr/forum_f1atb) +-- Forum : Forum de F1ATB (https://f1atb.fr/forum_f1atb/forum-3.html) +--- Forum : Routeur Photovoltaïque (https://f1atb.fr/forum_f1atb/forum-4.html) +--- Sujet : Code OLED 128*64 (/thread-140.html) |
RE: Code OLED 128*64 - DanielJ - 11-04-2025 Rebonjour, J'ai retravaillé sur ce code. En effet, j'ai constaté qu'il y avait des effets de scintillements et de clignotements de l'affichage qui sont assez pénibles à la longue. J'ai donc modifié le code source pour éviter ce désagrément (j'ai créé un buffer secondaire), et le résultat est désormais bien meilleur en termes de qualité et de confort d'affichage (il n'y a plus aucun flicker), avec une mise à jour à la seconde. Vous trouverez dans le fichier zip joint le fichier OLED.ino modifié en conséquence, avec la même procédure pour l'intégrer aux sources du routeur solaire. RE: Code OLED 128*64 - kymcoman - 12-04-2025 Merci Daniel, super travail ! Petite question : que dois-je changer dans le code pour que l'écran reste toujours allumé ? RE: Code OLED 128*64 - DanielJ - 12-04-2025 (12-04-2025, 08:39 AM)kymcoman a écrit : Merci Daniel, super travail ! Bonjour, Merci ! ![]() Pour rendre l'affichage permanent, il suffit de commenter ou supprimer ces lignes dans le code : [...] unsigned long now = millis(); //if (millis()-millis_start < TIMER_PAGE) { if (now - millis_start >= 1000) { sprite.fillScreen(0x0000); // Efface le buffer (l'écran) Ecran_permanent(); if (Selecteur_page == 1) { Ecran1(); } else { Ecran2(); } } // } // else { // Selecteur_page = 0; // On repart sur la page principale si appui sur le BP après l'extinction de l'écran // sprite.fillScreen(0x0000); // Efface le buffer (l'écran) // } sprite.pushSprite(0, 0); // Publie le buffer sur l'écran sans aucun scintillement [...] Mais avec un écran OLED, je ne conseille toutefois pas de laisser un affichage permanent en raison du fait qu'il risque d'y avoir à long terme un effet de marquage indélébile. Aussi il y a deux solutions pour l'éviter : - soit augmenter le temps d'affichage : il suffit de jouer avec la constante TIMER_PAGE défini dans le code à 20000ms (20 secondes) et qu'on peut très bien augmenter (ou diminuer). - soit définir le paramètre oled.setBrightness à la valeur 0 : oled.setBrightness(0); ce qui aura pour effet de diminuer la luminosité de l'écran quasiment de moitié, et donc plus adapté à un affichage permanent. RE: Code OLED 128*64 - kymcoman - 12-04-2025 Je me suis mal exprimé : Avec les nouvelles modifications, l’écran reste bien allumé, mais les pages ne défilent plus automatiquement. Que dois-je corriger pour réactiver le défilement automatique tout en gardant l’écran allumé en permanence ? Merci ! RE: Code OLED 128*64 - DanielJ - 12-04-2025 (12-04-2025, 11:09 AM)kymcoman a écrit : Je me suis mal exprimé : D'accord... Raphaël a en effet prévu un switch automatique dans la gestion de ses écrans, ce que de mon côté je n'ai pas intégré faute d'en avoir besoin (toutes les infos importantes sont sur la page 1). Il suffit dans ce cas d'effectuer cette modification (ne pas tenir compte de ce que j'ai dit plus haut pour rendre l'affichage permanent) : Remplacer : else { Selecteur_page = 0; // On repart sur la page principale si appui sur le BP après l'extinction de l'écran sprite.fillScreen(0x0000); // Efface le buffer (l'écran) } Par : else { Selecteur_page = !Selecteur_page; millis_start = millis(); } Bien entendu, dans ce cas le GPIO15 n'est plus utile et on peut effacer/commenter ces lignes : [...] #define PAGE_OLED 15//-- Patch01 -- : PIN - IN : changement page d'écran d'informations [...] //Initialisation du bouton poussoir (affectation GPIO, mode de fonctionnement) pinMode (PAGE_OLED, INPUT_PULLUP); //Initialisation de l'interruption (GPIO affecté au BP, pgm à éxecuter, activé sur front descendant) attachInterrupt(PAGE_OLED, page_change_ISR, FALLING); [...] void page_change_ISR() { // Code éxecuté à chaque appui sur le bouton poussoir de changement de page via une IRQ. Selecteur_page = !Selecteur_page; millis_start = millis(); } [...] RE: Code OLED 128*64 - kymcoman - 12-04-2025 Super génial, mille mercis ! Voilà, il me reste une dernière requête : Sur la photo, on voit que la surbrillance TR est décalée de 2 pixels vers le bas. Comment puis-je corriger cela ? Ou bien remodèle cette surbrillance pour qu'elle épouse correctement le TR, sans déborder sur la ligne située en dessous. RE: Code OLED 128*64 - DanielJ - 12-04-2025 (12-04-2025, 02:41 PM)kymcoman a écrit : Super génial, mille mercis ! Ah oui tient, c'est vrai ! Je ne l'avais jamais remarqué vu que je ne suis jamais dans ce mode. C'est un petit bug dans le code, il faut le rectifier comme suit : if(Mode!=4){ sprite.drawString("TR",115,44); } else { sprite.fillRect(114, 44, 13, 9, TFT_WHITE); sprite.setTextColor(TFT_BLACK, TFT_WHITE); sprite.drawString("TR",115,45); RE: Code OLED 128*64 - kymcoman - 12-04-2025 Merci Daniel, tu gères ! Je suis au top. ![]() RE: Code OLED 128*64 - kymcoman - 14-04-2025 (26-06-2024, 06:33 PM)DanielJ a écrit :(26-06-2024, 05:37 PM)Raphael591 a écrit : Merci André ! Bonjour, Je voudrais, dans la partie Écran 2, afficher la puissance qui se cumule routée vers le chauffe-eau (remis à zéro chaque jour) plutôt que celle injectée dans le réseau, en adaptant ce code : sprite.drawString("Puissance",0,23); int Pw = int(PuissanceS_M - PuissanceI_M); String Pwaff=String(Pw)+" Watt"; sprite.setTextSize(1); sprite.drawString(Pwaff,128-(Pwaff.length()*6),23); sprite.setTextSize(1); Merci RE: Code OLED 128*64 - Mael - 14-04-2025 Bonjour, apres avoir branché et parametré l'écran voici mon affichage, j'ai un triac et une mesure UxIx2, je suis en version 14.22 j'arrive pas a avoir d'autre affichage. faut il modifier autre chose? Maël |