Go Down

Topic: aide pour utiliser écran oled i2c 128x64 (Read 7231 times) previous topic - next topic

ArduinoFree

Bonjour


Question 1
3 fois sur 4 , quand je branche l'arduino sur mon pc, je suis obligé de re téléversé le code pour voir l'écran allumé/
Est-ce normal ?

NB : hier  j'avais 2 écrans oled qui fonctionnaient. Aujourd'hui plus qu'un et l'IDE me dit pb de connexion alors que je n'ai fait qu'intervertir les écrans.

Question 2
Comment fonctionne le numéro des port com ?

Question 3
Est-ce que les connexions arduino sont fiables ? J'ai souvent mon écran qui n'affiche rien. En le bougeant cela revient alors que je me sers que des éléments ( fils...) pour arduino

bunta951

Salut

Je viens de m'inscrire et je ferai ma présentation bien evidement.

Je rebondi sur ce topic.
J'ai reçu un Oled dans la semaine et je viens de le connecter à mon Arduino Mega.
J'ai utilisé le script de scanner qu'on trouve sur le net.
Mais dans ma fenetre serie je n'ai que le message "aucun appareil I2C trouvé"....

Si on part du principe que la connectique est bonne, est il possible que l'ecran soit HS ??

hbachetti

Quote
Si on part du principe que la connectique est bonne, est il possible que l'ecran soit HS ??
Rien n'est moins sûr. Si tu as connecté SDA SCL sur A4 A5 comme sur une UNO, cela ne marchera pas.
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

lesept

Les pins pour l'I2C pour les diverses cartes Arduino sont indiquées ici.

Quote
As a reference the table below shows where TWI pins are located on various Arduino boards.

Board   I2C / TWI pins
Uno, Ethernet   A4 (SDA), A5 (SCL)
Mega2560   20 (SDA), 21 (SCL)
Leonardo   2 (SDA), 3 (SCL)
Due   20 (SDA), 21 (SCL), SDA1, SCL1
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

bunta951

Merci
Nickel, trouvé à l'adresse 0x3C

hbachetti

Cool. Une panne m'aurait franchement étonné.
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

INCLINO

#21
May 16, 2020, 12:08 am Last Edit: May 16, 2020, 12:16 am by INCLINO
Hello,

Je galère  avec un écran oled.

J'ai réussi a :
 installer les librairies
 téléverser l' exemple SSD1306_128x64_i2c

Après ça se complique, mon écran fait défiler les animations sur quelques lignes en haut de l'écran (enfin je les devine). Le reste de l'écran est blanc avec quelques points noirs.

Quelqu'un aurait une explication ou peut être la solution à mon problème.



lesept

#22
May 16, 2020, 12:50 am Last Edit: May 16, 2020, 12:55 am by lesept
L'image



Es-tu sûr que c'est bien un 128 * 64 ?
Quel arduino utilises-tu ?
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

INCLINO


Merci pour ta réponse

Oui, c'est un 128 x 64 en tout cas c'est ce qui est donné comme caractéristique par le vendeur
J'utilise une carte UNO compatible ARDUINO R3  ATmega325

lesept

Quelle bibliothèque utilises tu ? Adafruit SSD1306 ? As-tu installé la bibliothèque Adafruit GFX ?
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

INCLINO


Oui j'utilise bien ces 2 bibliothèques.

Le début du code :

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

J'ai modifié l'adresse

if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64


Je n'ai pas d'erreur lors du téléversement.
J'en déduis que j'ai installé correctement les 2 bibliothèques.


Quand j'ouvre le moniteur série au bout de quelques secondes j'ai des valeurs de x et y qui s'affichent ce qui doit correspondre à cette partie de code

void testanimate(const uint8_t *bitmap, uint8_t w, uint8_t h) {
  int8_t f, icons[NUMFLAKES][3];

  // Initialize 'snowflake' positions
  for(f=0; f< NUMFLAKES; f++) {
    icons[f][XPOS]   = random(1 - LOGO_WIDTH, display.width());
    icons[f][YPOS]   = -LOGO_HEIGHT;
    icons[f][DELTAY] = random(1, 6);
    Serial.print(F("x: "));
    Serial.print(icons[f][XPOS], DEC);
    Serial.print(F(" y: "));
    Serial.print(icons[f][YPOS], DEC);
    Serial.print(F(" popolpopol "));
    Serial.println(icons[f][DELTAY], DEC);
  }


lesept

A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

INCLINO


Actuellement en 3.3 V, mais je l'ai certainement mis sous 5 V lors de mes multiples essais.
La tension d'alimentation peut être de 3 à 5,5 V
L'écran est peut être défectueux.
 

lesept

Essaye ce code, en réglant la console sur 115200 baud. Il va remplir l'écran de haut en bas et de droite à gauche. Il affichera dans la console la taille de l'écran (largeur, hauteur). Vérifie si ces valeurs sont correctes.

Code: [Select]
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

void setup() {
  Serial.begin(115200);

  // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3D)) { // Address 0x3D for 128x64
    Serial.println(F("SSD1306 allocation failed"));
    while (1); // Don't proceed, loop forever
  }
  Serial.println(display.width());
  Serial.println(display.height());

  for (int i = 0; i < 128; i++)
    for (int j = 0; j < 64; j++) {
      display.writePixel(i, j, 1);  // Mettre 0 si rien ne se passe
      display.display();
      delay(50);
    }
}

void loop() {
}

J'ai enlevé la première ligne, qui me semble inutile. Mais si ça ne marche pas, essaye de la remettre...
Code: [Select]
#include <SPI.h>
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

INCLINO


j'ai du rajouter SPI.h

Le téléversement se fait (j'ai mis l'adresse 0x3C)

Même image sur l'écran. Je peux lire INDUSTRIES qui défile sur les premières lignes en haut

J'ai bien 128 et 64 sur la console qui s'affichent

Par contre si je laisse l'adresse 0x3D je devrais avoir un message "SSD1306 allocation failed" sur la console.
J'ai toujours 128 et 64 qui s'affichent

J'ai supprimé la ligne  // Serial.println(display.width()); téléversé avec l'adresse 0c3D, la console m'affiche plus que 64, l'écran reste figé (plus de défilement ).
Donc mon code modifié a été transféré au moins partiellement malgré l'adresse qui ne correspond pas.

 // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3D)) { // Address 0x3D for 128x64
    Serial.println(F("SSD1306 allocation failed"));
    while (1); // Don't proceed, loop forever



Go Up