I just made this code for communication between 2 xbee. I work pretty well, except for 2 things....
In case 1, it properly recognized that RxBuffer[0] == 0x7E.
It go trough every case, but at case 3, it recognized Rxbuffer[3] == 0xFF. It should be 0x81. ----IT IS surely in reality coz it wouldnt work! so how can I see this 0x81 instead of 0xFF!!??
If I try to put TxBuffer[8] = RxBuffer [3]; to see what was was the unit, it return me 0xFF
If I try to put TxBuffer[9] = RxBuffer [9]; to see what was was the unit, it return me 0xFF just like RxBuffer[3];
***RxBuffer[9] is a value that change from 0x00 to 0x255 (Joystick in labview)
So I think it must be a conversion type that fc my result between Read.serial and Write.serial.
I print my result in HEX in labview
So is there any conversion type I should do ALWAYS to <> with HEX value????
DO you see any errors that could make that???
code
int serialCount = 0; // A count of how many bytes we receive
int n = 0;
unsigned char RxByteCount, RxSerialState, ValidMsgRxied, RxError;
unsigned char TxXsum,RxXsum,RxXSum2;
unsigned char RxBuffer[11];
unsigned char TxBuffer[11];
char rx;
int p;
int led = 13;
byte test, test2;
void setup()
{
Serial.begin(9600);
pinMode(led, OUTPUT);
}
void loop()
{
//digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
//delay(100); // wait for a second
//digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
//delay(100); // wait for a second
//digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
switch(RxSerialState)
{
case 0: // Check for Start Delimiter
if(RxBuffer[0]== 0x7E){
RxSerialState=1;
RxXsum=0x00;
ValidMsgRxied=0;
RxError=0;
}
else
RxSerialState=0;
break;
case 1: // Read Byte Count High
RxSerialState=2;
break;
case 2: // Read Byte Count Low
RxByteCount = RxBuffer[2];
if ( (RxByteCount < 30) || (RxByteCount > 0) )
RxSerialState=3;
else
RxSerialState=0;
break;
case 3: // Read API ID
RxXsum = RxXsum + RxBuffer[3];
p=4;
RxByteCount--;
if ( RxBuffer[3] == 0xFF){ // API Type=0x81 sur XBEE;
RxSerialState=4;
}
else
RxSerialState=0;
break;
case 4: // Read Data
RxXsum=RxXsum+RxBuffer[p];
p++;
if (RxByteCount == 0)
{
RxSerialState=5;
RxXsum=255-RxXsum;
}
RxByteCount--;
break;
case 5: // Read XSUM
//if ( (RxXsum==RxBuffer[p]) && (RxByteCount == 0) )
//{
ValidMsgRxied=1;
RxSerialState=0;
//}
//else
// RxError=1;
break;
} // end switch
if(ValidMsgRxied == 1){
//digitalWrite(led, HIGH);
//GetData[9] = RxBuffer[3];
test = 10;
test2 = 20;
Serial.print(test2, HEX);
TxBuffer[0] = 0x7E;
TxBuffer[1] = 0x00;
TxBuffer[2] = 0x07;
TxBuffer[3] = 0x01;
TxBuffer[4] = 0x00;
TxBuffer[5] = 0x00;
TxBuffer[6] = 0x01;
TxBuffer[7] = 0x01;
//TxBuffer[8] = Serial.print(RxXsum, DEC);
//TxBuffer[9] = Serial.print(RxByteCount, HEX);
//TxBuffer[8] = RxXsum;
//TxBuffer[9] = RxXSum2;
TxBuffer[8] = RxBuffer[8];
TxBuffer[9] = test2; //test2 is now 0x14
TxXsum = 0xFF - ( TxBuffer[3] + TxBuffer[4] + TxBuffer[5] + TxBuffer[6] + TxBuffer[7] + TxBuffer[8] + TxBuffer[9] );
TxBuffer[10] = TxXsum;
Serial.write(TxBuffer,sizeof(TxBuffer));
serialCount = 0;
ValidMsgRxied=0;
//digitalWrite(led, LOW);
}
}
void serialEvent() {
while (Serial.available()) {
serialCount = 0 ;
for(int n=0; n <= 10; n++){
digitalWrite(led, HIGH);
RxBuffer[n] = Serial.read();
serialCount++;
digitalWrite(led, LOW);
}
}
}
/code