Partage
  • Partager sur Facebook
  • Partager sur Twitter

Arrosage automatique Arduino

Problème de code

    20 juillet 2019 à 19:53:14

    Blocks de l'app avec AppInventorBonjour j'ai comme projet de fabriquer un arrosage automatique pour une serre

    J'ai prévu d'utiliser
    - 3 capteurs d'humidité
    - une électrovanne avec un relais
    - un LCD 16x2
    - un module Bluetooth HC 06
    - ( un Arduino évidemment )

    J'ai écris le code (SystemGarden.ino) mais l'écran bloque le code a cause du délai (l'arduino met 5s pour mettre a jour les variables) donc je l'ai modifié pour ne presque plus attendre (SystemGardenWithoutDelay.ino) mais les variables se retrouvent inversée sur mon app crée avec AppInventor2 je ne trouve pas d'où vient le problème.

    Même si mon projet est un peu complexe, je pense qu'il est réalisable.

    Si quelqu'un peu m'aider ce serait bien (même si j'ai toutes mes vacances pour le terminer)

    Merci d'avance

    SystemGarden.ino

    #include <SoftwareSerial.h>                          
    SoftwareSerial HC06(0,1); 
    
    #include <LiquidCrystal.h>
    LiquidCrystal Lcd(7, 6, 5, 4, 3, 2);
    
    
    double version = 1.7 ;
    double seuilhumid = 0.0 ;
    double timer = 0.0 ;
    double humidite = 0.0 ;
    
    bool etat = false ;
    
    String trame = "";
    String bluetoothname = "SystemGarden";
    String bluetoothcode = "1234";
    
    // make custom character:
    byte icon[8] = {
      0b01110,
      0b01000,
      0b00100,
      0b01110,
      0b01000,
      0b01000,
      0b01010,
      0b01110
    };
    
    void DigitalWrite(int pinNumber, boolean status)
    {
      pinMode(pinNumber, OUTPUT);
      digitalWrite(pinNumber, status);
    }
    
    
    void Arrosage();
    
    void setup()
    {
      HC06.begin(9600);
      
      Lcd.begin(16,2);
      // create a new character
      Lcd.createChar(0, icon);
    
      seuilhumid = 50.0 ;
    
      timer = 10.0 ;
    
      humidite = 49.07 ;
        
      Lcd.setCursor(0, 0);
      Lcd.print("SystemGarden" );
      Lcd.print(" " );
      Lcd.print(version );
      Lcd.print("                ");
    
      Lcd.setCursor(0, 1);
      Lcd.print("-" );
      Lcd.print("                ");
    
      delay( 100 );
    
      Lcd.setCursor(0, 1);
      Lcd.print("--" );
      Lcd.print("                ");
    
      delay( 100 );
    
      Lcd.setCursor(0, 1);
      Lcd.print("---" );
      Lcd.print("                ");
    
      delay( 100 );
    
      Lcd.setCursor(0, 1);
      Lcd.print("----" );
      Lcd.print("                ");
    
      delay( 100 );
    
      Lcd.setCursor(0, 1);
      Lcd.print("-----" );
      Lcd.print("                ");
    
      delay( 100 );
    
      Lcd.setCursor(0, 1);
      Lcd.print("------" );
      Lcd.print("                ");
    
      delay( 100 );
    
      Lcd.setCursor(0, 1);
      Lcd.print("-------" );
      Lcd.print("                ");
    
      delay( 100 );
    
      Lcd.setCursor(0, 1);
      Lcd.print("--------" );
      Lcd.print("                ");
    
      delay( 100 );
    
      Lcd.setCursor(0, 1);
      Lcd.print("---------" );
      Lcd.print("                ");
    
      delay( 100 );
    
      Lcd.setCursor(0, 1);
      Lcd.print("----------" );
      Lcd.print("                ");
    
      delay( 100 );
    
      Lcd.setCursor(0, 1);
      Lcd.print("-----------" );
      Lcd.print("                ");
    
      delay( 100 );
    
      Lcd.setCursor(0, 1);
      Lcd.print("------------" );
      Lcd.print("                ");
      
      delay( 100 );
    
      Lcd.setCursor(0, 1);
      Lcd.print("-------------" );
      Lcd.print("                ");
    
      delay( 100 );
    
      Lcd.setCursor(0, 1);
      Lcd.print("--------------" );
      Lcd.print("                ");
    
      delay( 100 );
    
      Lcd.setCursor(0, 1);
      Lcd.print("---------------" );
      Lcd.print("                ");
    
      delay( 100 );
    
      Lcd.setCursor(0, 1);
      Lcd.print("----------------" );
      Lcd.print("                ");
    
      delay(2000);
    
     }
    void loop()
    {
      while (!HC06.available()) {
     Lcd.setCursor(0, 0);
     Lcd.print("Info           " );
     Lcd.write(byte(0));
     Lcd.print("                ");
     
     Lcd.setCursor(0, 1);
     Lcd.print("Humidite:" );
     Lcd.print(humidite);
     Lcd.print("%");
     Lcd.print("                ");
     delay(2000);
     
    /* Lcd.setCursor(0, 1);
     Lcd.print("Bluetooth:" );
     Lcd.print(bluetoothname);
     Lcd.print("                ");
     delay(2000);
    
     Lcd.setCursor(0, 1);
     Lcd.print("Code BT:" );
     Lcd.print(bluetoothcode);
     Lcd.print("                ");
     delay(2000);
     */
     Lcd.setCursor(0, 1);
     Lcd.print("Timer:" );
     Lcd.print(timer);
     Lcd.print("sec");
     Lcd.print("                ");
     delay(2000);
    
     Lcd.setCursor(0, 1);
     Lcd.print("Seuil:" );
     Lcd.print(seuilhumid);
     Lcd.print("%");
     Lcd.print("                ");
     delay(2000);
    
     humidite = (analogRead(0)+analogRead(1)+analogRead(2)) / 3 ;
    
     if (( (humidite) < (seuilhumid) ))
      {  
        Arrosage();  
        
        } HC06.print(timer);
      HC06.print("x");
      HC06.print(humidite);
      HC06.print("x");
      HC06.print(seuilhumid);
      HC06.print("x");
      HC06.print(etat);
        }
     
    
      //réception données blutooth
    
    
      while (HC06.available()) {
      
        trame = HC06.readStringUntil('x');
        timer = trame.toInt();
        
        trame = HC06.readStringUntil('x');
        seuilhumid = trame.toInt();
            
        trame = HC06.readStringUntil('f');
        etat = trame;
      }
    
     if (etat == true){
    
      DigitalWrite(13, HIGH);
      DigitalWrite(12, HIGH);
      Lcd.setCursor(0, 0);
      Lcd.print("Arrosage        ");
      Lcd.setCursor(0, 1);
      Lcd.print("Manuel          ");
      
      }else if (etat == false){
    
    DigitalWrite(13, LOW);
    DigitalWrite(12, LOW);
    Lcd.clear()  ;
      }
    }
    
    
    
    
         
       
    void Arrosage()
    {
      
      DigitalWrite(13, HIGH);
      Lcd.setCursor(0, 1);
      Lcd.print("Arrosage ");
      Lcd.print(timer);
      Lcd.print("s");
      delay (timer * 1000);
      DigitalWrite(13, LOW); 
    }
    
    

    SystemGardenWithoutDelay.ino

    #include <SoftwareSerial.h>                          
    SoftwareSerial HC06(0,1); 
    
    #include <LiquidCrystal.h>
    LiquidCrystal Lcd(7, 6, 5, 4, 3, 2);
    
    
    double version = 2.3 ;
    double seuilhumid = 0.0 ;
    double timer = 0.0 ;
    double humidite = 0.0 ;
    double statelcd = 1 ;
    
    bool etat = false ;
    
    String trame = "";
    String bluetoothname = "SystemGarden";
    String bluetoothcode = "1234";
    
    unsigned long previousMillis = 0;       // Derniere activation
    
    
    const long interval = 2000;  //Intervalle
    
    // make bluetooth character:
    byte icon[8] = {
      0b00100,
      0b00110,
      0b10101,
      0b01110,
      0b01110,
      0b10101,
      0b00110,
      0b00100
    };
    
    void DigitalWrite(int pinNumber, boolean status)
    {
      pinMode(pinNumber, OUTPUT);
      digitalWrite(pinNumber, status);
    }
    
    
    void Arrosage();
    void Arrosagemanuel();
    
    
    void setup() {
    
    //SETUP CODE
    HC06.begin(9600);
      
      Lcd.begin(16,2);
      // create a new character
      Lcd.createChar(0, icon);
    
      seuilhumid = 50.0 ;
    
      timer = 10.0 ;
    
      humidite = 49.07 ;
        
      Lcd.setCursor(0, 0);
      Lcd.print("SystemGarden" );
      Lcd.print(" " );
      Lcd.print(version );
      Lcd.print("                ");
    
      Lcd.setCursor(0, 1);
      Lcd.print("-" );
      Lcd.print("                ");
    
      delay( 100 );
    
      Lcd.setCursor(0, 1);
      Lcd.print("--" );
      Lcd.print("                ");
    
      delay( 100 );
    
      Lcd.setCursor(0, 1);
      Lcd.print("---" );
      Lcd.print("                ");
    
      delay( 100 );
    
      Lcd.setCursor(0, 1);
      Lcd.print("----" );
      Lcd.print("                ");
    
      delay( 100 );
    
      Lcd.setCursor(0, 1);
      Lcd.print("-----" );
      Lcd.print("                ");
    
      delay( 100 );
    
      Lcd.setCursor(0, 1);
      Lcd.print("------" );
      Lcd.print("                ");
    
      delay( 100 );
    
      Lcd.setCursor(0, 1);
      Lcd.print("-------" );
      Lcd.print("                ");
    
      delay( 100 );
    
      Lcd.setCursor(0, 1);
      Lcd.print("--------" );
      Lcd.print("                ");
    
      delay( 100 );
    
      Lcd.setCursor(0, 1);
      Lcd.print("---------" );
      Lcd.print("                ");
    
      delay( 100 );
    
      Lcd.setCursor(0, 1);
      Lcd.print("----------" );
      Lcd.print("                ");
    
      delay( 100 );
    
      Lcd.setCursor(0, 1);
      Lcd.print("-----------" );
      Lcd.print("                ");
    
      delay( 100 );
    
      Lcd.setCursor(0, 1);
      Lcd.print("------------" );
      Lcd.print("                ");
      
      delay( 100 );
    
      Lcd.setCursor(0, 1);
      Lcd.print("-------------" );
      Lcd.print("                ");
    
      delay( 100 );
    
      Lcd.setCursor(0, 1);
      Lcd.print("--------------" );
      Lcd.print("                ");
    
      delay( 100 );
    
      Lcd.setCursor(0, 1);
      Lcd.print("---------------" );
      Lcd.print("                ");
    
      delay( 100 );
    
      Lcd.setCursor(0, 1);
      Lcd.print("----------------" );
      Lcd.print("                ");
    
      delay(2000);
      
     Serial.begin(9600) ;
    
    }
    
    void loop() {
    
      Serial.println(etat);
     Lcd.setCursor(0, 0);
     Lcd.print("Info           " );
     Lcd.write(byte(0));
     Lcd.print("                ");
     
     humidite = (analogRead(0)+analogRead(1)+analogRead(2)) / 3 ;
    
     if (( (humidite) < (seuilhumid) ))
      {  
        Arrosage();  
        
        }
         
      HC06.print(timer);
      HC06.print("x");
      HC06.print(humidite);
      HC06.print("x");
      HC06.print(seuilhumid);
      
    
      //réception données blutooth
    
    
      while (HC06.available()) {
      
        trame = HC06.readStringUntil('x');
        timer = trame.toInt();
        
        trame = HC06.readStringUntil('x');
        seuilhumid = trame.toInt();
            
        trame = HC06.readStringUntil('f');
        etat = trame;
        delay(500);
        
        if (etat == true){
        
        Arrosagemanuel();
        }
        else if (etat == false){
          
        }
        
         if (etat == true){
    
      DigitalWrite(13, HIGH);
      DigitalWrite(12, HIGH);
      Lcd.setCursor(0, 0);
      Lcd.print("Arrosage        ");
      Lcd.setCursor(0, 1);
      Lcd.print("Manuel          ");
      
      }else if (etat == false){
    
    DigitalWrite(13, LOW);
    DigitalWrite(12, LOW);
    Lcd.clear()  ;
      }
      }
    
    
      /* Vérifie si la différence entre l'heure actuelle 
      et le dernier clignotement supérieure à 
      l'intervalle */
      
      unsigned long currentMillis = millis();
    
      if (currentMillis - previousMillis >= interval) {
        // save the last time you blinked the LED
        previousMillis = currentMillis;
    
        // if the LED is off turn it on and vice-versa:
        if (statelcd == 1) {
    
         Lcd.setCursor(0, 1);
     Lcd.print("Humidite:" );
     Lcd.print(humidite);
     Lcd.print("%");
     Lcd.print("                "); 
     statelcd = 2;
        } else if (statelcd == 2) {
     Lcd.setCursor(0, 1);
     Lcd.print("Bluetooth:" );
     Lcd.print(bluetoothname);
     Lcd.print("                "); 
     statelcd = 3;
          
        }else if (statelcd == 3) {
     Lcd.setCursor(0, 1);
     Lcd.print("Code BT:" );
     Lcd.print(bluetoothcode);
     Lcd.print("                "); 
     statelcd = 4;
          
        }else if (statelcd == 4) {
     Lcd.setCursor(0, 1);
     Lcd.print("Timer:" );
     Lcd.print(timer);
     Lcd.print("sec");
     Lcd.print("                "); 
     statelcd = 5;
          
        }else if (statelcd == 5) {
     Lcd.setCursor(0, 1);
     Lcd.print("Seuil:" );
     Lcd.print(seuilhumid);
     Lcd.print("%");
     Lcd.print("                "); 
     statelcd = 1;
          
        }
      }
    }
    
    
    
    // Void Arrosage et Arrosage manuel
    
    
    
    void Arrosagemanuel()
    {
      if (etat == true){
    
    DigitalWrite(13, HIGH);
      Lcd.setCursor(0, 0);
      Lcd.print("Arrosage        ");
      Lcd.setCursor(0, 1);
      Lcd.print("Manuel          ");
      
      }else if (etat == false){
    
    DigitalWrite(13, LOW);
    Lcd.clear()  ;
      }
    }
         
       
    void Arrosage()
    {
      
      DigitalWrite(13, HIGH);
      Lcd.setCursor(0, 1);
      Lcd.print("Arrosage ");
      Lcd.print(timer);
      Lcd.print("s");
      delay (timer * 1000);
      DigitalWrite(13, LOW); 
    }




    -
    Edité par BaptisteDesfontaines 20 juillet 2019 à 19:58:35

    • Partager sur Facebook
    • Partager sur Twitter
      21 juillet 2019 à 13:25:26

      Salut !

      Je ne comprend pas bien quand tu dit "les variables se retrouvent inversée sur mon app crée avec AppInventor2" 

      Après j'ai vu cette différence entre t'es deux code 

      SystemGarden.ino

      HC06.print(timer);
      HC06.print("x");
      HC06.print(humidite);
      HC06.print("x");
      HC06.print(seuilhumid);
      HC06.print("x");
      HC06.print(etat);

      SystemGardenWithoutDelay.ino

      HC06.print(timer);
      HC06.print("x");
      HC06.print(humidite);
      HC06.print("x");
      HC06.print(seuilhumid);

      Après il me semblait (à vérifier) pour appInventor qu'un index commençais à 0, toi tu commence à 1

      Voilà peux être que je me trompe, il me faudrait plus d'info. Puis c'est ton projet est totalement réalisable ;)

      • Partager sur Facebook
      • Partager sur Twitter
      Il existe 10 type de personne dans le monde. Ceux qui on comprit et les autres.
        21 juillet 2019 à 21:13:26

        Hello

        Pour ton problème de delay renseigne toi sur la fonction millis qui te permettra de mettre à jour tes valeurs à intervalles de temps régulier sans bloquer le programme;)
        • Partager sur Facebook
        • Partager sur Twitter
          21 juillet 2019 à 22:13:36

          KorvaxKorvax a écrit:

          Hello

          Pour ton problème de delay renseigne toi sur la fonction millis qui te permettra de mettre à jour tes valeurs à intervalles de temps régulier sans bloquer le programme;)

          C'est ce que j'ai fait dans mon 2eme programme SystemGardenWithoutDelay.ino
          Mais les variables se retrouvent inversés dans mon app

          -
          Edité par BaptisteDesfontaines 21 juillet 2019 à 22:14:22

          • Partager sur Facebook
          • Partager sur Twitter
            22 juillet 2019 à 0:55:48

            BaptisteDesfontaines a écrit:

            KorvaxKorvax a écrit:

            Hello

            Pour ton problème de delay renseigne toi sur la fonction millis qui te permettra de mettre à jour tes valeurs à intervalles de temps régulier sans bloquer le programme;)

            C'est ce que j'ai fait dans mon 2eme programme SystemGardenWithoutDelay.ino
            Mais les variables se retrouvent inversés dans mon app

            -
            Edité par BaptisteDesfontaines il y a environ 1 heure

            Au cas ou tu aurais louper mon message :

            Flamby66 a écrit:

            Salut !

            Je ne comprend pas bien quand tu dit "les variables se retrouvent inversée sur mon app crée avec AppInventor2" 

            Après j'ai vu cette différence entre t'es deux code 

            SystemGarden.ino

            HC06.print(timer);
            HC06.print("x");
            HC06.print(humidite);
            HC06.print("x");
            HC06.print(seuilhumid);
            HC06.print("x");
            HC06.print(etat);

            SystemGardenWithoutDelay.ino

            HC06.print(timer);
            HC06.print("x");
            HC06.print(humidite);
            HC06.print("x");
            HC06.print(seuilhumid);

            Après il me semblait (à vérifier) pour appInventor qu'un index commençais à 0, toi tu commence à 1

            Voilà peux être que je me trompe, il me faudrait plus d'info. Puis c'est ton projet est totalement réalisable ;)


            Que signifie les variables se retrouvent inversés ??? Les valeurs sont négative ? Les valeurs sont pas dans le bonne ordre ?

            Merci

            • Partager sur Facebook
            • Partager sur Twitter
            Il existe 10 type de personne dans le monde. Ceux qui on comprit et les autres.
              23 juillet 2019 à 16:01:51

              Flamby66 a écrit:

              Que signifie les variables se retrouvent inversés ??? Les valeurs sont négative ? Les valeurs sont pas dans le bonne ordre ?

              Les variables ne s'affichent pas dans le bon ordre mais je pense que le problème vient de mon app, il doit y avoir un problème de décodage des données.Si quelqu’un connait un autre moyen de transmettre plusieurs données par Bluetooth avec un Arduino, je suis preneur.








              -
              Edité par BaptisteDesfontaines 23 juillet 2019 à 16:02:28

              • Partager sur Facebook
              • Partager sur Twitter
                23 juillet 2019 à 17:11:43

                BaptisteDesfontaines a écrit:

                Flamby66 a écrit:

                Que signifie les variables se retrouvent inversés ??? Les valeurs sont négative ? Les valeurs sont pas dans le bonne ordre ?

                Les variables ne s'affichent pas dans le bon ordre mais je pense que le problème vient de mon app, il doit y avoir un problème de décodage des données.Si quelqu’un connait un autre moyen de transmettre plusieurs données par Bluetooth avec un Arduino, je suis preneur.








                -
                Edité par BaptisteDesfontaines il y a environ 1 heure

                Si elle sont pas dans le bonne ordre suffit de les remettre dans le bonne ordre dans ton apps. Tu envoie avec ton programme arduino timer = 1, humidite = 2, temperature = 3 

                Puis tu les interverties sur appinventor

                • Partager sur Facebook
                • Partager sur Twitter
                Il existe 10 type de personne dans le monde. Ceux qui on comprit et les autres.
                  23 juillet 2019 à 22:37:36

                  En fait, le port série, c'est un flux continu d'octets, il faut pouvoir déterminer le début et la fin d'un message, sinon les lectures entre tes séparateurs peuvent se décaler si l'application est retardée pour une lecture (le dernier champ envoyé et le premier champ de l'envoi suivant peuvent être vus comme un seul champ puisqu'il n'y a pas de séparateur entre 2 envois successifs).

                  Par exemple, tu peux mettre une entête et une terminaison autour de chaque message (ici "a" et "z") comme ceci:

                  HC06.print("a");
                  HC06.print(timer);
                  HC06.print("x");
                  HC06.print(humidite);
                  HC06.print("x");
                  HC06.print(seuilhumid);
                  HC06.print("z");

                  puis lire les champs comme cela:

                  PS: C'est sûr que ça évite les erreurs de compilation d'utiliser AppInventor, mais qu'est ce que c'est long à "écrire"... Et je n'ai pas pu testé pour voir si ça fonctionnait.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    27 juillet 2019 à 17:22:26

                    Re bonjour

                    J'ai modifié le code avec vos infos mais le programme ne fonctionne toujours pas


                    Code: 
                    /*


                      Circuit Capteurs:
                     * Capteurs S pin     to analog pin 0
                     * Capteurs S pin     to analog pin 1
                     * Capteurs S pin     to analog pin 2

                      Circuit Bleutooth:
                     * TXD                to digital pin 0 (RX)
                     * RXD                to digital pin 1 (TX)

                      Circuit Electrovanne et LED temoin:
                     * LED temoin         to digital pin 9
                     * Relais             to digital pin 8

                      Circuit LCD:
                     * LCD RS pin         to digital pin 7
                     * LCD Enable pin     to digital pin 6
                     * LCD D4 pin         to digital pin 5
                     * LCD D5 pin         to digital pin 4
                     * LCD D6 pin         to digital pin 3
                     * LCD D7 pin         to digital pin 2
                     * LCD R/W pin        to ground
                     * LCD VSS pin        to ground
                     * LCD VCC pin        to 5V
                     * LCD VO pin (pin 3) to potentiometre

                    */

                    // include the library code:
                    #include <LiquidCrystal.h>

                    // initialize the library with the numbers of the interface pins
                    LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

                    double version = 2.3 ;
                    double seuilhumid = 50.0 ;
                    double timer = 10.0 ;
                    double humidite ;
                    double humid1 ;
                    double humid2 ;
                    double humid3 ;
                    double statelcd = 1;

                    bool etat = false ;

                    String trame;
                    String btname = "SystemGarden";
                    String btcode = "1234";

                    unsigned long lastMillis = 0;       // Derniere activation


                    const long intervalLCD = 2000;  //Intervalle

                    unsigned long lastMillisBT = 0;       // Derniere activation


                    const long intervalBT = 1000;  //Intervalle

                    // Make bluetooth character:
                    byte icon[8] = {
                      0b00100,
                      0b00110,
                      0b10101,
                      0b01110,
                      0b01110,
                      0b10101,
                      0b00110,
                      0b00100
                    };

                    void DigitalWrite(int pinNumber, boolean status)
                    {
                      pinMode(pinNumber, OUTPUT);
                      digitalWrite(pinNumber, status);
                    }


                    void Arrosage();
                    void Arrosagemanuel();



                    void setup() {



                     // Set up Bluetooth module
                      Serial.begin(9600);
                      
                     // Set up the LCD's number of columns and rows:
                      lcd.begin(16, 2);

                     // Create Bluetooth logo
                      lcd.createChar(0, icon);
                      lcd.setCursor(0, 0);
                      
                      lcd.print("SystemGarden " );
                      lcd.print(version);
                     
                      delay( 2000 );
                      
                    seuilhumid = 50.0 ;
                    timer = 10.0 ;
                    }

                    void loop() {

                     // Lecture des capteurs
                      humid1 = analogRead(0);
                      humid2 = analogRead(1);
                      humid3 = analogRead(2);
                      
                     // Moyenne des capteurs d'humidité
                     // humidite = (humid1+humid2+humid3) / 3 ;
                    humidite = 60;
                     // Verification du seuil
                       if (( (humidite) < (seuilhumid) ))
                      {  
                          Arrosage();  
                        
                        }else {
                          
                          Arrosagemanuel();
                          
                              }
                        
                      
                     //Réception données Blutooth
                      if (Serial.available()) {
                      
                        trame = Serial.readStringUntil('x');
                        timer = trame.toInt();
                        
                        trame = Serial.readStringUntil('x');
                        seuilhumid = trame.toInt();
                            
                        trame = Serial.readStringUntil('f');
                        etat = trame;  
                        
                        trame = "" ;
                        
                        }

                     /* Vérifie si la différence entre l'heure actuelle
                     et le dernier clignotement est supérieure à l'intervalle */

                      if (millis() - lastMillis >= intervalLCD) {
                        
                        lastMillis = millis() ;

                     lcd.setCursor(0, 0);
                     lcd.print("Info           " );
                     lcd.write(byte(0));
                        if (statelcd == 1) {

                     lcd.setCursor(0, 1);
                     lcd.print("Humidite:" );
                     lcd.print(humidite);
                     lcd.print("%");
                     lcd.print("                ");
                     statelcd = 2;
                        
                        }/* else if (statelcd == 2) {
                     lcd.setCursor(0, 1);
                     lcd.print("BT:" );
                     lcd.print(btname);
                     lcd.print("                ");
                     statelcd = 3;
                          
                        }else if (statelcd == 2) {
                     lcd.setCursor(0, 1);
                     lcd.print("Code BT:" );
                     lcd.print(btcode);
                     lcd.print("                ");
                     statelcd = 3;
                          
                        }*/else if (statelcd == 2) {
                     lcd.setCursor(0, 1);
                     lcd.print("Timer:" );
                     lcd.print(timer);
                     lcd.print("sec");
                     lcd.print("                ");
                     statelcd = 3;
                          
                        }else if (statelcd == 3) {
                     lcd.setCursor(0, 1);
                     lcd.print("Seuil:" );
                     lcd.print(seuilhumid);
                     lcd.print("%");
                     lcd.print("                ");
                     statelcd = 1;
                          
                        }
                      }


                    //________________________________________________________________//

                      if (millis() - lastMillisBT >= intervalBT) {
                        
                        lastMillisBT = millis() ;
                      
                      // Envoi des données Blutooth
                     
                       //Serial.print("a");
                       Serial.print(timer);
                       Serial.print(",");
                       Serial.print(humidite);
                       Serial.print(",");
                       Serial.print(seuilhumid);
                       Serial.print(",");
                       //Serial.print("z");
                      }
                    }


                    // Void Arrosage et Arrosage manuel

                    void Arrosagemanuel()
                    {
                      if (etat){
                         Arrosage();
                      }
                    }
                        
                      
                    void Arrosage()
                    {
                      
                      DigitalWrite(8, HIGH);
                      DigitalWrite(9, HIGH);
                      
                      lcd.clear()  ;
                      lcd.setCursor(0, 1);
                      lcd.print("Arrosage ");
                      lcd.print(timer);
                      lcd.print("s");
                      
                      delay (timer * 1000);
                      
                      DigitalWrite(9, LOW);
                      DigitalWrite(8, LOW);
                      lcd.clear()  ;
                    }




                    Je ne vois pas d'où vient le problème même si je pense qu'il y en a plusieurs.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      29 juillet 2019 à 9:57:33

                      J'ai pu testé que le code j'avais posté précédemment fonctionnait (juste le parsage côté app inventor et le petit morceau de code arduino), mais les modifications que tu as faites ont introduit des erreurs.

                      Au début du gros bloc, j'avais mis un bloc "joint" ("mettre "global reception" à joint obtenir "global reception" et appeler BluetoothClient1."recevoir texte"...)  pour ajouter les données qui arrivent sur le bluetooth à la fin du buffer de réception représenté par la variable "globale reception", alors que dans ton code tu remplaces le contenu de cette variable ce qui efface potentiellement des données non encore traitées arrivées précédemment.

                      Puis la dernière ligne du gros bloc ("mettre "Liste données"."Elements" à obtenir "global reception"), il faut remplacer "global reception" par "global data" puisque le sous bloc du dessus y a placé les données découpées.

                      Et bien sûr dans le code arduino, les print('a") et print("z") doivent être décommentés sinon ça ne fonctionnera pas.

                      Il y a un petit problème au niveau du bloc de connexion bluetooth, mais ça n'empêche pas la connexion. Le bloc "Appeler BluetoothClient1.Se connecter" renvoie un booléén (vrai ou faux), en fonction de l'état de la connexion, donc il faudrait plutôt mettre le bloc "Appeler" sur la condition du if qui est en dessous. ListPicker1.Sélection est déjà mis à jour par le simple fait que l'utilisateur sélectionne un client bluetooth donc ça n'a pas de sens de "mettre ListPicker1.Sélection à" dans le bloc "Aprés prise".

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Arrosage automatique Arduino

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown