IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Le code ESP devient le code Arduino


Sujet :

Arduino

  1. #1
    Membre régulier
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2021
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Australie

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Juin 2021
    Messages : 53
    Points : 79
    Points
    79
    Par défaut Le code ESP devient le code Arduino
    Je veux utiliser l'écran tactile Stone avec Arduino UNO pour faire un projet de station météo, j'ai vu l'article sur le web est fait en utilisant ESP32, je veux changer le code de ESP32 au code de Arduino, mais j'ai changé la moitié de celui-ci et a trouvé qu'il n'est pas complet, bien que les fonctions de base sont écrits sur le code à l'intérieur de la configuration n'est pas donné.
    J'hésite maintenant à savoir quel code doit être écrit dans le setup ? J'ai écrit moi-même un débit en bauds.
    Voici le code que j'ai écrit à mi-chemin.
    On dirait que ça va compiler et passer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    void setup() {
      Serial.begin(115200);
    }
     
    void loop() {
     
    int lightState = 0;
    bool TemperatureBool = false;
    bool HumidityBool = false;
    bool illuminationBool = false;
    bool illuminationState = false;
     
    uint8_t TemperatureValueInteger = 0;
    uint8_t TemperatureValueDecimal = 0;
    uint8_t TemperatureValue = 0;
     
    uint8_t HumidityValue = 0;
    uint8_t illuminationValue = 0;
     
    uint8_t TemperatureOutput[8] = {0xA5, 0x5A, 0x05, 0x82, 0x00, 0x10, 0x00, 0x00};
    uint8_t HumidityOutput[8] = {0xA5, 0x5A, 0x05, 0x82, 0x00, 0x15, 0x00, 0x00};
    uint8_t illuminationOutput[8] = {0xA5, 0x5A, 0x05, 0x82, 0x00, 0x20, 0x00, 0x00};
    uint32_t cout_i;
    uint8_t RecievedTemp[40];
     
     
     if(Serial.available() != 0)
      {
        for(cout_i = 0; cout_i < 9; cout_i ++)
        {
            RecievedTemp[cout_i] = Serial.read();
        }
        switch(RecievedTemp[5])
        {
        case 0x0D://Temperature start
            TemperatureBool = true;
            break;
        case 0x0E://Temperature stop
            TemperatureBool = false;
            TemperatureOutput[6] = 0;
            TemperatureOutput[7] = 0;
            Serial.write(TemperatureOutput, 8);
            break;
        case 0x0F://Temperature back
            TemperatureBool = false;
            break;
        case 0x11://Humidity start
          HumidityBool = true;
            break;
        case 0x12://Humidity stop
            HumidityBool = false;
            HumidityValue = 0;
            HumidityOutput[7] = HumidityValue;
            Serial.write(HumidityOutput, 8);
            break;
        case 0x10://Humidity back
            HumidityBool = false;
            break;
        case 0x14://illumination start
          illuminationBool = true;
          illuminationState = false;
            break;
        case 0x15://illumination stop
          illuminationBool = false;
          illuminationValue = 0;
          illuminationOutput[7] = illuminationValue;
          Serial.write(illuminationOutput, 8); 
            break;
        case 0x13://illumination back
          illuminationValue = 0;
          illuminationBool = false;
          break;
        default:
            break;
        }
    }
    }

  2. #2
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 715
    Points : 5 403
    Points
    5 403
    Par défaut
    Salut

    c'est vous qui avez écrit le code? vous pouvez partager le lien vers l'article en question?

    ça ce n'est pas bon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     if(Serial.available() != 0)
      {
        for(cout_i = 0; cout_i < 9; cout_i ++)
        {
            RecievedTemp[cout_i] = Serial.read();
        }
    vous demandez s'il y a au moins 1 octet dispo sur le port série mais vous en lisez 9 sans vraiment savoir s'ils sont là...

    qui envoie les infos au port série?

  3. #3
    Membre régulier
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2021
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Australie

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Juin 2021
    Messages : 53
    Points : 79
    Points
    79
    Par défaut
    J'ai modifié le code de manière appropriée en fonction du code de cet article et de mes propres adresses de variables GUI, mais comme le code qu'il donne lui-même n'est pas complet, je pense que ce que j'ai écrit est également incomplet.
    Voici le lien vers cet article : https://www.stoneitech.com/applicati...r-station.html
    Mais je n'ai eu aucun problème à compiler sur l'IDE Arduino et il a bien compilé.
    Il n'a pas écrit ce qui devrait être dans la fonction setup.

  4. #4
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 715
    Points : 5 403
    Points
    5 403
    Par défaut
    un programme peut compiler mais être complètement buggy...

    sur l'article ils disent

    ---
    Please contact us if you need a complete procedure:
    https://www.stoneitech.com/contact
    We will reply to you within 12 hours.
    ---

    vous les avez contacté?

    il manque la définition de l'interface etc...

    vous devriez mettre ce code au placard et investir votre temps à
    - comprendre comment fonctionne ce type d'écran série
    - comprendre comment fonctionnent les capteurs que vous voulez utiliser (le DHT22 mieux que DHT11)
    - définir ce que vous voulez obtenir et appliquer les connaissances acquises pour écrire le code de votre application

  5. #5
    Membre régulier
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2021
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Australie

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Juin 2021
    Messages : 53
    Points : 79
    Points
    79
    Par défaut
    Bonjour Jay, merci pour la suggestion, j'ai essayé de lire l'exemple de capteur de température et le fichier de bibliothèque, j'ai écrit un fichier de bibliothèque de capteur de température moi-même et l'ai appliqué dans Arduino IDE, cela a fonctionné.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    int lightState = 0;
    bool TemperatureBool = false;
    bool HumidityBool = false;
    bool illuminationBool = false;
    bool illuminationState = false;
     
    uint8_t TemperatureValueInteger = 0;
    uint8_t TemperatureValueDecimal = 0;
    uint8_t TemperatureValue = 0;
     
    uint8_t HumidityValue = 0;
    uint8_t illuminationValue = 0;
     
    uint8_t TemperatureOutput[8] = {0xA5, 0x5A, 0x05, 0x82, 0x00, 0x10, 0x00, 0x00}; //A5 5A 06 83 00 0A 01 00 02
    uint8_t HumidityOutput[8] = {0xA5, 0x5A, 0x05, 0x82, 0x00, 0x15, 0x00, 0x00}; //A5 5A 06 83 00 14 01 00 05
    uint8_t illuminationOutput[8] = {0xA5, 0x5A, 0x05, 0x82, 0x00, 0x20, 0x00, 0x00}; //A5 5A 06 83 00 18 01 00 08
    uint32_t cout_i;
    uint8_t RecievedTemp[40];
     
    #include "dht11.h"
    dht11 DHT;
    #define DHT11_PIN 5
    #define PIN_A 3
     
     
    void setup() {
     
      Serial.begin(115200);
     
    }
     
    void loop() {
     
    DHT.read(DHT11_PIN);
     
     if(Serial.available() != 0)
      {
        for(cout_i = 0; cout_i < 9; cout_i ++)
        {
            RecievedTemp[cout_i] = Serial.read();
        }
        switch(RecievedTemp[5])
        {
        case 0x0A://Temperature start
            TemperatureBool = true;
            break;
        case 0x0C://Temperature stop
            TemperatureBool = false;
            TemperatureValue = DHT.temperature;
            TemperatureOutput[7] = TemperatureValue;
            Serial.write(TemperatureOutput, 8);
            break;
        case 0x0E://Temperature back
            TemperatureBool = false;
            break;
        case 0x14://Humidity start
          HumidityBool = true;
            break;
        case 0x16://Humidity stop
            HumidityBool = false;
            HumidityValue = DHT.humidity;
            HumidityOutput[7] = HumidityValue;
            Serial.write(HumidityOutput, 8);
            break;
        case 0x13://Humidity back
            HumidityBool = false;
            break;
        case 0x18://illumination start
          illuminationBool = true;
          illuminationState = false;
            break;
        case 0x19://illumination stop
          illuminationBool = false;
          illuminationValue = analogRead(PIN_A);
          illuminationOutput[7] = illuminationValue;
          Serial.write(illuminationOutput, 8); 
            break;
        case 0x17://illumination back
          illuminationValue = 0;
          illuminationBool = false;
          break;
        default:
            break;
        }
    }
    }

  6. #6
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 715
    Points : 5 403
    Points
    5 403
    Par défaut
    Bonjour

    qui envoie (et comment) des informations sur la ligne série?

    comme déjà mentionné, vous prenez un risque avec ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     if(Serial.available() != 0)
      {
        for(cout_i = 0; cout_i < 9; cout_i ++)
        {
            RecievedTemp[cout_i] = Serial.read();
        }
    car vous ne pouvez avoir qu'un seul octet dans le buffer et vous en lisez 9.

  7. #7
    Membre régulier
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2021
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Australie

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Juin 2021
    Messages : 53
    Points : 79
    Points
    79
    Par défaut
    Oui, donc j'ai fait une boucle, en lisant un bout à la fois, puis en lisant 8 fois.

  8. #8
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 715
    Points : 5 403
    Points
    5 403
    Par défaut
    j'ai fait une boucle, en lisant un bout à la fois, puis en lisant 8 fois
    une autre façon de faire c'est d'attendre que les octets soient tous là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     if(Serial.available() >= 9)
      {
        for(cout_i = 0; cout_i < 9; cout_i ++)
        {
            RecievedTemp[cout_i] = Serial.read();
        }
      ...
    (mais dans l'absolu c'est toujours mieux de vider le buffer d'entrée quand on en a l'occasion car sa taille est limitée)

    vous pourriez aussi utiliser Serial.readBytes(RecievedTemp, 9) (en testant si les 9 sont là, sinon en gérant le time out)

  9. #9
    Membre régulier
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2021
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Australie

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Juin 2021
    Messages : 53
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par Jay M Voir le message
    une autre façon de faire c'est d'attendre que les octets soient tous là

    (mais dans l'absolu c'est toujours mieux de vider le buffer d'entrée quand on en a l'occasion car sa taille est limitée)

    vous pourriez aussi utiliser Serial.readBytes(RecievedTemp, 9) (en testant si les 9 sont là, sinon en gérant le time out)
    Oui, je le ferai, merci beaucoup !

Discussions similaires

  1. Générer code Arduino à partir d'un modèle UML
    Par raoudha1 dans le forum Eclipse Modeling
    Réponses: 0
    Dernier message: 09/05/2018, 12h11
  2. TIPE PREPA code arduino acceleromètre+ servo
    Par Antloip dans le forum Arduino
    Réponses: 8
    Dernier message: 15/03/2018, 20h12
  3. Problème code arduino
    Par JulienNnnn dans le forum Arduino
    Réponses: 3
    Dernier message: 24/08/2017, 18h06
  4. Problème avec code arduino
    Par mahaman bahari dans le forum Arduino
    Réponses: 2
    Dernier message: 10/05/2016, 19h03
  5. Algorithme par code Arduino
    Par slender67 dans le forum Arduino
    Réponses: 3
    Dernier message: 20/03/2016, 16h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo