Bonsoir à tous,
Je suis en train d'essayer d'adapter un code en c de Matt Danton, qui permet d'envoyer de simple paquets sur le port série avec un cheksum, afin de contrôler l'une de ses cartes électroniques nommé Pbrain.
J'ai fait plusieurs recherches et adaptation sans succès, et je n'ai pas trouvé de code pour l'arduino s'en rapprochant.
voila son exemple de code :
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
// ********************************************************************** // DEFINITIONS // **********************************************************************
#define CMD_PIP_HEADER 0x7e
#define CMD_PIP_ESCAPE 0x7d
#define CMD_PIP_XOR 0x20
// ********************************************************************** // FUNCTION DEFINITIONS // **********************************************************************
// SENDS ONE BYTE TO SERIAL PORT
void SendByte( char lC );
// OPENS SERIAL PORT
void OpenComms( void );
// CLOSES SERIAL PORT
void CloseComms( void );
// SENS PIP PACKET
void SendCMDPIPPacket( char *pPtr, char pLen );
// SENDS BYTE CHECKS FOR ILLEGAL CODES
void SendByteCheckCodes( char lC );
// ********************************************************************** // MAIN CODE // **********************************************************************
void main( void )
{ char lBuffer[10];
// OPEN COMS DEVICE (User defined communications device)
OpenComms();
// SEND HEXENGINE WAKE COMMAND
lBuffer[0] = '+'; SendCMDPIPPacket( lBuffer, 1 );
// Delay 10 Seconds
delay(10000);
// SEND HEXENGINE SLEEP COMMAND
lBuffer[0] = '-'; SendCMDPIPPacket( lBuffer, 1);
// CLOSE COMMS DEVICE
CloseComms();
// END
}
// **********************************************************************
// Send Command PIP Packet //
// Input:
// pPtr = char pointer to data buffer
// pLen = length of data buffer //
// Output: none
// **********************************************************************
void SendCMDPIPPacket( char *pPtr, char pLen ) {
char lC,lCs,lB;
// SEND PIP_HEADER
SendByte( CMD_PIP_HEADER );
// PACKET COUNT NEEDS ESCAPE CODE CHECKING!
SendByteCheckCodes( pLen );
// SETUP CHECK SUM
lCs = 0;
// SEND DATA WITH ESCAPE CODES IF NECESSARY.
// CALCULATE CHECKSUM WITHOUT ESCAPE CODES.
for( lC = 0; lC < pLen; lC++ )
{
// lB = NEXT BYTE OF DATA
lB = *pPtr;
// CHECK FOR ILLEGAL CODE & SEND
SendByteCheckCodes( lB );
// ADD TO CHECK SUM
lCs += lB;
// INCREMENT POINTER
pPtr++; }
// CALCULATE CHECKSUM
lCs = 0xff - lCs;
// CHECK FOR ILLEGAL CODE + SEND CHECKSUM
SendByteCheckCodes( lCs );
}
// ****************************************************************************
// CHECK COMMAND ILLEGAL CODE //
// INPUT: lC = Byte to be sent
// // OUTPUT: none
// ****************************************************************************
void SendByteCheckCodes( char lC )
{
// IF SENDING PIP MODE 0 PACKETS, REMOVE FROM HERE..
if( lC == CMD_PIP_HEADER || lC == CMD_PIP_ESCAPE )
{
SendByte( CMD_PIP_ESCAPE );
SendByte( lC ^ CMD_PIP_XOR );
}
else
// TO HERE..
{
SendByte(lC );
}