erreur sur code

je commence à évoluer et je réussie à partir de mon arduino à lire une sonde mg811 et une sonde DTH 11 mais séparément.

j’ai essayé de rassembler les codes et résolus pas mal d’erreur mais je bloque sur 2 lignes. de sont les lignes 68 ET 69.Voici les erreurs relevées

solar_ino1.ino: In function ‘void loop()’:
solar_ino1:68: error: expected primary-expression before ‘.’ token
solar_ino1:69: error: expected primary-expression before ‘.’ token

J’ai lu plusieurs sujets mais aucun ne réponds à mon erreur. A coté de mon stetch j’ai 2 fichiers pour la librairie dth11, dth11.CPP et dth11.h
si quelqu’un peut m’aider … =(

/*****************************SENSOR DTH11 HUMIDITY AND TEMPERATURE***********************************************/

/-----( Import needed libraries )-----/
#include <dht11.h>

/-----( Declare objects )-----/
dht11 DHT11;

/-----( Declare Constants, Pin Numbers )-----/
#define DHT11PIN 2

/Hardware Related Macros************/
#define        MG_PIN                      (0)    //define which analog input channel you are going to use
#define        BOOL_PIN                    (2)
#define        DC_GAIN                      (8.5)  //define the DC gain of amplifier

/Software Related Macros*************/
#define        READ_SAMPLE_INTERVAL        (50)    //define how many samples you are going to take in normal operation
#define        READ_SAMPLE_TIMES            (5)    //define the time interval(in milisecond) between each samples in
                                                    //normal operation

/Application Related Macros************/
//These two values differ from sensor to sensor. user should derermine this value.
#define        ZERO_POINT_VOLTAGE          (0.220) //define the output of the sensor in volts when the concentration of CO2 is 400PPM
#define        REACTION_VOLTGAE            (0.020) //define the voltage drop of the sensor when move the sensor from air into 1000ppm CO2

/Globals******************/
float          CO2Curve[3]  =  {2.602,ZERO_POINT_VOLTAGE,(REACTION_VOLTGAE/(2.602-3))}; 
                                                    //two points are taken from the curve.
                                                    //with these two points, a line is formed which is
                                                    //“approximately equivalent” to the original curve.
                                                    //data format:{ x, y, slope}; point1: (lg400, 0.324), point2: (lg4000, 0.280)
                                                    //slope = ( reaction voltage ) / (log400 ¨Clog1000)

void setup()
{
    Serial.begin(9600);                              //UART setup, baudrate = 9600bps
    pinMode(BOOL_PIN, INPUT);                        //set pin to input
    digitalWrite(BOOL_PIN, HIGH);                    //turn on pullup resistors
             
}

void loop()
{
   
  // SONDE DTH_solar Reading temperature or humidity takes about 250 milliseconds!  Sensor readings may also be up to 2 seconds ‘old’ (its a very slow sensor)
  float h = dht11.readHumidity();
  float t = dht11.readTemperature();

  // check if returns are valid, if they are NaN (not a number) then something went wrong!

delay (2000);
// check if returns are valid, if they are NaN (not a number) then something went wrong!
  if (isnan(t) || isnan(h)) {
    Serial.println(“Failed to read from DHT_solar”);
  } else {
    Serial.print(“Humidity: “);
    Serial.print(h);
    Serial.print(” %\t”);
    Serial.print(“Temperature: “);
    Serial.print(t);
    Serial.println(” *C”);
  }
//SONDE CO2 
 
  int percentage;
    float volts;
   
 
    volts = MGRead(MG_PIN);
    Serial.print( “MG_solar:” );
     
    percentage = MGGetPercentage(volts,CO2Curve);
    Serial.print(“CO2:”);
    if (percentage == -1) {
        Serial.print( “<400” );
    } else {
        Serial.print(percentage);
    }

Serial.print( “ppm” ); 
    Serial.print("\n");
       
    Serial.print("\n");
   
    delay(200);
}

/*****************************  MGRead *********************************************
Input:  mg_pin - analog channel
Output:  output of MG_solar
Remarks: This function reads the output of MG_solar
************************************************************************************/
float MGRead(int mg_pin)
{
    int i;
    float v=0;

for (i=0;i<READ_SAMPLE_TIMES;i++) {
        v += analogRead(mg_pin);
        delay(READ_SAMPLE_INTERVAL);
    }
    v = (v/READ_SAMPLE_TIMES) *5/1024 ;
    return v; 
}

/*****************************  MQGetPercentage **********************************
Input:  volts  - MG_solar output measured in volts
        pcurve  - pointer to the curve of the target gas
Output:  ppm of the target gas
Remarks: By using the slope and a point of the line. The x(logarithmic value of ppm)
        of the line could be derived if y(MG-811 output) is provided. As it is a
        logarithmic coordinate, power of 10 is used to convert the result to non-logarithmic
        value.
************************************************************************************/
int  MGGetPercentage(float volts, float *pcurve)
{
  if ((volts/DC_GAIN )>=ZERO_POINT_VOLTAGE) {
      return -1;
  } else {
      return pow(10, ((volts/DC_GAIN)-pcurve[1])/pcurve[2]+pcurve[0]);
  }
}

Salut,

C’est DHT11 que tu as instancié et non dht11

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

EDIT :

En plus il te manque une ligne, tu n’as pas précisé le pin du DHT11 :

DHT11.attach(DHT11PIN);

merci pour la réponse cela a résolu le message mais en a donné un autre :roll_eyes:

solar_ino1:70: error: 'class dht11' has no member named 'readHumidity'
solar_ino1:71: error: 'class dht11' has no member named 'readTemperature'

et

solar_ino1:68: error: 'class dht11' has no member named 'attach'

je n'y comprends plus rien bref help :fearful:

nono

Tu mélanges deux versions de la librairie je pense. Regarde l'exemple ici : DHT11LIB/dht11_functions.pde at master · jdattilo/DHT11LIB · GitHub

$)tu avais raison à force de lire des bouquins de code et de tenter plein de lignes, je me mélange les pinceaux. cela fonctionne maintenant.

Prochaine étape

j’ai programmé mon rapsberry pour utiliser une liaison usb avec l’arduino. J’ai créé la base mysql corresondant à mes capteurs.

Maintenant, j’ai quelques questions. Est il possible de mettre un temps de latence sur les capteurs de l’arduino (exemple tu n’envoie la température qu’au bout de 1O mns au rapsberry et à la requête envoyant les données dans la table correspondante)
Est il possible de mettre des noms aux capteurs au niveau de l’arduino et d’envoyer cela dans une table?

merci

nonos85

/*####################################################################
 FILE: sensor temperature, humidity and co2 salle solar venti
 VERSION: 0.4.5
 PURPOSE: Test DHT11 Temperature & Humidity Sensor library functions
 Mod by Joseph Dattilo (Virtuabotix LLC) - Version 0.4.5 (11/11/11)
 Mod by Joseph Dattilo (Virtuabotix LLC) - Version 0.4.0 (06/11/11)
 Mod by Rob Tillaart - Version 0.3 (28/03/2011)
 Mod by SimKard - Version 0.2 (24/11/2010)
 George Hadjikyriacou - Original version (??)
#######################################################################*/


#include <dht11.h>

dht11 DHT11;

/*

VEETECH CO2 Monitor and Data Logger
SKETCH 2 Operation 
Code by Martin Liddament

Used to determine:
- CO2 Concentration;
IMPORTANT

- For demonstration only;
- Not verified or guaranteed free of errors;
- Not suitable for critical applications;
- Use of this code is entirely at user's risk;
- Accurate calibration of the CO2 module is essential.

This code is in the public domain.
Copyright VEETECH Ltd 2013 www.veetech.co.uk.

*/

int co2 = 9999; // co2 is the co2 concentration. Preset value for code checking
// analog input

int analogPin = A0; // voltage input from sensor

// Setting Sensor Calibration Constants

 float v400ppm = 4.535;   //MUST BE SET ACCORDING TO CALIBRATION
 float v40000ppm = 3.206; //MUST BE SET ACCORDING TO CALIBRATION````````````````````````
 float deltavs = v400ppm - v40000ppm;
 float A = deltavs/(log10(400) - log10(40000));
 float B = log10(400);

//transfert données
char ch;

void setup()
{
  DHT11.attach(2);
  pinMode(13,OUTPUT); //voyant transfert serie 
  Serial.begin(9600);
  pinMode(analogPin, INPUT);
}

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

  int chk = DHT11.read();

  Serial.print("Read sensor: ");
  switch (chk)
  {
    case 0: Serial.println("OK"); break;
    case -1: Serial.println("Checksum error"); break;
    case -2: Serial.println("Time out error"); break;
    default: Serial.println("Unknown error"); break;
  }

  Serial.print("Humidity (%): ");
  Serial.println((float)DHT11.humidity, 2);

  Serial.print("Temperature (C): ");
  Serial.println((float)DHT11.temperature, 2);

  delay(2000);
  
  // Read co2 data from sensor
  
  int data = analogRead(analogPin); //digitise output from c02 sensor
  float voltage = data/204.6;       //convert output to voltage

// Calculate co2 from log10 formula (see sensor datasheet)

  float power = ((voltage - v400ppm)/A) + B;
  float co2ppm = pow(10,power);
  co2 = co2ppm;
  Serial.print("CO2 (ppm): ");
  Serial.println (co2);
delay(1000);

//transfert données vers rapsberry

 if (Serial.available()) 
  {

     ch = Serial.read();

     if ( ch == '1' ) { 
       Serial.println(analogRead(A0)); // if '1' is received, then send back analog read A0
     } 
     else if (ch == '2') {    
       digitalWrite(13,HIGH); // if '2' is received, turn on the led attached to 13
     } 
     else if (ch == '3') {
       digitalWrite(13,LOW); // if '3' is received then turn off the led attached 13
     } else {
       delay(10);
     }

  }


}

Pour l'envoi toutes les 10 min : [Tutorial] Les interruptions temporelles avec Arduino | B@ttoMicro - Microcontrôleurs et compagnie !

Pour l'envoi d'une table : une table c'est une présentation de données, tu ne peux pas transmettre une table à proprement parlé. L'arduino ne peut envoyer qu'un flux de données, à toi côté rasberry de les mettre en forme. Ou bien d'ajouter un shield ethernet et d'envoyer les données via requête sql

merci ça fonctionne maintenant. je mets ton lien de côté :% je me bats maintenant avec le serail cf un autre poste. :disappointed_relieved: