Bonjour,
Voici mon programme: Serial : Transmet RX et TX entre 2 Xbee. Serial1: Lit les données sur RX d'une board RFID.
Le problème: Lorsque le lecteur RFID détecte une carte pour la première fois, il achemine bien les données au Xbee, qui le transmet bien à l'autre Xbee qui est connecté sur mon PC.
Seule chose, lors de la 2e, 3e, 4e, 5e etc fois, chaque foid que le lecteur RFID détecte une carte (Serial1.available), celà fais planté la communication et je ne lis pas le bon résultat du Serial1.
Il faut donc que je ''reset'' mon programme, et le tout fonctionne bien encore pour une fois.
Alors, qu'est-ce que je ne fais de correct avec les 2 boucle Serial.availble et Serial1.available???
void setup()
{
Serial.begin(9600);
Serial1.begin(9600);
pinMode(led, OUTPUT);
}
void loop()
{
//delay(1);
led_status();
//get_up_time();
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] == 0x81){ // 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){
//if (event == 1){
//digitalWrite(led, HIGH);
TxBuffer[0] = 0x7E;
TxBuffer[2] = 0x18;
TxBuffer[3] = 0x01;
TxBuffer[4] = 0x00;
TxBuffer[5] = 0x00;
TxBuffer[6] = 0x01;
TxBuffer[7] = 0x01;
TxBuffer[8] = 0x22;//START
TxBuffer[9] = RxBuffer_2[0];
TxBuffer[10] = RxBuffer_2[1];
TxBuffer[11] = RxBuffer_2[2];
TxBuffer[12] = RxBuffer_2[3];
TxBuffer[13] = RxBuffer_2[4];
TxBuffer[14] = RxBuffer_2[5];
TxBuffer[15] = RxBuffer_2[6];
TxBuffer[16] = RxBuffer_2[7];
TxBuffer[17] = RxBuffer_2[8];
TxBuffer[18] = RxBuffer_2[9];
TxBuffer[19] = RxBuffer_2[10];
TxBuffer[20] = RxBuffer_2[11];
TxBuffer[21] = RxBuffer_2[12];
TxBuffer[22] = 0x00;
TxBuffer[23] = 0x00;
TxBuffer[24] = 0x00;
TxBuffer[25] = 0x00;
TxBuffer[26] = 0x00;
TxXsum2 = 0;
for(p=3; p <= 26; p++){
TxXsum2 += TxBuffer[p];
}
TxXsum = 0xFF - TxXsum2;
TxBuffer[27] = TxXsum;
Serial.write(TxBuffer,sizeof(TxBuffer));
event = 0;
//serialCount = 0;
//serialCount_2 = 0 ;
ValidMsgRxied=0;
RxBuffer[0] = 0x00;
//RxBuffer_2[0] = 0x00;
for(k=0; k <= 19; k++){ //Clear le RxBuffer
RxBuffer_2[k] = 0x00;
}
for(k=0; k <= 26; k++){ //Clear le TxBuffer
TxBuffer[k] = 0x00;
}
//}//END event = 1
}//END vail message received
}//END LOOP
void serialEvent1() {
if(Serial1.available()>=13) {
//serialCount_2 = 0 ;
event = 1;
for(j=0; j <= 12; j++){
//digitalWrite(led, HIGH);
RxBuffer_2[j] = Serial1.read();
//serialCount_2++;
//digitalWrite(led, LOW);
}//END FOR
}//END IF
}//END function
void serialEvent() {
if(Serial.available()>=15) {
serialCount = 0 ;
for(int n=0; n <= 14; n++){
//digitalWrite(led, HIGH);
RxBuffer[n] = Serial.read();
serialCount++;
//digitalWrite(led, LOW);
}
}
}
void led_status(){
sys_status++;
if (sys_status <=15000){
digitalWrite(led, LOW);
}
if (sys_status >15000){
digitalWrite(led, HIGH);
}
if (sys_status >=30000){
sys_status = 0;
digitalWrite(led, LOW);
}
}