Confirmation codages amateur ?

Bonjour, étant amateur en mode expérimentation mon objectif est de lire un capteur dht22 sur un bouclier à boutons 1602, j’ai trouvé des codes (merci aux partages) puis j’ai essayé de modifier pour pouvoir faire le montage et avoir un résultat,

bien que j’ai pratiquement rien modifié mise à part dht22 au lieu du 11 et les valeurs boutons (repris d’un commentaire sur le site d’achat). C’est le début qui me fait “psicoter” trop de Dht je dois sûrement supprimé un morceau

Pardonner mon amateurisme pouvez vous jetez un oeil et m’éclairer ? merci d’avance.

1 #include "DHT.h"//DHT sensor Library
2 #include <LiquidCrystal.h>//LCD Library 
3 #define DHTPIN 3 //Define sensor pin(pin 3)
4 #define DHTTYPE DHT22 //What sensor use
5 DHT dht(DHTPIN, DHTTYPE); //Create sensor object
6 DHT22 dht22(3); 
7 LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //Create lcd object using this pins 8,9,4,5,6,7
8 // define some values used by the panel and buttons
9   int lcd_key = 0;
10 int adc_key_in = 0;
11 #define btnRIGHT 0
12 #define btnUP 1
13 #define btnDOWN 2
14 #define btnLEFT 3
15 #define btnSELECT 4
16 #define btnNONE 5
17 long ext_h = 0;
18 long ext_m = 0;
19 // read the buttons
20 int read_LCD_buttons()

bonjour,
avec un lien du shield ca serait bien, mais déjà si ce sont les pin en define
2 fois pin 3

 #define DHTPIN 3 //Define sensor pin(pin 3)
#define btnLEFT 3

Merci pour l'info İnfobarquee, j'envoie le descriptif du produit fait par le vendeur :
Ceci est une base de 16 caracteres par 2 lignes d'affichage noir sur vert.
Utilise l'interface HD44780 chipset parallele extremement frequente.
Retroeclairage bleu avec des mots blancs.
Utilise 4 Bit Arduino Bibliotheque LCD

Finalement je garde les 2 lignes indiqué
[#define DHTPIN 3 //Define sensor pin(pin 3)
#define btnLEFT 3 ] le reste je supprime ?

je dirais que le descriptif, on s’en tape, donne le lien du shield.

d’après ton code, la pin 3 est utilisée pour le dht ET un des boutons, d’après toi, ca peut fonctionner?

Excuse moi Infobarquee, voici le lien du shield: https://www.amazon.fr/dp/B00OPO2W6M/ref=sxbs_sxwds-stvp_1?pf_rd_m=A1X6FK5RDHNB96&pf_rd_p=1302047627&pd_rd_wg=063nI&pf_rd_r=VQ79042BJFDVDBK8ZBDZ&pf_rd_s=desktop-sx-bottom-slot&pf_rd_t=301&pd_rd_i=B00OPO2W6M&pd_rd_w=abHsf&pf_rd_i=Shield+1602&pd_rd_r=0c72d3e7-ab73-11e7-8227-fba8fcf8cf6e&ie=UTF8&qid=1507389627&sr=1

Le novice que je suis même pas capté le pin3 en 2x, je modifie ça directement, heureusement que tu est là Merci vraiment.

Voici le lien du tuto que je voulais testé :

transforme

#define DHTPIN 3 //Define sensor pin(pin 3)

en

#define DHTPIN A5

connecte le dht sur les broches A5
ca devrait le faire

petit programme que je m’étais fait pour l’astro avec un dht22, un BMP085

#include <DHT.h>
#include <Wire.h>
#include <Adafruit_BMP085.h>  // Adafruit BMP085 libary
#include "LCD4884.h"
#include "DFrobot_bmp.h"
#include "DFrobot_chinese.h"

Adafruit_BMP085 bmp;
#define DHTTYPE DHT22  
#define DHTPIN A1
DHT dht(DHTPIN, DHTTYPE);
#define DEBOUNCE_MAX 15
#define DEBOUNCE_ON  10
#define DEBOUNCE_OFF 3 

#define NUM_KEYS 5

#define NUM_MENU_ITEM	5

// joystick number
#define LEFT_KEY 0
#define CENTER_KEY 1
#define DOWN_KEY 2
#define RIGHT_KEY 3
#define UP_KEY 4

// menu starting points

#define MENU_X	10		// 0-83
#define MENU_Y	1		// 0-5


int  adc_key_val[5] ={
  50, 200, 400, 600, 800 };

// debounce counters
byte button_count[NUM_KEYS];
// button status - pressed/released
byte button_status[NUM_KEYS];
// button on flags for user program 
byte button_flag[NUM_KEYS];

// menu definition
char menu_items[NUM_MENU_ITEM][12]={
  "TEMPERATURE",
  "HYGROMETRIE",
  "ALTITUDE",
  "PRESSION",
  "TOUT"	
};

void (*menu_funcs[NUM_MENU_ITEM])(void) = {
  temperature,
  hygrometrie,
  altitude,
  pression,
  tout
};

char current_menu_item;

void setup()
{
  Serial.begin(9600);
  Serial.println("DHT TEST PROGRAM ");
  Serial.println();
    dht.begin();
  // Sensor init
 if (!bmp.begin()) {
  Serial.println("No valid BMP085 sensor found!");
  while (true) {}
 } 
  // setup interrupt-driven keypad arrays  
  // reset button arrays
  for(byte i=0; i<NUM_KEYS; i++){
    button_count[i]=0;
    button_status[i]=0;
    button_flag[i]=0;
  }

  // Setup timer2 -- Prescaler/256
  TCCR2A &= ~((1<<WGM21) | (1<<WGM20));
  TCCR2B &= ~(1<<WGM22);
  TCCR2B = (1<<CS22)|(1<<CS21);      

  ASSR |=(0<<AS2);

  // Use normal mode  
  TCCR2A =0;    
  //Timer2 Overflow Interrupt Enable  
  TIMSK2 |= (0<<OCIE2A);
  TCNT2=0x6;  // counting starts from 6;  
  TIMSK2 = (1<<TOIE2);    



  SREG|=1<<SREG_I;

  lcd.LCD_init();
  lcd.LCD_clear();

  //menu initialization
  init_MENU();
  current_menu_item = 0;	

  lcd.backlight(ON);//Turn on the backlight
  //lcd.backlight(OFF); // Turn off the backlight 
}

void loop()
{
  Serial.println("\n");

  float h = dht.readHumidity();
  float t = dht.readTemperature();

  Serial.print("Read sensor: ");


  Serial.print("Humidity : ");
  Serial.print(h, 2);
  Serial.println("%");

  Serial.print("Temperature : ");
  Serial.print(t, 2);
  Serial.println("C");

  Serial.print("Dew Point : ");
  Serial.print(dewPoint(t, h));
  Serial.println("C");

  Serial.print("Dew PointFast : ");
  Serial.print(dewPointFast(t,h));
  Serial.println("C");

 Serial.print("Temperature: ");
 Serial.print(bmp.readTemperature());
 Serial.print(" ");  // Here we have to cheat a little
 Serial.write(176);  // to show the "°" character
 Serial.println("C");
 Serial.print("Pression: ");
 Serial.print(bmp.readPressure());
 Serial.println(" Pa");

 Serial.print("Altitude: ");
 Serial.print(bmp.readAltitude());
 Serial.println(" meters");

  delay(2000);
    byte i;
  for(i=0; i<NUM_KEYS; i++){
    if(button_flag[i] !=0){

      button_flag[i]=0;  // reset button flag
      switch(i){

      case UP_KEY:
        // current item to normal display
        lcd.LCD_write_string(MENU_X, MENU_Y + current_menu_item, menu_items[current_menu_item], MENU_NORMAL );
        current_menu_item -=1;
        if(current_menu_item <0)  current_menu_item = NUM_MENU_ITEM -1;
        // next item to highlight display
        lcd.LCD_write_string(MENU_X, MENU_Y + current_menu_item, menu_items[current_menu_item], MENU_HIGHLIGHT );
        break;
      case DOWN_KEY:
        // current item to normal display
        lcd.LCD_write_string(MENU_X, MENU_Y + current_menu_item, menu_items[current_menu_item], MENU_NORMAL );
        current_menu_item +=1;
        if(current_menu_item >(NUM_MENU_ITEM-1))  current_menu_item = 0;
        // next item to highlight display
        lcd.LCD_write_string(MENU_X, MENU_Y + current_menu_item, menu_items[current_menu_item], MENU_HIGHLIGHT );
        break;
      case LEFT_KEY:
        init_MENU();
        current_menu_item = 0;
        break;   
      case CENTER_KEY:
        lcd.LCD_clear();
        (*menu_funcs[current_menu_item])();
        lcd.LCD_clear();
        init_MENU();
        current_menu_item = 0;           
        break;	
      }

    }
  }
}







double dewPoint(double t, double h)
{
        // (1) Saturation Vapor Pressure = ESGG(T)
        double RATIO = 373.15 / (273.15 + t);
        double RHS = -7.90298 * (RATIO - 1);
        RHS += 5.02808 * log10(RATIO);
        RHS += -1.3816e-7 * (pow(10, (11.344 * (1 - 1/RATIO ))) - 1) ;
        RHS += 8.1328e-3 * (pow(10, (-3.49149 * (RATIO - 1))) - 1) ;
        RHS += log10(1013.246);

        // factor -3 is to adjust units - Vapor Pressure SVP * humidity
        double VP = pow(10, RHS - 3) * h;

        // (2) DEWPOINT = F(Vapor Pressure)
        double T = log(VP/0.61078);   // temp var
        return (241.88 * T) / (17.558 - T);
}

// delta max = 0.6544 wrt dewPoint()
// 6.9 x faster than dewPoint()
// reference: http://en.wikipedia.org/wiki/Dew_point
double dewPointFast(double t, double h)
{
        double a = 17.271;
        double b = 237.7;
        double temp = (a * t) / (b + t) + log(h*0.01);
        double Td = (b * temp) / (a - temp);
        return Td;
}

void init_MENU(void){

  byte i;

  lcd.LCD_clear();

  lcd.LCD_write_string(MENU_X, MENU_Y, menu_items[0], MENU_HIGHLIGHT );

  for (i=1; i<NUM_MENU_ITEM; i++){
    lcd.LCD_write_string(MENU_X, MENU_Y+i, menu_items[i], MENU_NORMAL);
  }


}

// waiting for center key press
void waitfor_OKkey(){
  byte i;
  byte key = 0xFF;
  while (key!= CENTER_KEY){
    for(i=0; i<NUM_KEYS; i++){
      if(button_flag[i] !=0){
        button_flag[i]=0;  // reset button flag
        if(i== CENTER_KEY) key=CENTER_KEY;
      }
    }
  }

}

void temperature()
{
  lcd.LCD_write_string_big(10, 1, "+12.30", MENU_NORMAL);
  lcd.LCD_write_string(78, 2, "C", MENU_NORMAL);
  lcd.LCD_write_string(38, 5, "OK", MENU_HIGHLIGHT );
  waitfor_OKkey();
}

void hygrometrie(){
  char i,j;
  for(i=0; i<5; i++){
    for(j=0; j<14; j++){
      lcd.LCD_set_XY(j*6,i);
      lcd.LCD_write_char(i*14+j+32, MENU_NORMAL);
    }
  }


  lcd.LCD_write_string(38, 5, "OK", MENU_HIGHLIGHT );
  waitfor_OKkey();   
}

void altitude(){
  lcd.LCD_draw_bmp_pixel(0,0, DFrobot_bmp, 84,24);
  lcd.LCD_write_chinese(6,3, DFrobot_chinese,12,6,0,0);
  lcd.LCD_write_string(38, 5, "OK", MENU_HIGHLIGHT );
  waitfor_OKkey();
}


void pression(){

  lcd.LCD_write_string( 0, 1, "LCD4884 Shield", MENU_NORMAL);
  lcd.LCD_write_string( 0, 3, "www.DFrobot.cn", MENU_NORMAL);
  lcd.LCD_write_string(38, 5, "OK", MENU_HIGHLIGHT );
  waitfor_OKkey();


}

void tout(){

  lcd.LCD_write_string( 0, 1, "LCD4884 Shield", MENU_NORMAL);
  lcd.LCD_write_string( 0, 3, "www.DFrobot.cn", MENU_NORMAL);
  lcd.LCD_write_string(38, 5, "OK", MENU_HIGHLIGHT );
  waitfor_OKkey();


}

// The followinging are interrupt-driven keypad reading functions
// which includes DEBOUNCE ON/OFF mechanism, and continuous pressing detection


// Convert ADC value to key number
char get_key(unsigned int input)
{
  char k;

  for (k = 0; k < NUM_KEYS; k++)
  {
    if (input < adc_key_val[k])
    {

      return k;
    }
  }

  if (k >= NUM_KEYS)
    k = -1;     // No valid key pressed

  return k;
}

void update_adc_key(){
  int adc_key_in;
  char key_in;
  byte i;

  adc_key_in = analogRead(0);
  key_in = get_key(adc_key_in);
  for(i=0; i<NUM_KEYS; i++)
  {
    if(key_in==i)  //one key is pressed 
    { 
      if(button_count[i]<DEBOUNCE_MAX)
      {
        button_count[i]++;
        if(button_count[i]>DEBOUNCE_ON)
        {
          if(button_status[i] == 0)
          {
            button_flag[i] = 1;
            button_status[i] = 1; //button debounced to 'pressed' status
          }

        }
      }

    }
    else // no button pressed
    {
      if (button_count[i] >0)
      {  
        button_flag[i] = 0;	
        button_count[i]--;
        if(button_count[i]<DEBOUNCE_OFF){
          button_status[i]=0;   //button debounced to 'released' status
        }
      }
    }

  }
}

// Timer2 interrupt routine -
// 1/(160000000/256/(256-6)) = 4ms interval

ISR(TIMER2_OVF_vect) {  
  TCNT2  = 6;
  update_adc_key();
}

Super ! Tu est un génie merci pour le partage du sketch exemple, merci pour tout, j'attaque le code.

☆☆☆☆☆ Infobarquee ☆☆☆☆☆

Voici le code complet Uno, Lcd shield 1602, Dht22 avec horlogerie réglable, comme je vais utilisé des câbles Dupont au lieu d’enficher je dois me faire un plan vite fait. Encore merci Infobarquee sans toi j’aurais rien pu faire, Respect.

#include "DHT.h"//DHT sensor Library
#include <LiquidCrystal.h>//LCD Library 
#define DHTTYPE DHT22  
#define DHTPIN A5 // connecte dht sur broches A5
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //Create lcd object using this pins 8,9,4,5,6,7
// define some values used by the panel and buttons
int lcd_key = 0;
int adc_key_in = 0;
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5
long ext_h = 0;
long ext_m = 0;
// read the buttons
int read_LCD_buttons()
{
adc_key_in = analogRead(0); // read the value from the sensor 
// my buttons when read are centered at these valies: 0, 100, 256, 410, 640
// we add approx 50 to those values and check to see if we are close
if (adc_key_in > 1000) return btnNONE; // We make this the 1st option for speed reasons since it will be the most likely result
if (adc_key_in < 50) return btnRIGHT; 
if (adc_key_in < 150) return btnUP; 
if (adc_key_in < 300) return btnDOWN; 
if (adc_key_in < 460) return btnLEFT; 
if (adc_key_in < 690) return btnSELECT; 
return btnNONE; // when all others fail, return this...
}
void setup()
{
lcd.begin(16, 2); // start the library
}
void loop()
{
long hour, minute, second ;
long total ;
total = millis()/1000 + ext_h*3600 + ext_m*60;
hour = (total % 43200)/3600;
minute = (total % 3600)/60;
second = total % 60;
lcd_key = read_LCD_buttons();
int err;
float temp, humi;
lcd.setCursor(0,0); 
//lcd.print(total);
if((err=dht22.read(humi, temp))==0){
lcd.setCursor(0,0); 
lcd.print("T lcd.print(temp);
lcd.print("C lcd.print("H lcd.print(humi);
lcd.print("%");
lcd.setCursor(0,1); 
lcd.print("Time if(hour<10){
lcd.print("0 }
lcd.print(hour);
lcd.print(":"); 
if(minute<10){
lcd.print("0 }
lcd.print(minute);
lcd.print(":"); 
if(second<10){
lcd.print("0 }
lcd.print(second);
}else{
lcd.setCursor(0,1); 
lcd.print("Error");
lcd.print(err);
}
switch (lcd_key) // depending on which button was pushed, we perform an action
{
case btnRIGHT:{
break;
}case btnLEFT:{
ext_m +=1; 
//lcd.print(" *m");
break;
}case btnUP:{
break;
}case btnDOWN:{
break;
}case btnSELECT:{
ext_h +=1;
//lcd.print(" *h");
break;
}case btnNONE:{
break;
}
}
delay(DHT22_RETRY_DELAY); //delay for reread
//lcd_key = read_LCD_buttons(); // read the buttons
}

Après vérification IDE, cela ne compile pas j’ai des erreurs, zut dommage pour moi.

if(minute<10){
lcd.print(“0 }
lcd.print(minute);
lcd.print(”:");
if(second<10){ ← (Cette ligne est montré comme une erreur dans le logiciel arduino)
lcd.print("0 }
lcd.print(second);
}else{

Et voilà pas de chance.

Bonjour,

En fait l’erreur est sur la ligne suivante
lcd.print("0 } à remplacer par lcd.print(“0”);}

kamill:
Bonjour,

En fait l'erreur est sur la ligne suivante
lcd.print("0 } à remplacer par lcd.print("0");}

Cool vraiment j'étais perdue, modifie de suite l'espoir renaît, Merci Kamill, respect.

Chacun ça route, chacun son chemin, le mien est remplie d’erreurs chère voisin :slight_smile:
Non je ne suis pas à la hauteur, les erreurs de caractères etc… c’est trop.

Bon je vais quand même essayé de comprendre le parce que du pourquoi, si sava pas dommage pour moi, ne veut pas vous embêter avec mes aventures, Grand merci ☆ Inforborquee & Kamill ☆

il faudrait quand même faire attention a ce que tu écris.
oublier des ) ; des ;
il y a des bases quand même

la prochaine fois, copie colle les erreurs au lieu de mettre une image

Désolé pour les images Infobarquee, je t'assure que j'ai sélectionné les erreurs puis (clique droit) pour copier mais aucune option possible, pris des photos.

Le sketch est un code qui à été repris et qui selon l'auteur fonctionne j'ai juste modifier le dht11 par 22 et inséré les valeurs des boutons pour le shield que j'avais (trouvé dans les commentaires du produit)

Bref il me faut comprendre la base pour éviter de faire des erreurs bête, au passage je vous remercie encore, c'était une aventure pour moi qui ne c'est pas réalisé mais qui ma motivé pour le futur, on baisse pas les bras :slight_smile: garde le sourire, très bonne continuation.

quand je vois ca, je me dis que soit erreur lors de la copie, soit nullité a coder du codeur

lcd.print("C lcd.print("H lcd.print(humi);

au lieu de

lcd.print("C H");
lcd.print(humi);

et que

DHT dht(DHTPIN, DHTTYPE);

ne lira jamais

dht22.read

donne le lien du code repiqué

Je pense avoir eu sûrement une erreur lors des copies et modifications, j'ai trouvé ce code sur tablette enregistré sur carte sd apres modification de quelques touches, voici le lien, merci pour cet entraide. Clock, Temperature, and Humidity Station – The Arduino Store

j'avais vu ce code truffé de fautes de codage
après c'est une question de logique.
tu ouvre une ( donc tu dois la fermer aussi, comme dans un texte en francais, non?
et à 99% chaque ligne dois se finir par un ;

Merci Infobarquee tu as raison, j'avoue m'être lancé à l'aveuglette
Je vais tout reprendre phrase par phrase..

Non mais franchement c'est dingue !!! Je me dit c'est cool on va débuté avec ce sketch et comme par hasard il est truffé de faute :slight_smile:

Excuse moi Infobarquee
mon but n'est pas de t'embêter, tu est vraiment admirable, je voulais juste partagé mon expérience et avoir confirmation mais là je suis tombé sur un sketch nul comme moi :slight_smile:

Je viens de téléchargé ArduinoDroid sur tablette et compte me corriger depuis cet IDE Android, allez au boulot et ce soir c'est l'usine et les camions :slight_smile: