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