Ecran oled i2c 128*64 , branchement pour 3 lignes d'affichage

Bonjour

Sur un écran oled i2c 128*64, je voudrais afficher la température de l’air ( KY-013)
de l’eau Ds18b20 et la tension de la batterie

Le code compile sans pb

Mon pb vient du branchement.
J’ai pris la base du code sur ce site

mais dans le code, il n’y a que le pin 8 utilisé pour l’écran
alors que l’image de branchement d’explication dis de se brancher sur le GND et les 2 places après AREF sur la droite de la carte arduino.

J’ai cherché sur le net et je ne sais pas comment brancher l’écran.
Merci

// utilisation de  A0, A5
// du  pin 8 pour l'ecran
// du  pin 2 pour l'eau DS18b20
/*
  AO   récupère l’information du voltage ( avec GND fil direct à la batteri mais avec resistance en parallèle !!
  A5   récupère l’information de la température  Thermo résistance (modèle Keyes KY-013)
  pin 2 récupère l’information de la température de la sonde étanche 1m  DS18B20
  pin 8 affichage de l'écran

    5 Volt c'est la tension de la référence de tension de l'ADC.
    J'espère que tu n'as pas raccordé directement le 12V à A0 ?
    Il faut placer un pont diviseur à deux résistances pour que la tension sur A0 soit inférieure à 12V.
*/

#include <Adafruit_SSD1306.h>      // la bibliothèque du l'écran
#include <Adafruit_GFX.h>          // la bibliothèque du l'écran

#include <math.h>                  //KY-013 pour température de l'air

#include <OneWire.h>               //DS18B20 pour température de l'eau
#include <DallasTemperature.h>     //DS18B20 pour température de l'eau


/* Essai affichage voltage, température air et eau
// http://www.instructables.com/id/Arduino-OLED-Voltage-Meter/  le voltmètre
//              A0 et GND entre les deux mettre resistance ( voir le lien)ic A0 pour le voltage
//              A0 et lié à la batterie et GND à l'autre  pôle de la batterie       A3 pour voiture bateau

// http://edu.mrpigg.ca/termo.html     thermo resistor  Keyes KY-013  pour l'air
// https://letmeknow.fr/blog/2016/08/10/le-capteur-de-temperature-ds18b20/

//les librairies de l'écran
//https://github.com/adafruit/Adafruit_SSD1306
//https://github.com/adafruit/Adafruit-GFX-Library


//les librairies de la sonde étanche DS18B20
//https://github.com/PaulStoffregen/OneWire
*/

// les branchements
//  L'écran OLED
#define OLED_RESET 8          // pin 8 (4 avant)                                       pin 3 pour voiture bateau
Adafruit_SSD1306 display(OLED_RESET);


// Température de l'eau DS18B20
#define EAU_TEMPERATURE_PIN 2 //                                                        pin 4 pour voiture bateau
OneWire oneWire(EAU_TEMPERATURE_PIN);
DallasTemperature sensors(&oneWire);


// Température de l'air KY-013
int sensorPin = A5;                 // KY-013 Déclaration de la broche d'entrée  AIR
// fonction convertit la valeur analogique lue en température en °C
double Thermistor(int RawADC)
{
  double Temp;
  Temp = log(10000.0 * ((1024.0 / RawADC - 1)));
  Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp )) * Temp );
  Temp = Temp - 273.15;            // conversion de degrés Kelvin en °C
  return Temp;                     // le nom de la variable de la températur AIR
}
///////////////////////////////////////


void setup(void)
{
  // start serial port
  Serial.begin(115200);
  Serial.println("Dallas Temperature IC Control Library Demo");

  // Start up the library
  sensors.begin();
  // INITIALISER AUSSI L'AFFICHEUR
  display.clearDisplay();
}


void loop() {

  // la température de l'eau
  sensors.requestTemperatures();
  double dTempWater = sensors.getTempCByIndex(0);  // le nom de la variable de la températur EAU

  // KY-013 le programme mesure la valeur de tension continue à la CTN et convertit le résultat en °C
  int readVal = analogRead(sensorPin);
  double temp =  Thermistor(readVal);

  delay(1);//delay time 1 milli second
  display.clearDisplay();

  display.setTextSize(1);//text size
  display.setTextColor(WHITE);//text color
  display.setCursor(0, 0);
  display.println("Niveau Batterie");//affiche texte 1ere ligne 8 pixels

  //display.setTextColor(BLACK, WHITE);
  //display.println(); // affiche une ligne noire

  display.println("A0");//define analog pin  16 pixels
  display.setTextSize(1);
  display.setTextColor(WHITE);//text color
  //*****************************

  display.setTextSize(1);//text size
  display.setTextColor(WHITE);//text color
  display.setCursor(0, 0);
  display.println("Temp. Eau et Air");//affiche texte 1ere ligne 8 pixels

  //display.setTextColor(BLACK, WHITE);
  //display.println(); // affiche une ligne noire

  display.println(temp);                       // ici on met la 1° température ( Keyes KY-013)  AIR
  display.setTextSize(2);//text size            // mettre 2 pour 16 pixels
  display.print(char(186));                     //Affichage du symbole <°>
  display.println("C");                         //Affichage du symbole <C>
  delay(500);                                   // Attente 0,5 sec pour réactualiser

  //display.setTextColor(BLACK, WHITE);
  //display.println(); // affiche une ligne noire

  display.println(dTempWater);               // ici on met la 2° température eau (sonde étanche)(pin A2)
  display.setTextSize(2);//text size         // mettre 2 pour 16 pixels
  display.print(char(186));                  //Affichage du symbole <°>
  display.println("C");                      //Affichage du symbole <C>
  delay(500);                                // Attente 0,5 sec pour réactualiser

  /*
    les lignes de l'écran
    niveau batterie         8 pixels
    ligne noire             1          9
    A0   Voltage           16         25
    Temp. Eau et Air        8         33
    ligne noire             1         34
    A1   air KY-013        16         50
    ligne noire             1         51
    A2 ou dTempWater       16         67
                 3 lignes de trop, enlever les lignes noires
  */

  // pour le voltage de la batterie
  int sensorValue = analogRead(A0); // Conversion du signal (which goes from 0 - 1023) to a voltage (0 - (V):
  float voltage = sensorValue * (5.0 / 1023.0);         // écrit la valeur lue
  display.print(voltage);
  display.println("V");
  display.display();
  /*
    5V c'est la tension de la référence de tension de l'ADC.
    J'espère que tu n'as pas raccordé directement le 12V à A0 ?
    Il faut placer un pont diviseur à deux résistances pour que la tension sur A0 soit inférieure à 12V.
  */



}

Voici un exemple :


Pour UNO :

  • OLED GND – Arduino GND

  • OLED VCC – Arduino 5V

  • OLED SCL – Arduino Uno A5

  • OLED SDA – Arduino Uno A4
    Pour MEGA:

  • OLED GND – Arduino GND

  • OLED VCC – Arduino 5V

  • OLED SCL – Arduino MEGA 2560 pin 21

  • OLED SDA – Arduino MEGA 2560 pin 20
    Bibliothèques :

Two Arduino libraries must be installed to start using the display. The SSD1306 driver library is used to initialize the display and provide low level display functions. The GFX library provides graphics functions for displaying text, drawing lines and circles, etc. Both these libraries are available from Adafruit.

Bien vérifier le type d'écran dans le fichier Adafruit_SSD1306.h de la bibli :

   #define SSD1306_128_64
//   #define SSD1306_128_32
//   #define SSD1306_96_16

ensuite, vérifie l'adresse I2C (au besoin avec un scanner), pour le begin() et teste avec un exemple de la bibliothèque

Bonjour,

Il ne faut pas utiliser A5 comme entrée analogique, car A5 est aussi le signal SCL qui est utilisé par l'écran.

On est bien décalés ;D

Merci kamill pour le A5

j’avais vu ce câblage 0.96 Inch OLED I2C Display 128 x 64 | Arduino Tutorial

Mais du coup mon code ne marche pas.
J’ai défini mon écran en 128x64.
Ça avance quand même.

Je connecte à A4 et A5 mais le reset c’est lequel ?
SCL c’est pour Souce Clear ?

Je n’ai plus qu’à finir ce code pour faire le montage de la maquette :slight_smile:

// utilisation de  A0 pour le voltage , A1 pour AIR (KY-013)
// du  pin 8 pour l'ecran ?? 2 pin A à choisir ??
// du  pin 2 pour l'eau DS18b20
/*
  AO   récupère l’information du voltage ( avec GND fil direct à la batteri mais avec resistance en parallèle !!
  A5   récupère l’information de la température  Thermo résistance (modèle Keyes KY-013)
  pin 2 récupère l’information de la température de la sonde étanche 1m  DS18B20
  pin 8 affichage de l'écran

    5 Volt c'est la tension de la référence de tension de l'ADC.
    J'espère que tu n'as pas raccordé directement le 12V à A0 ?
    Il faut placer un pont diviseur à deux résistances pour que la tension sur A0 soit inférieure à 12V.
*/

#include <Adafruit_SSD1306.h>      // la bibliothèque du l'écran
#include <Adafruit_GFX.h>          // la bibliothèque du l'écran

#include <math.h>                  //KY-013 pour température de l'air

#include <OneWire.h>               //DS18B20 pour température de l'eau
#include <DallasTemperature.h>     //DS18B20 pour température de l'eau


/* Essai affichage voltage, température air et eau
// http://www.instructables.com/id/Arduino-OLED-Voltage-Meter/  le voltmètre
//              A0 et GND entre les deux mettre resistance ( voir le lien)ici A0 pour le voltage
//              A0 et lié à la batterie et GND à l'autre  pôle de la batterie        A3 pour voiture bateau

// http://edu.mrpigg.ca/termo.html     thermo resistor  Keyes KY-013  pour l'air
// https://letmeknow.fr/blog/2016/08/10/le-capteur-de-temperature-ds18b20/

//les librairies de l'écran
//https://github.com/adafruit/Adafruit_SSD1306
//https://github.com/adafruit/Adafruit-GFX-Library


//les librairies de la sonde étanche DS18B20
//https://github.com/PaulStoffregen/OneWire
*/

// les branchements
//  L'écran OLED
#define OLED_RESET 8          // pin 8                                       pin 3 pour voiture bateau
Adafruit_SSD1306 display(OLED_RESET);

//définition de la taille de l'écran
   #define SSD1306_128_64

// Température de l'eau DS18B20
#define EAU_TEMPERATURE_PIN 2 //                                                        pin 4 pour voiture bateau
OneWire oneWire(EAU_TEMPERATURE_PIN);
DallasTemperature sensors(&oneWire);


// Température de l'air KY-013
int sensorPin = A1;                 // KY-013 Déclaration de la broche d'entrée  AIR
// fonction convertit la valeur analogique lue en température en °C
double Thermistor(int RawADC)
{
  double Temp;
  Temp = log(10000.0 * ((1024.0 / RawADC - 1)));
  Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp )) * Temp );
  Temp = Temp - 273.15;            // conversion de degrés Kelvin en °C
  return Temp;                     // le nom de la variable de la températur AIR
}
///////////////////////////////////////


void setup(void)
{
  // start serial port
  Serial.begin(115200);
  Serial.println("Dallas Temperature IC Control Library Demo");

  // Start up the library
  sensors.begin();
  // INITIALISER AUSSI L'AFFICHEUR
  display.clearDisplay();
}


void loop() {

  // la température de l'eau
  sensors.requestTemperatures();
  double dTempWater = sensors.getTempCByIndex(0);  // le nom de la variable de la températur EAU

  // KY-013 le programme mesure la valeur de tension continue à la CTN et convertit le résultat en °C
  int readVal = analogRead(sensorPin);
  double temp =  Thermistor(readVal);

  delay(1);//delay time 1 milli second
  display.clearDisplay();

  display.setTextSize(1);//text size
  display.setTextColor(WHITE);//text color
  display.setCursor(0, 0);
  display.println("Niveau Batterie");//affiche texte 1ere ligne 8 pixels

  //display.setTextColor(BLACK, WHITE);
  //display.println(); // affiche une ligne noire

  display.println("A0");//define analog pin  16 pixels
  display.setTextSize(1);
  display.setTextColor(WHITE);//text color
  //*****************************

  display.setTextSize(1);//text size
  display.setTextColor(WHITE);//text color
  display.setCursor(0, 0);
  display.println("Temp. Eau et Air");//affiche texte 1ere ligne 8 pixels

  //display.setTextColor(BLACK, WHITE);
  //display.println(); // affiche une ligne noire

  display.println(temp);                       // ici on met la 1° température ( Keyes KY-013)  AIR
  display.setTextSize(2);//text size            // mettre 2 pour 16 pixels
  display.print(char(186));                     //Affichage du symbole <°>
  display.println("C");                         //Affichage du symbole <C>
  delay(500);                                   // Attente 0,5 sec pour réactualiser

  //display.setTextColor(BLACK, WHITE);
  //display.println(); // affiche une ligne noire

  display.println(dTempWater);               // ici on met la 2° température eau (sonde étanche)(pin A2)
  display.setTextSize(2);//text size         // mettre 2 pour 16 pixels
  display.print(char(186));                  //Affichage du symbole <°>
  display.println("C");                      //Affichage du symbole <C>
  delay(500);                                // Attente 0,5 sec pour réactualiser

  /*
    les lignes de l'écran
    niveau batterie         8 pixels
    ligne noire             1          9
    A0   Voltage           16         25
    Temp. Eau et Air        8         33
    ligne noire             1         34
    A1   air KY-013        16         50
    ligne noire             1         51
    A2 ou dTempWater       16         67
                 3 lignes de trop, enlever les lignes noires
  */

  // pour le voltage de la batterie
  int sensorValue = analogRead(A0); // Conversion du signal (which goes from 0 - 1023) to a voltage (0 - (V):
  float voltage = sensorValue * (5.0 / 1023.0);         // écrit la valeur lue
  display.print(voltage);
  display.println("V");
  display.display();
  /*
    5V c'est la tension de la référence de tension de l'ADC.
    J'espère que tu n'as pas raccordé directement le 12V à A0 ?
    Il faut placer un pont diviseur à deux résistances pour que la tension sur A0 soit inférieure à 12V.
  */

}

SCL = Signal CLock
Teste un exemple de la bibliothèque avant de te lancer dans ton propre code : tu élimines une source d'erreur (toi même en l'occurence :slight_smile: )

peux pas tester :confused:

Pas de matos :confused: :confused: :confused: :confused:

Je suis bloqué à la théorie

a force de chercher, j’ en suis là.

Branchement sur analogique A4 et A5 ( même chose sur pleins de sites)
et la ligne ci-dessous reviendrait à un pin ‘virtuel’ sans branchement

#define OLED_RESET 8                                               
Adafruit_SSD1306 display(OLED_RESET);

Et du coup , mon code est peut-être bon ?! :slight_smile:

/* utilisation de  A0 pour le voltage 
             A1 pour AIR (KY-013)
             des A4 et A5 pour l'écran
             du  pin 2 pour l'eau DS18b20

  AO   récupère l’information du voltage avec GND fil direct à la batterie mais avec resistance en parallèle !!
  A1   récupère l’information de la température  Thermo résistance (modèle Keyes KY-013)
  pin 2 récupère l’information de la température de la sonde étanche 1m  DS18B20
 A4 et A5 affichage de l'écran

    "5 Volt c'est la tension de la référence de tension de l'ADC.
    J'espère que tu n'as pas raccordé directement le 12V à A0 ?
    Il faut placer un pont diviseur à deux résistances pour que la tension sur A0 soit inférieure à 12V".
*/

#include <Adafruit_SSD1306.h>      // la bibliothèque du l'écran
#include <Adafruit_GFX.h>          // la bibliothèque du l'écran

#include <math.h>                  //KY-013 pour température de l'air

#include <OneWire.h>               //DS18B20 pour température de l'eau
#include <DallasTemperature.h>     //DS18B20 pour température de l'eau


/* Essai affichage voltage, température air et eau
// http://www.instructables.com/id/Arduino-OLED-Voltage-Meter/  le voltmètre
//              A0 et GND entre les deux mettre resistance ( voir le lien)ici A0 pour le voltage
//              A0 et lié à la batterie et GND à l'autre  pôle de la batterie        A3 pour voiture bateau

// http://edu.mrpigg.ca/termo.html     thermo resistor  Keyes KY-013  pour l'air
// https://letmeknow.fr/blog/2016/08/10/le-capteur-de-temperature-ds18b20/

//les librairies de l'écran
//https://github.com/adafruit/Adafruit_SSD1306
//https://github.com/adafruit/Adafruit-GFX-Library


//les librairies de la sonde étanche DS18B20
//https://github.com/PaulStoffregen/OneWire
*/

// les branchements
//  L'écran OLED
#define OLED_RESET 8          // pin 8 'virtuel' ?                                  
Adafruit_SSD1306 display(OLED_RESET);

//définition de la taille de l'écran
#define SSD1306_128_64 // à modifier dans le dossier Liraries / dossier Adafruit_SSD1306.h avec 
                          // éditeur de texte  #define SSD1306_128_64 et pour les autres définitions d'écran
                          // écrire //#define SSD1306_128_32  #define SSD1306_128_16

// Température de l'eau DS18B20
#define EAU_TEMPERATURE_PIN 2 //                                                        pin 4 pour voiture bateau
OneWire oneWire(EAU_TEMPERATURE_PIN);
DallasTemperature sensors(&oneWire);


// Température de l'air KY-013
int sensorPin = A1;                 // KY-013 Déclaration de la broche d'entrée  AIR
// fonction convertit la valeur analogique lue en température en °C
double Thermistor(int RawADC)
{
  double Temp;
  Temp = log(10000.0 * ((1024.0 / RawADC - 1)));
  Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp )) * Temp );
  Temp = Temp - 273.15;            // conversion de degrés Kelvin en °C
  return Temp;                     // le nom de la variable de la températur AIR
}
///////////////////////////////////////


void setup(void)
{
  // start serial port
  Serial.begin(115200);
  Serial.println("Dallas Temperature IC Control Library Demo");

  // Start up the library
  sensors.begin();
  // INITIALISER AUSSI L'AFFICHEUR
  display.clearDisplay();
}


void loop() {

  // la température de l'eau
  sensors.requestTemperatures();
  double dTempWater = sensors.getTempCByIndex(0);  // le nom de la variable de la températur EAU

  // KY-013 le programme mesure la valeur de tension continue à la CTN et convertit le résultat en °C
  int readVal = analogRead(sensorPin);
  double temp =  Thermistor(readVal);

  delay(1);//delay time 1 milli second
  display.clearDisplay();

  display.setTextSize(1);//text size
  display.setTextColor(WHITE);//text color
  display.setCursor(0, 0);
  display.println("Niveau Batterie");//affiche texte 1ere ligne 8 pixels

  //display.setTextColor(BLACK, WHITE);
  //display.println(); // affiche une ligne noire

  display.println("A0");//define analog pin  16 pixels
  display.setTextSize(1);
  display.setTextColor(WHITE);//text color
  //*****************************

  display.setTextSize(1);//text size
  display.setTextColor(WHITE);//text color
  display.setCursor(0, 0);
  display.println("Temp. Eau et Air");//affiche texte 1ere ligne 8 pixels

  //display.setTextColor(BLACK, WHITE);
  //display.println(); // affiche une ligne noire

  display.println(temp);                       // ici on met la 1° température ( Keyes KY-013)  AIR
  display.setTextSize(2);//text size            // mettre 2 pour 16 pixels
  display.print(char(186));                     //Affichage du symbole <°>
  display.println("C");                         //Affichage du symbole <C>
  delay(500);                                   // Attente 0,5 sec pour réactualiser

  //display.setTextColor(BLACK, WHITE);
  //display.println(); // affiche une ligne noire

  display.println(dTempWater);               // ici on met la 2° température eau (sonde étanche)(pin A2)
  display.setTextSize(2);//text size         // mettre 2 pour 16 pixels
  display.print(char(186));                  //Affichage du symbole <°>
  display.println("C");                      //Affichage du symbole <C>
  delay(500);                                // Attente 0,5 sec pour réactualiser

  /*
    les lignes de l'écran
    niveau batterie         8 pixels
    ligne noire             1          9
    A0   Voltage           16         25
    Temp. Eau et Air        8         33
    ligne noire             1         34
    A1   air KY-013        16         50
    ligne noire             1         51
    A2 ou dTempWater       16         67
                 3 lignes de trop, enlever les lignes noires
  */

  // pour le voltage de la batterie
  int sensorValue = analogRead(A0); // Conversion du signal (which goes from 0 - 1023) to a voltage (0 - (V):
  float voltage = sensorValue * (5.0 / 1023.0);         // écrit la valeur lue
  display.print(voltage);
  display.println("V");
  display.display();
  /*
    5V c'est la tension de la référence de tension de l'ADC.
    J'espère que tu n'as pas raccordé directement le 12V à A0 ?
    Il faut placer un pont diviseur à deux résistances pour que la tension sur A0 soit inférieure à 12V.
  */



}

J’ai créée un nouveau code basé sur l’exemple donné sur le site cité plus haut
https://startingelectronics.org/tutorials/arduino/modules/OLED-128x64-I2C-display/

code de base

/*-------------------------------------------------------------------------------------
 * Template file for 4-pin I2C OLED display, e.g. from Geekcreit
 * using Adafruit SSD1306 driver and GFX libraries.
 * Tutorial:
 * https://startingelectronics.org/tutorials/arduino/modules/OLED-128x64-I2C-display/
 *-------------------------------------------------------------------------------------*/
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>

// OLED display TWI address
#define OLED_ADDR   0x3C

// reset pin not used on 4-pin OLED module
Adafruit_SSD1306 display(-1);  // -1 = no reset pin

// 128 x 64 pixel display
#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif

void setup() {
  // initialize and clear display
  display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
  display.clearDisplay();
  display.display();

  
}

void loop() {
  // put your main code here, to run repeatedly:

}

code modifié

/* utilisation de  A0 pour le voltage
             A1 pour AIR (KY-013)
             des A4 et A5 pour l'écran
             du  pin 2 pour l'eau DS18b20

  AO   récupère l’information du voltage avec GND fil direct à la batterie mais avec resistance en parallèle !!
  A1   récupère l’information de la température  Thermo résistance (modèle Keyes KY-013)
  pin 2 récupère l’information de la température de la sonde étanche 1m  DS18B20
  A4 et A5 affichage de l'écran

    "5 Volt c'est la tension de la référence de tension de l'ADC.
    J'espère que tu n'as pas raccordé directement le 12V à A0 ?
    Il faut placer un pont diviseur à deux résistances pour que la tension sur A0 soit inférieure à 12V".
*/
#include <math.h>                  //KY-013 pour température de l'air
#include <OneWire.h>               //DS18B20 pour température de l'eau
#include <DallasTemperature.h>     //DS18B20 pour température de l'eau
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>


/* Essai affichage voltage, température air et eau
  // http://www.instructables.com/id/Arduino-OLED-Voltage-Meter/  le voltmètre
  //              A0 et GND entre les deux mettre resistance ( voir le lien)ici A0 pour le voltage
  //              A0 et lié à la batterie et GND à l'autre  pôle de la batterie        A3 pour voiture bateau

  // http://edu.mrpigg.ca/termo.html     thermo resistor  Keyes KY-013  pour l'air
  // https://letmeknow.fr/blog/2016/08/10/le-capteur-de-temperature-ds18b20/

  //les librairies de l'écran
  //https://github.com/adafruit/Adafruit_SSD1306
  //https://github.com/adafruit/Adafruit-GFX-Library


  //les librairies de la sonde étanche DS18B20
  //https://github.com/PaulStoffregen/OneWire
*/

// les branchements

//  L'écran OLED
#define OLED_RESET 8          // pin 8 'virtuel' ?                                  
Adafruit_SSD1306 display(OLED_RESET);

//définition de la taille de l'écran
#define SSD1306_128_64 // à modifier dans le dossier Liraries / dossier Adafruit_SSD1306.h avec 
// éditeur de texte  #define SSD1306_128_64 et pour les autres définitions d'écran
// écrire //#define SSD1306_128_32  #define SSD1306_128_16

// Température de l'eau DS18B20
#define EAU_TEMPERATURE_PIN 2 //                                                        pin 4 pour voiture bateau
OneWire oneWire(EAU_TEMPERATURE_PIN);
DallasTemperature sensors(&oneWire);






/*-------------------------------------------------------------------------------------
   Template file for 4-pin I2C OLED display, e.g. from Geekcreit
   using Adafruit SSD1306 driver and GFX libraries.
   Tutorial:
   https://startingelectronics.org/tutorials/arduino/modules/OLED-128x64-I2C-display/
  -------------------------------------------------------------------------------------*/
// OLED display TWI address
#define OLED_ADDR   0x3C

//------------------------------------------
//------------------------------------------

// Déclaration et calcul de Température de l'air KY-013
int sensorPin = A1;                 // KY-013 Déclaration de la broche d'entrée  AIR
// fonction convertit la valeur analogique lue en température en °C
double Thermistor(int RawADC)
{
  double Temp;
  Temp = log(10000.0 * ((1024.0 / RawADC - 1)));
  Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp )) * Temp );
  Temp = Temp - 273.15;            // conversion de degrés Kelvin en °C
  return Temp;                     // le nom de la variable de la températur AIR
}


void setup() {
  // initialize and clear display
  display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
  display.clearDisplay();
  display.display();

  // start serial port
  Serial.begin(115200);
  Serial.println("Dallas Temperature IC Control Library Demo");

  // Start up the library
  sensors.begin();
}


void loop() {

  // Déclaration  de calcul de la température de l'eau
  sensors.requestTemperatures();
  double dTempWater = sensors.getTempCByIndex(0);  // le nom de la variable de la températur EAU
  // mesure de la valeur de tension continue à la CTN et convertion en °C
  int readVal = analogRead(2);
  double temp =  Thermistor(readVal);
  //------------------------------------------
  //------------------------------------------


  //Affichage sur l'écran
  delay(1);//delay time 1 milli second
  display.clearDisplay();

  display.setTextSize(1);//text size
  display.setTextColor(WHITE);//text color
  display.setCursor(0, 0);
  display.println("Niveau Batterie");//affiche texte 1ere ligne 8 pixels
  //*****************************
  //display.setTextColor(BLACK, WHITE);
  //display.println(); // affiche une ligne noire
  //*****************************
  display.println("A0");//define analog pin  16 pixels
  display.setTextSize(1);
  display.setTextColor(WHITE);//text color
  //*****************************
  display.setTextSize(1);//text size
  display.setTextColor(WHITE);//text color
  display.setCursor(0, 0);
  display.println("Temp. Eau et Air");//affiche texte 1ere ligne 8 pixels
  //*****************************
  //display.setTextColor(BLACK, WHITE);
  //display.println(); // affiche une ligne noire
  //*****************************
  display.println(temp);                       // ici on met la 1° température ( Keyes KY-013)  AIR
  display.setTextSize(2);//text size            // mettre 2 pour 16 pixels
  display.print(char(186));                     //Affichage du symbole <°>
  display.println("C");                         //Affichage du symbole <C>
  delay(500);                                   // Attente 0,5 sec pour réactualiser
  //*****************************
  //display.setTextColor(BLACK, WHITE);
  //display.println(); // affiche une ligne noire
  //*****************************
  display.println(dTempWater);               // ici on met la 2° température eau (sonde étanche)(pin A2)
  display.setTextSize(2);//text size         // mettre 2 pour 16 pixels
  display.print(char(186));                  //Affichage du symbole <°>
  display.println("C");                      //Affichage du symbole <C>
  delay(500);                                // Attente 0,5 sec pour réactualiser

  // pour le voltage de la batterie
  int sensorValue = analogRead(A0); // Conversion du signal (which goes from 0 - 1023) to a voltage (0 - (V):
  float voltage = sensorValue * (5.0 / 1023.0);         // écrit la valeur lue
  display.print(voltage);
  display.println("V");
  display.display();
  /*
    les lignes de l'écran
    niveau batterie         8 pixels
    ligne noire             1          9
    A0   Voltage           16         25
    Temp. Eau et Air        8         33
    ligne noire             1         34
    A1   air KY-013        16         50
    ligne noire             1         51
    A2 ou dTempWater       16         67
                 3 lignes de trop, enlever les lignes noires
  */

}

st-ce que vous remarquez une erreur ?
Merci

Tu es sûr de ça ?
display.println("A0");//define analog pin 16 pixels

Sinon, je pense que tu devras optimiser ton affichage "sur le terrain" c'est à dire lorsque tu auras ton écran : positionner les textes, les nombres, etc. Surtout si tu utilises plusieurs tailles de caractères...
Mais tu découvriras ça lorsque tu auras l'écran !

Sûr, non mais cela vient d’ici http://www.instructables.com/id/Arduino-OLED-Voltage-Meter/
dans le texte il est bien écrit

et l’image est celle du lien.

PS : comment tu fais pour afficher l’image dans le msg stp ?

Pour afficher une image, c’est un peu compliqué : si l’image est déjà sur internet, tu trouves son adresse (clic droit sur l’image, copier l’adresse de l’image) et tu cliques sur le rectangle bleu clair dans les commandes du forum (à côté de </>) qui ouvre un fenêtre pour copie l’adresse.

Si c’est un fichier que tu veux uploader toi même, il faut la mettre en attachement, comme tu le fais maintenant et publier ton message. Tu affiches le message et tu cliques droit sur le lien vers l’image → copier l’adresse de l’image. Ensuite c’est pareil.

Je crois que c’est expliqué dans l’un des messages épinglés, que tu devrais avoir lus…

test
6f954495d1474bba72377aa8ecfba9d3432c0b31.jpg

merci

:slight_smile: