J'ai un délai avec écran Nextion et arduino mega
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

J'ai un délai avec écran Nextion et arduino mega



  1. #1
    noam

    J'ai un délai avec écran Nextion et arduino mega


    ------

    Bonjour a tous,
    Je suis entrain de programmer un écran Nextion 2.4 sans passer par une bibliothèque, c'est une connexion série TX RX avec arduino mega.
    Le but est de gérer un système d'air conditionner.

    petite explication :
    Avec un Serial Event je lis les données reçu dans une chaîne uint8_t ensuite,
    avec les premier if, je contrôle quel bouton a été cliqué puis j'attribue vrai ou faux a une variable boolean.(sorte de drapeaux).
    avec les 2ème if je test cette variable, si vrai ou faux, j’exécute le code voulue.

    Je poste le bout du code avec le bouton allumage et extinction du système.

    Mon Problème :
    si dans le 2ème if je ne met pas de code, l'arduino reçois de suite chaque bouton clique, des que je rajoute du code ça galère, le serial ne reçois pas toutes les données cliquer, sur l’écran l'animation du clique fonctionne, un sorte de délai pas possible.

    Je demande votre aide, pour résoudre mon problème, aussi d'apprendre a améliorer mon code.

    Code:
    int power_btn_read[7];
    int FanPosition;
    uint8_t temp[8] = {0}, dataReceive_nextion[7] = {0};
    boolean PowerStatus ;
    void setup() 
    {
    Serial.begin(9600);
    Serial1.begin(9600);
    memset(temp, 0, sizeof(temp)); // reset array
    }
    void loop() 
    {
    /*- - - Check which button is pressed - - -*/
    // ON OFF Button 
    if((dataReceive_nextion[0] == 101 && dataReceive_nextion[1] == 0 && dataReceive_nextion[2] == 15 && dataReceive_nextion[3] == 0))
    {
    Serial.println("You press the POWER button");
    memset(dataReceive_nextion, 0, sizeof(dataReceive_nextion)); // reset array
    Serial1.print("get power_btn1.val");
    Serial1.write(0xff);
    Serial1.write(0xff);
    Serial1.write(0xff);
    memset(temp, 0, sizeof(temp)); // reset array
    Serial1.readBytes(temp, 8);
    if(temp[0] == 113 && temp[1] == 0){PowerStatus = false;}
    else if(temp[0] == 113 && temp[1] == 1){PowerStatus = true;}
    }
    if(PowerStatus == true)
    {
    //Serial.println("The System is ON");
    Serial1.print("power_btn1.val=");
    Serial1.print(1);
    Serial1.write(0xff);
    Serial1.write(0xff);
    Serial1.write(0xff);
    }
    else
    {
    //Serial.println("The System is OFF");
    Serial1.print("power_btn1.val=");
    Serial1.print(0);
    Serial1.write(0xff);
    Serial1.write(0xff);
    Serial1.write(0xff);
    }
    void serialEvent1()
    {
    int inChar;
    while (Serial1.available())
    {
    // get the new byte:
    Serial1.readBytes(dataReceive_nextion, 7);
    }
    }

    -----

  2. #2
    jiherve

    Re : J'ai un délaie avec écran Nextion et arduino mega

    Bonjour,
    Comme ton µc est une petite bête il ne sait faire qu'une chose à la fois et que de plus tu n'utilises pas d'interruption alors lorsqu' il est occupé à émettre sur TX il n’écoutera pas toujours RX et tu perdras des messages.
    Solution passer en préemptif (avec gestion Rx,TX par interruption) et cela ira sans doute mieux.
    JR
    l'électronique c'est pas du vaudou!

  3. #3
    noam

    Re : J'ai un délaie avec écran Nextion et arduino mega

    Bonjour merci de répondre.

    C'est ce que j'avais pensé, j'ai fais l'essai avec interrupt sur RX, ça fais la même chose.

  4. #4
    jiherve

    Re : J'ai un délaie avec écran Nextion et arduino mega

    Bonsoir,
    Ok mais que fait ton interruption ?
    Et par ailleurs comme les fonction RX et TX partagent le même registre de controle cela ne résoudra pas forcement le problème car si la routine serial.write ne teste pas la réception alors des messages seront perdus.
    Je ne connais pas et ne veux pas connaitre les routines Arduichose mais mon petit doigt me dit que cela ne supporte que du half duplex.
    JR
    l'électronique c'est pas du vaudou!

  5. A voir en vidéo sur Futura
  6. #5
    noam

    Re : J'ai un délaie avec écran Nextion et arduino mega

    Bonjour, le code que j'ai posté, envoie des données a l’écran en loupe, donc le TX est occupé a envoyer,donc cela bloque le RX de recevoir des données.
    Ce que j'ai fais j'ai rajouter dans mon IF une autre variable pour que la condition ce lance une fois.
    Par la suite je redonne a cette variable 1 si le bouton a été cliqué comme cela j'ai libéré le port RX.

    Code:
    if(x == 1 && z == 1)
    {
     z = 0;
    }

Discussions similaires

  1. [Programmation] Je n'arrive pas à piloter un moteur pas à pas avec mon shielder et la carte arduino méga
    Par invite0aca6712 dans le forum Électronique
    Réponses: 4
    Dernier message: 07/02/2017, 18h06
  2. [Autre] [Arduino Mega] Probleme avec le 3.3.v - ne fonctionne pas correctement
    Par invitefb8bb070 dans le forum Électronique
    Réponses: 10
    Dernier message: 09/02/2016, 16h51
  3. besoin d'aide bouton poussoir avec l'arduino mega
    Par invite7f6bf7c8 dans le forum Électronique
    Réponses: 11
    Dernier message: 20/10/2014, 20h32
  4. Utiliser un capteur à effet Hall avec une carte Arduino mega
    Par invite8dba34f7 dans le forum Électronique
    Réponses: 15
    Dernier message: 20/05/2014, 15h35
  5. Piloter 120 leds avec un Arduino Mega
    Par invite994057e3 dans le forum Électronique
    Réponses: 4
    Dernier message: 05/09/2013, 20h21