Ich arbeite an einem Projekt, das das gleichzeitige Lesen von sechs ID-12LA RFID-Lesegeräten erfordert.Wie kann ich mehrere RFID-Lesegeräte über die SoftwareSerial-Bibliothek in einer Schleife simulieren?
Ich habe versucht, Messwerte von sechs Kanälen über die Sparkfun Analog/Digital MUX Breakout-Platine (CD74HC4067), aber ohne Glück. Ich weiß nicht, ob es seriell kommunizieren kann, obwohl ich das auf Bildr.org gelesen habe.
Ich versuche jedoch, das Lesen von mehreren seriellen Ports über die SoftwareSerial-Bibliothek zu emulieren. Ich habe gelesen, dass es nicht gleichzeitig lesen kann, aber vielleicht kann eine Schleife simultanes Hören simulieren. Ich habe versucht, dies zu tun, indem ich auf die erste serielle Schnittstelle höre und dann readTag()
initialisiere, und dann, nachdem diese Funktion beendet ist, beginne zu hören die zweite serielle und initialisiere dann die zweite Funktion.
Die readTag()
Funktion ist in der Lage zu lesen, wenn nur am RFID-Leser angeschlossen ist, so dass das nicht das Problem ist.
Unten ist der Code.
Was wäre der richtige Weg, simultanes Lesen durch die Loop-Funktion zu simulieren und simulieren?
void setup() {
Serial.begin(9600);
ourSerial1.begin(9600);
ourSerial2.begin(9600);
pinMode(RFIDResetPin, OUTPUT);
digitalWrite(RFIDResetPin, HIGH);
}
void loop() {
ourSerial1.listen();
readTag1();
ourSerial2.listen();
readTag2(); // Only this function works right now, because it is the last serial that was initiated in setup.
}
void readTag1() {
char tagString[13];
int index = 0;
boolean reading = false;
while (ourSerial1.available()) {
int readByte = ourSerial1.read();
if (readByte == 2) reading = true; // Beginning of tag
if (readByte == 3) reading = false; // End of tag
if (reading && readByte != 2 && readByte != 10 && readByte != 13) {
//store the tag
tagString[index] = readByte;
index ++;
}
}
checkTag(tagString); // Check if it is a match
clearTag(tagString); // Clear the char of all value
resetReader(); // Reset the RFID reader
}
void readTag2() {
char tagString[13];
int index = 0;
boolean reading = false;
while (ourSerial2.available()) {
int readByte = ourSerial2.read();
if (readByte == 2) reading = true; // Beginning of tag
if (readByte == 3) reading = false; // End of tag
if (reading && readByte != 2 && readByte != 10 && readByte != 13) {
//store the tag
tagString[index] = readByte;
index ++;
}
}
checkTag2(tagString); // Check if it is a match
clearTag(tagString); // Clear the char of all value
resetReader(); // Reset the RFID reader
}