Arduino Forum

International => Français => Topic started by: ArduinoFree on May 24, 2018, 05:14 pm

Title: Aide sur Ecran oled I2C 128x64 / sonde KY-013: double affichage
Post by: ArduinoFree on May 24, 2018, 05:14 pm
Bonjour

J'essaie d'afficher sur un écran oled I2C 128x64 un niveau de batterie et 2 températures ( eau et air)
Pour l'instant je teste voltmètre et température par thermo resistance (  Keyes KY-013)
j'ajouterai par la suite la sonde DS18b20 étanche.
Je ne peux rien tester physiquement car j'attends de recevoir le matériel ( La chine est loin !)

Le code me donne les erreurs dès le départ
Code: [Select]

#if (SSD1306_LCDHEIGHT != 64) #error("Height incorrect, please fix Adafruit_SSD1306.h!"); // ERREUR exit status 1  missing ninary operator before token ""#""



http://www.instructables.com/id/Arduino-OLED-Voltage-Meter/  le voltmètre (http://www.instructables.com/id/Arduino-OLED-Voltage-Meter/  le voltmètre)
http://edu.mrpigg.ca/termo.html     thermo resistor  Keyes KY-013  pour l'air (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/ (https://letmeknow.fr/blog/2016/08/10/le-capteur-de-temperature-ds18b20/)

Code: [Select]

// Essai affichage voltage, température air et eau
// http://www.instructables.com/id/Arduino-OLED-Voltage-Meter/  le voltmètre
// 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/







#define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET);
#if (SSD1306_LCDHEIGHT != 64) #error("Height incorrect, please fix Adafruit_SSD1306.h!"); // ERREUR exit status 1  missing ninary operator before token ""#""
#endif                   

#include <math.h>                  //KY-013

int sensorPin = A1;                 // KY-013 Déclaration de la broche d'entrée

// KY-013    Cette 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;
}


void loop() {

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

  display.println("A2");                      // ici on met la 2° température eau (sonde étanche)
  display.setTextSize(2);//text size                                        // mettre 2 pour 16 pixels
  displat.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); // Convertion du signal (which goes from 0 - 1023) to a voltage (0 - 5V):
  float voltage = sensorValue * (5.0 / 1023.0);         // écrit la valeur lue
  display.print(voltage);
  display.println("V");                                              // ces 2 lignes pour afficher 0,00V
  display.display();
}
/*
  AO   récupère l'information du voltage
  A1    récupère l'information de la température  Thermo résistance (modèle Keyes KY-013)
  A2   récupère l'information de la température de la sonde étanche 1m  DS18B20
*/
Title: Re: Aide sur Ecran oled I2C 128x64 / sonde KY-013: double affichage
Post by: lesept on May 24, 2018, 05:38 pm
Essaye de mettre le #error sur une autre ligne :

Code: [Select]
#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");


Sinon, plus simple :
Code: [Select]
#if (SSD1306_LCDHEIGHT != 64)
#error Height incorrect, please fix Adafruit_SSD1306.h!


Au pire, comme ton écran fait 64 pixels de haut, tu peux ôter ces lignes.
Title: Re: Aide sur Ecran oled I2C 128x64 / sonde KY-013: double affichage
Post by: ArduinoFree on May 24, 2018, 06:35 pm
Lignes supprimées

J'ai une erreur, j'ai fait  'Recopier les messages d'erreur' et j'ai tout ça  :o
On peut m'expliquer .

Code: [Select]

Arduino : 1.8.5 (Windows 10), Carte : "Arduino/Genuino Uno"

Ecran_temp_volt:68: error: stray '\302' in program

   display.println("V");                                              // ces 2 lignes pour afficher 0,00V

   ^

Ecran_temp_volt:68: error: stray '\240' in program

D:\ACER-Patrick\CLARISSE\Code bateau\Ecran_temp_volt\Ecran_temp_volt.ino: In function 'void loop()':

Ecran_temp_volt:37: error: 'display' was not declared in this scope

   display.clearDisplay();

   ^

Ecran_temp_volt:40: error: 'WHITE' was not declared in this scope

   display.setTextColor(WHITE);//text color

                        ^

Ecran_temp_volt:44: error: 'BLACK' was not declared in this scope

   display.setTextColor(BLACK, WHITE);

                        ^

Ecran_temp_volt:53: error: 'displat' was not declared in this scope

   displat.print(char(186));                  //Affichage du symbole <°>

   ^

exit status 1
stray '\302' in program

Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.




Merci




Code: [Select]

// Essai affichage voltage, température air et eau
// http://www.instructables.com/id/Arduino-OLED-Voltage-Meter/  le voltmètre
// 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/







#define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET);


#include <math.h>                  //KY-013

int sensorPin = A1;                 // KY-013 Déclaration de la broche d'entrée

// KY-013    Cette 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;
}


void loop() {

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

  display.println("A2");                      // ici on met la 2° température eau (sonde étanche)
  display.setTextSize(2);//text size                                        // mettre 2 pour 16 pixels
  displat.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); // Convertion du signal (which goes from 0 - 1023) to a voltage (0 - 5V):
  float voltage = sensorValue * (5.0 / 1023.0);         // écrit la valeur lue
  display.print(voltage);
  display.println("V");                                              // ces 2 lignes pour afficher 0,00V
  display.display();
}
/*
  AO   récupère l'information du voltage
  A1    récupère l'information de la température  Thermo résistance (modèle Keyes KY-013)
  A2   récupère l'information de la température de la sonde étanche 1m  DS18B20
*/
Title: Re: Aide sur Ecran oled I2C 128x64 / sonde KY-013: double affichage
Post by: lesept on May 24, 2018, 07:34 pm
Il arrive parfois qu'on tape es caractères bizarre au clavier sans le vouloir :  visiblement tu as un de ces caractères (invisible car assez loin dans la table ASCII, code 194 et l'IDE ne sais pas l'afficher).
Efface tout ce qui se trouve derrière le point virgule de la ligne fautive. Ça devrait compiler...
Title: Re: Aide sur Ecran oled I2C 128x64 / sonde KY-013: double affichage
Post by: ArduinoFree on May 24, 2018, 07:47 pm
Passé pour le A bizarre.

Si je comprends bien j'ai encore 3 erreurs.
Pour le I2c les couleurs à noter ne sont pas yelllow et blue ?

Code: [Select]

Arduino : 1.8.5 (Windows 10), Carte : "Arduino/Genuino Uno"

D:\ACER-Patrick\CLARISSE\Code bateau\Ecran_temp_volt\Ecran_temp_volt.ino: In function 'void loop()':

Ecran_temp_volt:37: error: 'display' was not declared in this scope

   display.clearDisplay();

   ^

Ecran_temp_volt:40: error: 'WHITE' was not declared in this scope

   display.setTextColor(WHITE);//text color

                        ^

Ecran_temp_volt:44: error: 'BLACK' was not declared in this scope

   display.setTextColor(BLACK, WHITE);

                        ^

exit status 1
'display' was not declared in this scope

Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.




Code: [Select]

// Essai affichage voltage, température air et eau
// http://www.instructables.com/id/Arduino-OLED-Voltage-Meter/  le voltmètre
// 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/







#define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET);


#include <math.h>                  //KY-013

int sensorPin = A1;                 // KY-013 Déclaration de la broche d'entrée

// KY-013    Cette 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;
}


void loop() {

  // 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 mili 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.println("A1");                     // ici on met la 1° température air ( Keyes KY-013)
  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.println("A2");                      // ici on met la 2° température eau (sonde étanche)
  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); // Convertion du signal (which goes from 0 - 1023) to a voltage (0 - 5V):
  float voltage = sensorValue * (5.0 / 1023.0);         // écrit la valeur lue
  display.print(voltage);
  display.println("V");
  display.display();
}
/*
  AO   récupère l'information du voltage
  A1    récupère l'information de la température  Thermo résistance (modèle Keyes KY-013)
  A2   récupère l'information de la température de la sonde étanche 1m  DS18B20
*/
Title: Re: Aide sur Ecran oled I2C 128x64 / sonde KY-013: double affichage
Post by: lesept on May 24, 2018, 07:53 pm
Je pense que tu n'as pas déclaré la bibliothèque qui gère l'écran. Ajoute :
Code: [Select]
#include Adafruit_SSD1306.h
en début de code. Ou alors tu peux l'importer depuis l'IDE, dans le menu gérer les bibliothèques ou importer une bibliothèque (de mémoire)
Title: Re: Aide sur Ecran oled I2C 128x64 / sonde KY-013: double affichage
Post by: ArduinoFree on May 24, 2018, 07:59 pm
Ah j'aime pas ça.
Comme je te disais par ailleurs

Ma carte n'esqt pas adaptée ?

Edit : j'ai testé les autres cartes, même pb
je n'ai que cette bibliothèque
#include <Adafruit_CircuitPlayground.h>

Code: [Select]

Arduino : 1.8.5 (Windows 10), Carte : "Arduino/Genuino Uno"

D:\ACER-Patrick\CLARISSE\Code bateau\Ecran_temp_volt\Ecran_temp_volt.ino:14:68: fatal error: Adafruit_SSD1306.h: No such file or directory

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

                                                                    ^

compilation terminated.

exit status 1
Erreur de compilation pour la carte Arduino/Genuino Uno

Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.



Title: Re: Aide sur Ecran oled I2C 128x64 / sonde KY-013: double affichage
Post by: ArduinoFree on May 24, 2018, 08:12 pm
je suis reparti sur le site du code d'origine

Il y a le lien vers la bibliothèque

Code: [Select]

https://github.com/adafruit/Adafruit_SSD1306


Mais je ne sais pas quoi prendre et surtout où l'enregistrer.
Title: Re: Aide sur Ecran oled I2C 128x64 / sonde KY-013: double affichage
Post by: lesept on May 24, 2018, 08:45 pm
Pour installer une bibli, lis les instructions ici (http://www.locoduino.org/spip.php?article71)
Title: Re: Aide sur Ecran oled I2C 128x64 / sonde KY-013: double affichage
Post by: ArduinoFree on May 24, 2018, 09:47 pm
C'est fait mais tjrs la même erreur


Code: [Select]

Arduino : 1.8.5 (Windows 10), Carte : "Arduino/Genuino Uno"

In file included from D:\ACER-Patrick\CLARISSE\Code bateau\Ecran_temp_volt\Ecran_temp_volt.ino:1:0:

D:\ACER-Patrick\Documents\Arduino\libraries\Adafruit_SSD1306-master/Adafruit_SSD1306.h:49:26: fatal error: Adafruit_GFX.h: No such file or directory

 #include <Adafruit_GFX.h>

                          ^

compilation terminated.

exit status 1
Erreur de compilation pour la carte Arduino/Genuino Uno

Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.







Code: [Select]

#include <Adafruit_SSD1306.h>      // la bibliothèque du l'écran
#include <math.h>                  //KY-013 pour température de l'air


// Essai affichage voltage, température air et eau
// http://www.instructables.com/id/Arduino-OLED-Voltage-Meter/  le voltmètre
// 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/

//la librairie de l'écran
//https://github.com/adafruit/Adafruit_SSD1306

#define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET);



int sensorPin = A1;                 // KY-013 Déclaration de la broche d'entrée

// KY-013    Cette 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;
}


void loop() {

  // 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.println("A1");                     // ici on met la 1° température air ( Keyes KY-013)
  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.println("A2");                      // ici on met la 2° température eau (sonde étanche)
  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); // Convertion du signal (which goes from 0 - 1023) to a voltage (0 - 5V):
  float voltage = sensorValue * (5.0 / 1023.0);         // écrit la valeur lue
  display.print(voltage);
  display.println("V");
  display.display();
}
/*
  AO   récupère l'information du voltage
  A1    récupère l'information de la température  Thermo résistance (modèle Keyes KY-013)
  A2   récupère l'information de la température de la sonde étanche 1m  DS18B20
*/
Title: Re: Aide sur Ecran oled I2C 128x64 / sonde KY-013: double affichage
Post by: hbachetti on May 24, 2018, 09:56 pm
Salut

Hé oui il faut aussi la librairie Adafruit_GFX (https://github.com/adafruit/Adafruit-GFX-Library).

@+
Title: Re: Aide sur Ecran oled I2C 128x64 / sonde KY-013: double affichage
Post by: ArduinoFree on May 24, 2018, 10:16 pm
Merci

J'ai vu après mais je croyais qu'elle était incluse dans l'autre à cause de son nom…. eh ben non !

encore une erreur à la ligne après delay 1 milli seconde

Ce qui m'ennuie c'est que ce n'est pas une question de logique mais purement installation de logiciel et là, je ne peux pas faire grand chose  :(

Code: [Select]

Arduino : 1.8.5 (Windows 10), Carte : "Arduino/Genuino Uno"

D:\ACER-Patrick\CLARISSE\Code bateau\Ecran_temp_volt\Ecran_temp_volt.ino: In function 'void loop()':

Ecran_temp_volt:38: error: 'display' was not declared in this scope

   display.clearDisplay();

   ^

exit status 1
'display' was not declared in this scope

Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.








Code: [Select]

#include <Adafruit_SSD1306.h>      // la bibliothèque du l'écran
#include <Adafruit_GFX.h>
#include <math.h>                  //KY-013 pour température de l'air


// Essai affichage voltage, température air et eau
// http://www.instructables.com/id/Arduino-OLED-Voltage-Meter/  le voltmètre
// 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/

//la librairie de l'écran
//https://github.com/adafruit/Adafruit_SSD1306

#define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET);



int sensorPin = A1;                 // KY-013 Déclaration de la broche d'entrée

// KY-013    Cette 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;
}


void loop() {

  // 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.println("A1");                     // ici on met la 1° température air ( Keyes KY-013)
  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.println("A2");                      // ici on met la 2° température eau (sonde étanche)
  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); // Convertion du signal (which goes from 0 - 1023) to a voltage (0 - 5V):
  float voltage = sensorValue * (5.0 / 1023.0);         // écrit la valeur lue
  display.print(voltage);
  display.println("V");
  display.display();
}
/*
  AO   récupère l'information du voltage
  A1    récupère l'information de la température  Thermo résistance (modèle Keyes KY-013)
  A2   récupère l'information de la température de la sonde étanche 1m  DS18B20
*/


Title: Re: Aide sur Ecran oled I2C 128x64 / sonde KY-013: double affichage
Post by: lesept on May 24, 2018, 10:25 pm
Ceci n'est pas une ligne
Code: [Select]
#define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET);
mais deux lignes :
Code: [Select]
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);


Au besoin, inspire toi de ce sketch (https://github.com/adafruit/Adafruit_SSD1306/blob/master/examples/ssd1306_128x64_i2c/ssd1306_128x64_i2c.ino)
Title: Re: Aide sur Ecran oled I2C 128x64 / sonde KY-013: double affichage
Post by: ArduinoFree on May 24, 2018, 11:16 pm
En fait je l'ai ton code. Il est fourni en exemple avec Addafruit.
J'ai ajouté oneWire et la partie pour la sonde sonar étanche DS18B20.

J'ai encore une erreur mais je crois qu'elle est 'minime'

Code: [Select]

Arduino : 1.8.5 (Windows 10), Carte : "Arduino/Genuino Uno"

In file included from D:\ACER-Patrick\CLARISSE\Code bateau\Ecran_temp_volt\Ecran_temp_volt.ino:6:0:

D:\ACER-Patrick\Documents\Arduino\libraries\DallasTemperature-3.8.0/DallasTemperature.h:22:21: fatal error: OneWire.h: No such file or directory

 #include <OneWire.h>

                     ^

compilation terminated.

exit status 1
Erreur de compilation pour la carte Arduino/Genuino Uno

Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.



Code: [Select]

  

#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 <Wire.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
// 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/           //A venir

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





//  L'écran OLED
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);


// Température de l'eau DS18B20
#define EAU_TEMPERATURE_PIN A2
OneWire oneWire(EAU_TEMPERATURE_PIN);
DallasTemperature sensors(oneWire);


// Température de l'eau KY-013
int sensorPin = A1;                 // KY-013 Déclaration de la broche d'entrée
// 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;
}



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("A1");                     // ici on met la 1° température air ( Keyes KY-013)
  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)(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); // Convertion du signal (which goes from 0 - 1023) to a voltage (0 - 12V):
  float voltage = sensorValue * (12.0 / 1023.0);         // écrit la valeur lue
  display.print(voltage);
  display.println("V");
  display.display();
}
/*
  AO   récupère l'information du voltage
  A1   récupère l'information de la température  Thermo résistance (modèle Keyes KY-013)
  A2   récupère l'information de la température de la sonde étanche 1m  DS18B20
*/


Title: Re: Aide sur Ecran oled I2C 128x64 / sonde KY-013: double affichage
Post by: ArduinoFree on May 25, 2018, 07:29 am
Bonjour

Je lâche pas  :)

En fait il faut OneWire.h
expliqué ici
https://translate.google.com/translate?hl=fr&sl=en&u=https://forum.mysensors.org/topic/7262/compilation-error-for-arduino-pro-or-pro-mini&prev=search (https://translate.google.com/translate?hl=fr&sl=en&u=https://forum.mysensors.org/topic/7262/compilation-error-for-arduino-pro-or-pro-mini&prev=search)

Mais je ne vois pas où récupérer la bibliothèque ?


Title: Re: Aide sur Ecran oled I2C 128x64 / sonde KY-013: double affichage
Post by: lesept on May 25, 2018, 08:01 am
Ici (https://github.com/PaulStoffregen/OneWire) mais je croyais qu'elle était incluse de base dans l'IDE... Je dois me tromper
Title: Re: Aide sur Ecran oled I2C 128x64 / sonde KY-013: double affichage
Post by: ArduinoFree on May 25, 2018, 08:13 am
Merci

Image du code d'origine pour la sonde DS18b20

Le nouveau code
Code: [Select]



#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
// 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/           //A venir

//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



//  L'écran OLED
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);


// Température de l'eau DS18B20
#define EAU_TEMPERATURE_PIN A2
OneWire oneWire(EAU_TEMPERATURE_PIN);
DallasTemperature sensors(OneWire);


// Température de l'eau KY-013
int sensorPin = A1;                 // KY-013 Déclaration de la broche d'entrée
// 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;
}



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érature Eau et Air");//affiche texte 1ere ligne 8 pixels

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

  display.println("A1");                     // ici on met la 1° température air ( Keyes KY-013)
  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)(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); // Convertion du signal (which goes from 0 - 1023) to a voltage (0 - 12V):
  float voltage = sensorValue * (12.0 / 1023.0);         // écrit la valeur lue
  display.print(voltage);
  display.println("V");
  display.display();
}
/*
  AO   récupère l'information du voltage
  A1   récupère l'information de la température  Thermo résistance (modèle Keyes KY-013)
  A2   récupère l'information de la température de la sonde étanche 1m  DS18B20
*/



Et ses erreurs   >:(
Code: [Select]

Arduino : 1.8.5 (Windows 7), Carte : "Arduino/Genuino Uno"

D:\Donnees\0_Personnel\Bateau\Ecran_temp_volt\Ecran_temp_volt.ino: In function 'void loop()':

Ecran_temp_volt:54: error: request for member 'requestTemperatures' in 'sensors', which is of non-class type 'DallasTemperature(OneWire)'

   sensors.requestTemperatures();

           ^

Ecran_temp_volt:55: error: request for member 'getTempCByIndex' in 'sensors', which is of non-class type 'DallasTemperature(OneWire)'

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

                               ^

exit status 1
request for member 'requestTemperatures' in 'sensors', which is of non-class type 'DallasTemperature(OneWire)'

Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.

Title: Re: Aide sur Ecran oled I2C 128x64 / sonde KY-013: double affichage
Post by: hbachetti on May 25, 2018, 08:19 am
Quote
Ici mais je croyais qu'elle était incluse de base dans l'IDE... Je dois me tromper
Je croyais aussi, mais non.

Dernière ligne droite :
Le constructeur de DallasTemperature réclame une adresse (&) :

Code: [Select]
DallasTemperature sensors(&oneWire);

Et il te manque un setup()

Code: [Select]
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
}


Le bout de setup pour l'afficheur :

https://github.com/adafruit/Adafruit_SSD1306/blob/master/examples/ssd1306_128x64_i2c/ssd1306_128x64_i2c.ino (https://github.com/adafruit/Adafruit_SSD1306/blob/master/examples/ssd1306_128x64_i2c/ssd1306_128x64_i2c.ino)
Title: Re: Aide sur Ecran oled I2C 128x64 / sonde KY-013: double affichage
Post by: ArduinoFree on May 25, 2018, 08:32 am
MERCIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII


( je n'arrivais pas à lire le '&'. Je croyais à une patte de mouche de mon pc)

Une dernière question pour ce post ( ... enfin je crois  :) )

Je veux donc écrire la tempéraur de la sonde étanche sur oled I2C.
Est-ce que je mets "dTempWater" ou A2 ?

Code: [Select]


  display.println("dTempWater");             // ici on met la 2° température eau (sonde étanche)(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


Ah ben non, une autre question
Ici j'ai modifié le code d'origine qui notait 5 volt par 12v, qui est la valeur de la batterie à pleine charge.
La logique est bonne ?
Pleine charge = 1023 dpnc = 12 ?

Code: [Select]

// pour le voltage de la batterie
  int sensorValue = analogRead(A0); // Conversion du signal (which goes from 0 - 1023) to a voltage (0 - 12V):
  float voltage = sensorValue * (12.0 / 1023.0);         // écrit la valeur lue
  display.print(voltage);
  display.println("V");
  display.display();





Code: [Select]



#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
// 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/           //A venir

//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



//  L'écran OLED
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);


// Température de l'eau DS18B20
#define EAU_TEMPERATURE_PIN A2
OneWire oneWire(EAU_TEMPERATURE_PIN);
DallasTemperature sensors(&oneWire);


// Température de l'eau KY-013
int sensorPin = A1;                 // KY-013 Déclaration de la broche d'entrée
// 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;
}

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érature Eau et Air");//affiche texte 1ere ligne 8 pixels

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

  display.println("A1");                     // ici on met la 1° température air ( Keyes KY-013)
  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)(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 - 12V):
  float voltage = sensorValue * (12.0 / 1023.0);         // écrit la valeur lue
  display.print(voltage);
  display.println("V");
  display.display();
}
/*
  AO   récupère l'information du voltage
  A1   récupère l'information de la température  Thermo résistance (modèle Keyes KY-013)
  A2   récupère l'information de la température de la sonde étanche 1m  DS18B20
*/
Title: Re: Aide sur Ecran oled I2C 128x64 / sonde KY-013: double affichage
Post by: lesept on May 25, 2018, 09:01 am
Quand tu écris
Code: [Select]
display.println("dTempWater");avec des guillemets, tu affiches un texte, pas une valeur numérique. Pour afficher la valeur d'une variable, il faut ôter les guillemets :
Code: [Select]
display.println(dTempWater);Après, il faut que la variable que tu affiches corresponde bien à ton besoin.

En général, les noms tels que A0, A1 sont réservés à des numéros de broches, donc tu peux les afficher si tu veux mais ils ne te donneront pas la valeur mesurée sur cette broche, c'est clair. Donc pour afficher la température, il faut afficher la variable qui contient cette température.

Pour la mesure de tension, c'est bon. Je ne suis pas un pro des batteries, mais tu devrais mesurer la vraie valeur de tension délivrée par ta batterie à pleine charge, ce serait plus précis que de mettre 12 par défaut.

Et essuie ton écran !!! :)
Title: Re: Aide sur Ecran oled I2C 128x64 / sonde KY-013: double affichage
Post by: hbachetti on May 25, 2018, 09:08 am
Quote
Ici j'ai modifié le code d'origine qui notait 5 volt par 12v, qui est la valeur de la batterie à pleine charge.
La logique est bonne ?
Pas du tout.
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.

@+
Title: Re: Aide sur Ecran oled I2C 128x64 / sonde KY-013: double affichage
Post by: ArduinoFree on May 25, 2018, 09:13 am
Et essuie ton écran !!! :)
:)  :)  :)  :)  :)  :)


'J'espère que tu n'as pas raccordé directement le 12V à A0 ?'
           Non, pour l'instant ce n'est que de la théorie.
           j'attends toujours mes jouets  :smiley-cry:  :smiley-cry:  :smiley-cry:
Title: Re: Aide sur Ecran oled I2C 128x64 / sonde KY-013: double affichage
Post by: ArduinoFree on May 25, 2018, 09:25 am
Et encore merci à vous deux ;)
Title: Re: Aide sur Ecran oled I2C 128x64 / sonde KY-013: double affichage
Post by: ArduinoFree on May 25, 2018, 09:50 am
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.

@+

As-tu un schéma de câblage pour voir où je mets  les résistances stp ?

Merci
Title: Re: Aide sur Ecran oled I2C 128x64 / sonde KY-013: double affichage
Post by: hbachetti on May 25, 2018, 09:56 am
Facile : une simple question sur google :

arduino mesure tension pont diviseur

@+
Title: Re: Aide sur Ecran oled I2C 128x64 / sonde KY-013: double affichage
Post by: ArduinoFree on May 25, 2018, 10:01 am
Effectivement !