Salut,
dans le cadre d'un projet ou je dois traiter des telegrammes venant de mon RFID-capteur, je suis bloque.
j'utilise une State Machine dans mon programme pour capturer ces telegrammes.
la presence d'un tag sur le Sensor engendre ces telegrammes.des que le capteur detecte un tag , il envoi un Telegramme commencant par 0xAA que je voudrais enrigister dans un Tableau pour le retouner.
cpp.file
#include "Arduino.h"
#include"RFID.h"
#include "MYHELPERS.h"
#define RFID_Serialport Serial
void RFID::Read_Block()
{
switch (state)
{ case senden:
RFID_Serialport.begin(115200);
Senden(RB_Nutzbytesanzahl, RB_Nutzbyte1, RB_Nutzbyte2);
state = wait;
break;
case wait:
digitalWrite(Send_Recievepin, LOW);
if (RFID_Serialport.available() > 0) {
state = ack;
}
else
state = wait;
break;
case ack:
startbyte = RFID_Serialport.read();
if (startbyte == 0xAA ) {
state = response;
}
else {
state = ack;
}
break;
case response:
myList.add(startbyte);
do {
myList.add(RFID_Serialport.read());
} while (RFID_Serialport.available() > 0);
listlaenge = myList.size();
byte empf[listlaenge];
for (int h = 0; h < listlaenge; h++) {
empf[h] = myList.get(h);
}
memcpy(&printArray, empf, 11 * sizeof(byte) );
myList.clear();
if (listlaenge == 11 ) {
arrayfull = true;
state = response;
}
else {
state = senden;
}
break;
}
}
unsigned char* RFID::Print_Block() {
if (arrayfull == true){
Serial.println("first print");
for (int i=0; i<4; i++){
Serial.println(printArray[i], HEX);
}
static unsigned char prufar[11]; //-> le Tableau a retourner
memcpy(&prufar, printArray, 11 * sizeof(unsigned char));
Serial.println("values in prufar[i]"); l
for (int i=0; i<4; i++){
Serial.println(prufar[i], HEX); // -> la je verifie que les Elements souhaites sont copies
}
arrayfull = false;
return prufar;
}
else return NULL;
}
Header Datei contenant de globales variables
#include <LinkedList.h>
#ifndef MYHELPERS_H
#define MYHELPERS_H
LinkedList<byte> myList = LinkedList<byte>();
static unsigned char printArray[20];
bool arrayfull=false;
bool NovalidArray= false;
byte startbyte;
int listlaenge;
enum State_enum {senden, wait, ack, response};
byte state= senden ;
#endif
Sketch
#include <LiquidCrystal.h>
#include"RFID.h"
RFID RFID(6); // Initialisieren der Bibliothek mit der Send_recievepin Nummer 6
LiquidCrystal lcd(12, 11, 5, 4, 3, 7);
void setup() {
}
void loop() {
RFID.Read_Block();
delay(1);
PrintBlocks();
}
int PrintBlocks(){
unsigned char *checkbyte;
checkbyte=RFID.Print_Block();
if (checkbyte== NULL)
{
return;
}
else{
unsigned char Block[4];
checkbyte=RFID.Print_Block();
Serial.println("second print");
for (int i=0; i<4; i++){
Block[i]= *(checkbyte+i);
Serial.println(Block[i], HEX);
}
}
}
le Print
⸮aah⸮aah⸮first print
AA
B
B
68
values in p⸮]V⸮m⸮u5
AA
B
B
68
second print
A3
0
8
68
⸮aah╪aah
je vois pas ou j'ai pu faire une erreur pour ques les valeures soient modifier.
merci de m'eclaisir ladessus