Afficher valeur d'un capteur sur écran nextion

bonjour les gars,
j'ai envie d'afficher les valeurs que j'ai mesuré avec mon capteur sur un écran nextion.
mon capteur a une connexions rx et tx que j'ai relié à l'arduino mais maintenant je veux afficher ces valeurs mesurées sur le nextion.
j'ai utilisé le moniteur série et les valeurs sont bonnes.
j'utilise :
-un arduino méga
-un capteur OCS-3F qui mesure la température , le débit d'oxygène et conentration d'oxygène
-un écran nextion basic 2.8 pouces module LCD écran tactile TFT NX3224T028 pour Arduino

Enfin, voici mon programme arduino ci-dessous que je veux adapter avec un affichage nextion.

merci d'avance de l'aide que vous pourriez m'apporter.

#define BUFF_SIZE       15

#define MSG_ACK         0x16
#define MSG_LB          0x09
#define MSG_CMD         0x01

#define Valve1          10
#define Valve2          11

const uint8_t testMsg[] = {0x16,0x09,0x01,0x01,0x78,0x00,0x01,0x28,0x00,0x00,0x3E,0x00};

byte
    rxBuffer[BUFF_SIZE];   
bool
    msgCompleteFlag;

enum rxStates
{
    MSG_ACK_BYTE=0,
    MSG_LB_BYTE,
    MSG_CMD_BYTE,
    MSG_DATA_BYTES,
    MSG_ST_BYTES,
    MSG_CS_BYTE
       
};

void setup()
{
    Serial.begin(9600);
    Serial1.begin(9600);
    pinMode (Valve1, OUTPUT);
    pinMode (Valve2, OUTPUT);
    
    msgCompleteFlag = false;
    
    

}//setup
void electrovanne()
{
  digitalWrite (Valve1, HIGH);
  digitalWrite (Valve2, LOW);
  delay (2000);
  digitalWrite (Valve1, LOW);
  digitalWrite (Valve2, HIGH);
  delay (2000);
}

void loop()
{
    RxO2DataStateMachine();
    
    DebugMessage( false );           //use false to stop test messages
    
    if( msgCompleteFlag == true )
    
    {
        DisplayMessage();
        msgCompleteFlag = false;
       
    }//if
   
}//loop

void DebugMessage( bool debug )
{
    static uint32_t
        timeDebug;
    uint32_t
        timeNow;

    timeNow = millis();
    if( (timeNow - timeDebug) < 1000ul )
        return;

    timeDebug = timeNow;
    
    if( !debug )
        return;
        
    memcpy( rxBuffer, testMsg, sizeof( testMsg ) );
    if( CheckMsgChecksum() )
        msgCompleteFlag = true;
        
}//DebugMessage

void DisplayMessage( void )
{
    Serial.print( "ACK...........: 0x" );
    Serial.println( rxBuffer[0], HEX );
    Serial.print( "LB............: 0x" );
    Serial.println( rxBuffer[1], HEX );
    Serial.print( "CMD...........: 0x" );
    Serial.println( rxBuffer[2], HEX );
    //
    Serial.print("Concentration :");
    int16_t conc = ((int16_t)rxBuffer[3] << 8) + rxBuffer[4];
    float fConc = (float)conc/10.0;
    Serial.print( fConc,1 );
    Serial.println( "%" );
    //
    Serial.print("Debit :");
    int16_t flow = ((int16_t)rxBuffer[5] << 8) + rxBuffer[6];
    float fFlow = (float)flow / 10.0;    
    Serial.print( fFlow,1 );
    Serial.println( "L/min" );
    //
    Serial.print("Temperature :");
    int16_t temp = ((int16_t)rxBuffer[7] << 8) + rxBuffer[8];
    float fTemp = (float)temp / 10.0;
    Serial.print( fTemp,1 );
    Serial.println( "oC" );
    //
    Serial.print( "ST1...........: 0x" );
    Serial.println( rxBuffer[9], HEX );
    Serial.print( "ST2...........: 0x" );
    Serial.println( rxBuffer[10], HEX );
    Serial.print( "Checksum......: 0x" );
    Serial.println( rxBuffer[11], HEX );
    Serial.println();

    delay (2000);
   
}//DisplayMessage

void RxO2DataStateMachine( void )
{
    static uint8_t
        stateRX = rxStates::MSG_ACK_BYTE,
        rxIndex;
    char cRxByte;
       
    if( Serial1.available() > 0 )
    {
        while( Serial1.available() > 0 )
        {
            cRxByte = Serial1.read();
               
            switch( stateRX )
            {
                case    rxStates::MSG_ACK_BYTE:
                    if( cRxByte == MSG_ACK )
                    {
                        rxIndex = 0;
                        rxBuffer[rxIndex++] = cRxByte;
                        stateRX = rxStates::MSG_LB_BYTE;
                       
                    }//if
                   
                break;

                case    rxStates::MSG_LB_BYTE:
                    if( cRxByte == MSG_LB )
                    {
                        rxBuffer[rxIndex++] = cRxByte;
                        stateRX = rxStates::MSG_CMD_BYTE;
                       
                    }//if
                    else
                        stateRX = rxStates::MSG_ACK_BYTE;
               
                break;

                case    MSG_CMD_BYTE:
                    if( cRxByte == MSG_CMD )
                    {
                        rxBuffer[rxIndex++] = cRxByte;
                        stateRX = rxStates::MSG_DATA_BYTES;
                       
                    }//if
                    else
                        stateRX = rxStates::MSG_ACK_BYTE;
               
                break;

                case    rxStates::MSG_DATA_BYTES:
                    rxBuffer[rxIndex++] = cRxByte;
                    if( rxIndex == 9 )
                        stateRX = rxStates::MSG_ST_BYTES;
                break;
               
                case    rxStates::MSG_ST_BYTES:
                    rxBuffer[rxIndex++] = cRxByte;
                    if( rxIndex == 11 )
                        stateRX = rxStates::MSG_CS_BYTE;
                break;

                case    MSG_CS_BYTE:
                    rxBuffer[rxIndex] = cRxByte;
                    if( CheckMsgChecksum() )
                        msgCompleteFlag = true;
                   
                    stateRX = rxStates::MSG_ACK_BYTE;
                   
                break;
               
            }//switch
           
        }//while
       
    }//if
   
}//RxO2DataStateMachine

bool CheckMsgChecksum( void )
{
    char
        sum = 0;
       
    for( uint8_t i=0; i<11; i++ )
        sum += rxBuffer[i];

    sum = 0x00 - sum;

    if( sum == rxBuffer[11] )
        return true;
    else
    {
        Serial.println( "** Bad checksum" );
        return false;
    }//else
     
}//CheckMsgChecksum 

:warning:
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans Les bonnes pratiques du Forum Francophone

Je suis en plein dedans en ce moment !
Quel objet as tu mis sur l'écran ?
Pour que l'arduino communique avec l'écran il suffit de faire un Serial.print(objet et variable de l'objet)

Voici un exemple de ce que moi j'utilise pour une zone de texte :

    Serial1.print("Kmh_1.txt="); //Je déclare l'objet (Kmh) et la variable (txt) ou je veux écrire
    Serial1.print("\""); //Ca je ne sais pas mais ca marche pas sans
    Serial1.print(map(Val_cpt_kmh, 0, 225, 0, 120)); //J'écris la valeur que je veux afficher (ici mapqqch)
    Serial1.print(" Km/h"); //J'écris ca aussi après ma valeur (c'est un compteur de vitesse)
    Serial1.print("\"");  //PAreil que 2 lignes plus haut
    Serial1.print( "\xFF\xFF\xFF"); //Obligatoire pour dire à l'écran que l'écriture est fini

En fait pour l'écran j'ai été sur le logiciel nextion editor et j'ai créé 3 zones de textes avec comme titre température, concentration et débit.
Maintenant je cherche juste à afficher les valeurs mesurées par mon capteur sur arduino.

Mais je vais essayer ce que tu m'as dis puis on verra.

Merci

Bonjour Deadlu17,
J'ai toujours pas trouvé la solution pour afficher sur l'écran Nextion.
Tu sais m'envoyer ton programme complet comme ça je compare stp ?

Merci

Salut,

Mon code est très long.
Envoi moi le tiens que regarde ça

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.