Fusion de sketch

Bonjour à tous,
Nouveau sur le forum et nul en codage, je voudrais fusionner 2 sketch arduino IDE mais je n’ai vraiment aucune idées de la façon de s’y prendre !!!

ci dessous les deux sketch.

Y aurait il une bonne âme pour m’aider ??

Merci d’avance

[code]
/*  ESP8266, DS18B20 with updates to ThinkSpeak.com
 *   
 *  Supports multiple DS18B20 sensors on one pin, see Dallas datasheet for 
 *  wiring schematics.
 *  
 *  Requires free ThingSpeak account: https://thingspeak.com/
 *  Requires the following libraries to be installed: 
 *  
 *  OneWire.h - Built in.
 *  ESP8266Wifi.h - Built in to ESP8266/Arduino integration.
 *  DallasTemperature.h - Dallas Temperature sensor  library by Miles Burton: 
 *  https://github.com/milesburton/Arduino-Temperature-Control-Library 
 *  ThingSpeak.h - Offical ThinkSpeak library by Mathworks:
 *  https://github.com/mathworks/thingspeak-arduino
 *  
 *  Portions of code taken from Dallas Temperature libray examples by Miles Burton.
 *  
 *  To test sensor readings without uploading to ThinkSpeak cooment out 
 *  line 144 (ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);)
 *  
 */

#include <DallasTemperature.h>
#include <OneWire.h>
#include <ThingSpeak.h> 
#include <ESP8266WiFi.h>

// User changeable vaules go here.

#define ONE_WIRE_BUS D4                           // Digital pin DS18B20 is connected to.
#define TEMPERATURE_PRECISION 11                  // Set sensor precision.  Valid options 8,10,11,12 Lower is faster but less precise

unsigned long myChannelNumber = XXXXX;            // Thingspeak channel ID here
const char * myWriteAPIKey = "XXXXXXXXXX";  // Write API key here
const char* ssid     = "XXXXXXX";           // SSID of wireless network
const char* password = "XXXXXXXXX";       // Password for wireless network

int fieldStart = 1;                               // Field number to start populating ThingSpeak channel data, leave at 
                                                  // 1 if this is the only device reporting to that channel.  
                                                  // If more than one device this should be the FIRST FREE field.

int updatePeriod = 120;                            //delay in seconds to update to ThingSpeak.  Should be set to not less than 15.


int status = WL_IDLE_STATUS;
WiFiClient  client;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);


int numberOfDevices; // Number of temperature devices found
DeviceAddress tempDeviceAddress; // We'll use this variable to store a found device address

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

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");  
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP()); 


  ThingSpeak.begin(client);
  sensors.begin();
  
  // Grab a count of devices on the wire
  numberOfDevices = sensors.getDeviceCount();
  
  // locate devices on the bus
  Serial.print("Locating devices...");
  
  Serial.print("Found ");
  Serial.print(numberOfDevices, DEC);
  Serial.println(" devices.");

  // report parasite power requirements
  Serial.print("Parasite power is: "); 
  if (sensors.isParasitePowerMode()) Serial.println("ON");
  else Serial.println("OFF");
  
  // Loop through each device, print out address
  for(int i=0;i<numberOfDevices; i++)
  {
    // Search the wire for address
    if(sensors.getAddress(tempDeviceAddress, i))
  {
    Serial.print("Found device ");
    Serial.print(i, DEC);
    Serial.print(" with address: ");
    printAddress(tempDeviceAddress);
    Serial.println();
    
    Serial.print("Setting resolution to ");
    Serial.println(TEMPERATURE_PRECISION, DEC);
    
    // set the resolution to TEMPERATURE_PRECISION bit (Each Dallas/Maxim device is capable of several different resolutions)
    sensors.setResolution(tempDeviceAddress, TEMPERATURE_PRECISION);
    
    Serial.print("Resolution actually set to: ");
    Serial.print(sensors.getResolution(tempDeviceAddress), DEC); 
    Serial.println();
  }else{
    Serial.print("Found ghost device at ");
    Serial.print(i, DEC);
    Serial.print(" but could not detect address. Check power and cabling");
  }
  }
}

// function to print a device address
void printAddress(DeviceAddress deviceAddress)
{
  for (uint8_t i = 0; i < 8; i++)
  {
    if (deviceAddress[i] < 16) Serial.print("0");
    Serial.print(deviceAddress[i], HEX);
  }
}

void loop() {
  sensors.requestTemperatures();
  // Itterate through each sensor and send readings to ThinkSpeak.  
  for (int i=0; i<=(numberOfDevices - 1); i++){
    float temp=sensors.getTempCByIndex(i);
    ThingSpeak.setField(i+fieldStart,temp);
    Serial.println("Sensor #:");
    Serial.println(i);
    Serial.println("Temperature:");
    Serial.println(temp);
  }
  ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);  //Write fields to Thingspeak, comment this line out
                                                              //if you wish to test without uploading data.
    Serial.println("Data sent to ThinkSpeak");
  delay(updatePeriod * 1000);
}

[/code]

[code]/////////////////////////////////
// Generated with a lot of love//
// with TUNIOT FOR ESP8266     //
// Website: Easycoding.tn      //
/////////////////////////////////
#include <ESP8266WiFi.h>

#include <ESP8266HTTPClient.h>

WiFiClient client;

String thingSpeakAddress= "http://api.thingspeak.com/update?";
String writeAPIKey;
String tsfield1Name;
String request_string;

HTTPClient http;

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

    WiFi.disconnect();
   WiFi.begin("XXXXXX","XXXXXXXXXXXX");
  while ((!(WiFi.status() == WL_CONNECTED))){
    delay(300);

  }

}


void loop()
{

    if (client.connect("api.thingspeak.com",80)) {
      writeAPIKey = "key=XXXXXXXXX";
      tsfield1Name = "&field1=1";
      request_string = thingSpeakAddress;
      request_string += "key=";
      request_string += "";
      request_string += "&";
      request_string += "field1";
      request_string += "=";
      request_string += analogRead(A0);
      http.begin(request_string);
      http.GET();
      http.end();
      delay(5000);
 
    } 
    delay(3000);
    if (350 >= analogRead(A0)) {
      Serial.println("Forte pluie");
    
    } else {
      if (400 >= analogRead(A0)) {
        Serial.println("Pluie");

      } else {
        if (650 >= analogRead(A0)) {
          Serial.println("Bruine");

        } else {
          if (800 >= analogRead(A0)) {
            Serial.println("Humide");

          } else {
            if (960 >= analogRead(A0)) {
              Serial.println("Sec");

            }

          }

        }

      }

    }

    }

[/code]

Pour vous, ça veut dire quoi de fusionner des sketches ? Quel en est le but ? Si vous répondez à cette question, vous serez déjà sur le chemin de la réponse.

Cordialement.

Pierre.

Merci de votre réponse

Alors, ce que je veux faire en 2 mots .

faire exécuter 2 taches à un nodeMcu ESP8266 : Envoyer des relevé de T° et de Précipitation (2 capteurs distinct) a Thingspeak sans avoir besoin de 2 nodeMCU.
Donc regrouper ces 2 taches dans un même sketch.

Reviens aux bases :
Un programme "à la mode Processing/Wiring/Arduino" contient obligatoirement 2 fonctions :

  • setup() qui ne s'éxécute qu'une seule fois
  • loop() qui est placée dans une boucle dont il est impossible de sortir -> à peine sorti de loop() le programme y entre de nouveau et cela indéfiniment.

Plus diverses fonctions personnelles qui peuvent être appelées de setup() ou de loop().

Voilà tu as la réponse à ta question.
Il faut réunir "intelligemment" et non pas de façon bourrine les deux setup() et les deux loop() et évitant les conflits (même nom de variable ou même pins utilisées par exemple).

Ok je vais essayer et poster mon travail.

Pourras-tu le contrôler si cela ne te dérange pas ?

Je ne suis qu'un petit programmeur qui n'aime pas entrer dans le code des autres, d'autres membres du forum sont plus à l'aise dans ce domaine.

Mais je peux te donner des conseils pour mettre au point.

  1. il faut résoudre toutes les erreurs de compilation et souvant ce ne sont que de bêtes fautes d'inatention.
  2. Il faut toujours commencer par résoudre la première erreur signalée, car souvent les suivantes ne sont pas des erreurs mais simplement la conséquences de la première qui se propage sur tout le source.
  3. Placer des Serial.print(" message_adapté") là où tu as des doutes. Pour t'assurer que tu passe bien là où tu l'as prévu ou que les valeurs calculées sont correctes.
  4. Si le programme complet ne fonctionne pas le découper en plusieurs programmes plus simples et testés individuellement avant le ré-assemblage.

Rien qu'avec cela et avec du bon sens et de la méthode tu devrais t'en sortir tout seul.

Merci 68tjs,

ta réponse est pleine de bon sens, peut être suis-je trop pressé !!!!

Je vais reprendre ça depuis le début et pas à pas

merci